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
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
A voir également:
- Fusionner nom prénom excel
- Liste déroulante excel - Guide
- Fusionner deux cellules excel nom prénom - Guide
- Nom et prénom - Guide
- Fusionner fichier excel - Guide
- Si et excel - Guide
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
29 juil. 2015 à 20:32
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
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
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é :
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
29 juil. 2015 à 20:42
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!!