Bonjour Nicobastia, bonjour le forum,
Peut-être comme ça :
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Set OS = Worksheets("Feuil1") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set OD = Worksheets("Feuil2") 'définit l'onglet destination OD
OD.Cells.Clear 'efface les anciennes valeurs de l'onglet OD
OS.Rows(1).Copy OD.Range("A1") 'copie la ligne 1 de l'onglet source et la colle dans A1 de l'onglet destination
OS.Rows(1).Copy 'copie la ligne 1 de l'onglet source
OD.Range("A1").PasteSpecial (xlPasteColumnWidths) 'colle la largeur des colonnes dans l'onglet destination
Application.CutCopyMode = False 'supprime le clignotement lié au copier/coller
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la première colonne du tableau des valeurs TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
K = K + 1 'incrémente K
ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes que TV a de colonnes, K colonnes)
TL(1, K) = TMP(J) 'définit la donnée ligne 1 colonne K de TL
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition : si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
TL(2, K) = IIf(TL(2, K) = "", TV(I, 2), TL(2, K) & " " & TV(I, 2)) 'définit la donnée ligne 2 colonne K de TL
TL(3, K) = IIf(TL(3, K) = "", TV(I, 3), TL(3, K)) 'définit la donnée ligne 3 colonne K de TL
TL(4, K) = IIf(TL(4, K) = "", TV(I, 4), TL(4, K)) 'définit la donnée ligne 4 colonne K de TL
TL(5, K) = IIf(TL(5, K) = "", TV(I, 5), TL(5, K)) 'définit la donnée ligne 5 colonne K de TL
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
OD.Range("A2").Resize(K, UBound(TV, 2)).Value = Application.Transpose(TL) 'renvoie le tableau TL transposé en A2 redimensionnée de l'onglet OD
OD.Activate 'active l'onglet OD
OD.Range("A1").Select 'sélectionne la cellule A1 de l'onglet OD
End Sub
[Édition]
Ooops, je navet pas rafraîchi... Bonjour M12...
[Édition 2]
Waow ! C'est top tellement c'est simple et efficace !.... Chapeau !