VBA Excel: boucle pour combiner prénoms et noms
Résolu
Monica
-
ThauTheme Messages postés 1564 Statut Membre -
ThauTheme Messages postés 1564 Statut Membre -
Bonjour,
Je travaille sur Excel 2010 et je dispose de deux colonnes: une avec une série de prénom, et l'autre avec une série de noms.
Mon but est de faire une liste avec toutes les combinaisons de "Prénoms/Noms" possibles sur une même colonne. Autrement dit: le prénom en A1 sera accolé au prénom en B1 puis à celui en B2....jusqu'au dernier nom; puis le prénom en A2 avec le nom en B1, puis B2.... et ce, jusqu'à la dernière combinaison possible sachant que chaque nom et chaque prénom est unique. Pourriez-vous m'aider??
Je vous en remercie par avance!
Je travaille sur Excel 2010 et je dispose de deux colonnes: une avec une série de prénom, et l'autre avec une série de noms.
Mon but est de faire une liste avec toutes les combinaisons de "Prénoms/Noms" possibles sur une même colonne. Autrement dit: le prénom en A1 sera accolé au prénom en B1 puis à celui en B2....jusqu'au dernier nom; puis le prénom en A2 avec le nom en B1, puis B2.... et ce, jusqu'à la dernière combinaison possible sachant que chaque nom et chaque prénom est unique. Pourriez-vous m'aider??
Je vous en remercie par avance!
A voir également:
- Fusionner nom et prénom excel
- Word et excel gratuit - Guide
- Excel fusionner 2 colonnes nom prénom - Guide
- Liste déroulante excel - Guide
- Facebook recherche par nom et prénom - Guide
- Si et ou excel - Guide
2 réponses
Bonsoir Monica, bonsoir le forum,
Essaie comme ça (à adapter) :
Essaie comme ça (à adapter) :
Sub Macro1() Dim O As Worksheet 'déclare la variable O (Onglet) Dim TC As Variant 'déclare la variable TC (Tableau de Cellules) Dim NL As Integer 'déclare la variable NL (Nombre de lignes) Dim TPN() As Variant 'déclare la variable TPN (Tableau des Prénoms/Noms) Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter) TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC For I = 1 To NL 'boucle 1 de 1 à NL For J = 1 To NL 'boucle 2 de 1 à NL ReDim Preserve TPN(K) 'redimensionne le tableau de prénoms/noms TPN TPN(K) = TC(I, 1) & " " & TC(J, 2) 'récupère dans TPN(K) le prénom ligne I colonne 1 de TC et le nom ligne J colonne 2 de TC K = K + 1 'incrément K Next J 'prochaine ligne de la boucle 2 Next I 'prochaine ligne de la boucle 1 'renvoie dans D1 redimensionnée le tableau TPN transposé O.Range("D1").Resize(UBound(TPN) + 1).Value = Application.Transpose(TPN) End Sub
Re,
Tu as tout a fait raison mais c'est parce que dans ma tête il y avait autant de noms que de prénoms... Voici le code corrigé :
Tu as tout a fait raison mais c'est parce que dans ma tête il y avait autant de noms que de prénoms... Voici le code corrigé :
Sub Macro1() Dim O As Worksheet 'déclare la variable O (Onglet) Dim DL1 As Integer 'déclare la variable DL1 (Dernière Ligne de la colonne 1) Dim DL2 As Integer 'déclare la variable DL2 (Dernière Ligne de la colonne 2) Dim TC1 As Variant 'déclare la variable TC1 (Tableau de Cellules de la colonne 1) Dim TC2 As Variant 'déclare la variable TC2 (Tableau de Cellules de la colonne 2) Dim TPN() As Variant 'déclare la variable TPN (Tableau des Prénoms/Noms) Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter) DL1 = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL1 de la colonne 1 (=A) DL2 = O.Cells(Application.Rows.Count, 2).End(xlUp).Row 'définit la dernière ligne éditée DL2 de la colonne 2 (=B) TC1 = O.Range("A1:A" & DL1) 'définit la tableau de cellules TC1 TC2 = O.Range("B1:B" & DL2) 'définit la tableau de cellules TC2 For I = 1 To DL1 'boucle 1 : de 1 à DL1 For J = 1 To DL2 'boucle 2 : de 1 à DL2 ReDim Preserve TPN(K) 'redimensionne le tableau de prénoms/noms TPN TPN(K) = TC1(I, 1) & " " & TC2(J, 1) 'récupère dans TPN(K) le prénom ligne I colonne 1 de TC1 et le nom ligne J colonne 1 de TC2 K = K + 1 'incrémente K Next J 'prochaine ligne de la boucle 2 Next I 'prochaine ligne de la boucle 1 'renvoie dans D1 redimensionnées le tableau TPN transposé O.Range("D1").Resize(UBound(TPN) + 1).Value = Application.Transpose(TPN) End Sub
Le code que tu proposes sembles fonctionner parfaitement lorsqu'il y a le même nombre de noms et de prénoms. Mais lorsque ce n'est pas le cas, il crée des couples "orphelins" (prénoms ou noms seuls).
Ceci dit, ça me fait déjà gagner énormément de temps vu la longueur des listes!
Merci!!