par , 27/09/2021 à 09h00 (3052 Affichages)
Salut.
Dernièrement, on demandait sur le forum comment réaliser en VBA la liste des adresses mails choisies dans un tableau...
![Nom : 2021-09-27_085020.png
Affichages : 1666
Taille : 10,1 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=605514&d=1632725439)
En Excel 365, il existe les fonctions JOINDRE.TEXTE et FILTRE qui permettent de se passer de VBA. J'en parle dans ce billet => =JOINDRE.TEXTE(";";VRAI;FILTRE(Tableau1[Mail];Tableau1[Sélection]="x")). Si l'on dispose d'un abonnement 365, c'est me semble-t-il la solution la plus simple et rapide à mettre en place.
![Nom : 2021-09-27_085131.png
Affichages : 701
Taille : 9,6 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=605515&d=1632725528)
Sans Excel 365, on peut se tourner vers le VBA et une fonction personnalisée, avec le défaut qu'elle transforme le fichier en xlsm, ce qui n'est pas forcément souhaité ni accepté (limitations IT, fichier utilisé via l'explorateur WEB, ...):
1 2 3 4 5 6 7 8
| Function EmailsSelectionnes(Emails As Range, Choix As Range)
Dim i As Long
For i = 1 To Choix.Rows.Count
If UCase(Choix(i).Value) = "X" Then EmailsSelectionnes = EmailsSelectionnes & Emails(i).Value & ";"
Next
If EmailsSelectionnes <> "" Then EmailsSelectionnes = Left(EmailsSelectionnes, Len(EmailsSelectionnes) - 1)
End Function |
![Nom : 2021-09-27_085326.png
Affichages : 702
Taille : 8,8 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=605516&d=1632725621)
Depuis Excel 2010, on peut aussi se tourner vers Power Query, qui permet de combiner des listes en évitant le VBA (Là aussi, attention aux limites d'utilisation dans l'explorateur Internet). Pour cela, il faut:
- importer le tableau dans Power Query;
- filtrer les lignes;
- transformer en liste la colonne des emails filtrés;
- ajouter une étape permettant de combiner (concaténer) les éléments de la liste dans une chaine textuelle (étape à ajouter en saisie manuelle dans la ligne de commande);
- transformer cette chaine en table;
- renvoyer dans Excel.
Voici le script complet de la requête. Fidèle à mes habitudes et mes bonnes pratiques, je renomme les étapes en évitant les espaces qui alourdissent le script:
1 2 3 4 5 6 7 8 9
| let
Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
AdapterTypes = Table.TransformColumnTypes(Source,{{"Sélection", type text}, {"Mail", type text}}),
Filtre = Table.SelectRows(AdapterTypes, each ([Sélection] = "x")),
ConvertirEnListe = Filtre[Mail],
Combiner = Text.Combine(ConvertirEnListe,";"),
ConvertirEnTable = #table(1, {{Combiner}})
in
ConvertirEnTable |
![Nom : 2021-09-27_085848.png
Affichages : 670
Taille : 9,9 Ko](https://www.developpez.net/forums/attachment.php?attachmentid=605517&d=1632725951)
Power Query permet donc pas mal de choses dans la préparation et la transformation des données ![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
Avez-vous d'autres exemples de listes à concaténer?
Utilisez-vous Power Query? Cet outil vous devient-il familier?
.