[vc_row][vc_column][vc_column_text]Cet article est paru, initialement, sur le blog cooking-excel : voir l’article original [/vc_column_text][vc_custom_heading text= »Si vous vous demandez comment supprimer les doublons d’une liste en ne conservant que la ligne la plus récente ? Je vais vous montrer comment faire en partant d’un exemple simple. Tout d’abord dans EXCEL et ensuite dans POWERQUERY. » font_container= »tag:h2|text_align:left|color:__USE_THEME_MAIN_COLOR__ » use_theme_fonts= »yes »][vc_empty_space height= »30px »][/vc_column][/vc_row][vc_row row_type= »row » text_align= »left »][vc_column][vc_custom_heading text= »Supprimons les doublons dans Excel ! » font_container= »tag:h3|text_align:left » use_theme_fonts= »yes »][vc_empty_space height= »10px »][vc_column_text]Voici le tableau exemple:[/vc_column_text][vc_single_image image= »7403″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]L’idée est de supprimer les codes produit en doublon afin de ne garder qu’un libellé produit, celui qui a été mis à jour le plus récemment. Pour P4, nous préférons donc garder « Enceinte » plutôt que « Haut-Parleur » car la date est plus récente.[/vc_column_text][vc_column_text]Le résultat final devrait donc ressembler à ceci:[/vc_column_text][vc_single_image image= »7404″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]Dans Excel, cette manipulation est assez simple et en deux clics nous pouvons avoir un résultat probant :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »RUBAN : Données > Trier et filtrer > Trier > Choisir Date, Valeurs, Du plus récent au plus ancien > OK » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »RUBAN : Données > Outils de données > Supprimer les doublons > Sélectionner uniquement Code Produit > OK » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_empty_space height= »10px »][vc_column_text]Et voila, ce n’est pas plus compliqué ![/vc_column_text][vc_empty_space height= »50px »][/vc_column][/vc_row][vc_row row_type= »row » text_align= »left »][vc_column][vc_custom_heading text= »Et maintenant dans PowerQuery ! » font_container= »tag:h3|text_align:left » use_theme_fonts= »yes »][vc_empty_space height= »10px »][vc_column_text]Mais dans PowerQuery, les choses se compliquent car la suppression de doublons ne s’applique qu’à la source et non à la table triée comme nous allons le voir.[/vc_column_text][vc_empty_space height= »10px »][vc_column_text]
Première étape : importer le tableau dans Power Query
Se positionner sur n’importe qu’elle cellule du tableau :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Avec Excel 2016 : Données > Récupérer et Transformer > À partir d’un tableau » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Avec Excel 2010/2013: Power Query > Données Excel > À partir du tableau » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_empty_space height= »10px »][vc_column_text]
Deuxième étape : trier
L’étape suivante est donc de faire comme dans Excel, à savoir trier le tableau du plus récent au plus ancien :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Clic-droit sur colonne Date > Tri décroissant » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_single_image image= »7405″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]
Supprimer les doublons
Si nous reprenons ce que nous avons fait dans Excel, nous devons donc supprimer les doublons :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Sélectionnez la colonne Code Produits » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Accueil > Réduire les lignes > Supprimer les doublons » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_single_image image= »7406″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]Malgré le tri, nous n’avons pas supprimer les bonnes lignes :[/vc_column_text][vc_single_image image= »11798″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]En effet, les lignes ont été supprimées en se basant sur la table de départ (Source) et en ne gardant que la première occurrence du Code Produit.[/vc_column_text][vc_column_text]
Utilisation du Buffer
Nous allons devoir modifier le code réalisé en langage M :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Accueil > Requête > Editeur avancé » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_column_text]Vous devriez lire le code suivant :
let Source = Excel.CurrentWorkbook(){[Name="T_Pdts"]}[Content], #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Code Produit", type text}, {"Libelle", type text}}), TriDate = Table.Sort(#"Type modifié",{{"Date", Order.Descending}}), #"Doublons supprimés" = Table.Distinct(TriDate, {"Code Produit"}) in #"Doublons supprimés"
[/vc_column_text][vc_empty_space height= »20px »][vc_column_text]Nous allons à présent modifier ce code :
let Source = Excel.CurrentWorkbook(){[Name="T_Pdts"]}[Content], #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type datetime}, {"Code Produit", type text}, {"Libelle", type text}}), TriDate = Table.Sort(#"Type modifié",{{"Date", Order.Descending}}), Buffered = Table.Buffer(TriDate), #"Doublons supprimés"= Table.Distinct(Buffered, {"Code Produit"}) in #"Doublons supprimés"
[/vc_column_text][vc_empty_space height= »20px »][vc_column_text]Nous avons inséré une ligne et avons modifié la suivante pour que l’enchaînement séquentiel perdure.
La ligne ajoutée est : Buffered = Table.Buffer(TriDate),
En fait, nous avons mis en mémoire vive (Buffer) la table résultante de l’étape précédente, à savoir TriDate. Et nous avons ensuite supprimé les doublons de cette nouvelle table.
De cette façon, la suppression de doublons ne se fait pas depuis la source de la requête mais depuis une autre table enregistrée en mémoire vive.[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Cliquez sur OK et observez le résultat. » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Pour une meilleure lisibilité, changez le nom de la dernière étape: SupprDoublons » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_column_text]Et vous aurez :[/vc_column_text][vc_single_image image= »7408″ img_size= »full » alignment= »center »][vc_empty_space height= »20px »][vc_column_text]Et pour finir :[/vc_column_text][bsf-info-box icon= »linearicons-mouse-left » icon_size= »20″ title= »Accueil > Fermer et charger » pos= »left » el_class= »use-as-lists » heading_tag= »p »][/bsf-info-box][vc_empty_space height= »50px »][/vc_column][/vc_row][vc_row][vc_column][vc_custom_heading text= »Conclusion » font_container= »tag:h3|text_align:left » use_theme_fonts= »yes »][vc_column_text]Vous imaginez bien que j’ai testé pas mal d’autres choses, comme utiliser la requête triée en référence d’une autre requête mais le problème n’était pas réglé.
La fonction BUFFER est donc très utile ici mais attention, elle a essentiellement deux inconvénient :
- Elle brise le Query Folder
- Si le nombre d’éléments de la requête est conséquent, cela peut poser de lourds problèmes de performances.
Dans mon cas, j’ai eu besoin d’utiliser cette fonction avec Power Query pour Importer des fichiers d’incidents que des collègues m’avaient extraits. Toutefois, il y avait des doublons entre les différents fichiers envoyés. J’ai donc dû les supprimer. Les statuts des incidents ont évolué et je ne voulais que le dernier statut, d’où ce besoin. J’ai traité quelques milliers de lignes sans aucun problème avec cette fonction BUFFER.[/vc_column_text][/vc_column][/vc_row]