VBA Excel: boucle pour combiner prénoms et noms

Résolu/Fermé
Monica - 29 juil. 2015 à 18:34
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 29 juil. 2015 à 22:58
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!
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
29 juil. 2015 à 20:32
Bonsoir Monica, bonsoir le forum,

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

1
Bonsoir ThauTheme,

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!!
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
29 juil. 2015 à 22:58
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é :

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

1