1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| Sub Macro1()
Dim D As Object 'déclare la variable ND (Dictionnaire)
Dim CC As String 'déclare la variable CC (Concaténation de Colonnes)
Dim TL() As Variant 'déclare la variable TL (Tableai de Lignes)
Dim I As Long 'déclare la variable I (Incrément de lignes)
Dim J As Integer 'déclare la variable J (incrément de lignes)
Dim K As Long 'déclare la variable K (incrément de lignes)
Dim L As Integer 'déclare la variable L (incrément de colonnes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set OS = Sheets("Feuil1") 'définit l'onglet source OS (à adapter)
Set OD = Sheets("Feuil2") 'définit l'onglet destination OD (à adapter)
TC = OS.Range("A1").CurrentRegion 'définit le tableau de cellules TC (à adapter)
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellulles TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellulles TC
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionaire D
For I = 2 To NL 'boucle sur toutes les ligne du tableau de cellues TC (en partant de la seconde)
'définit la concaténation CC
'remplace 1, 2 et 3 par le numero des colonnec contenant le "Code Clien", le "Libellé" et le "Prix"
CC = CStr(TC(I, 1)) & CStr(TC(I, 2)) & CStr(TC(I, 3))
D(CC) = D(CC) + 1 'alimente le dictionnaire avec le concaténation CC
Next I 'prichaine ligne de la boucle
TE = D.keys 'récupère tableau TE (Tableau des Éléments) les éléments du dictionnaire D sabs doiblon
TOC = D.items 'récupère tableau TOC (Tableau des OCcurrences) le nombre d'occurrence de chaque élément de TE
For I = LBound(TE) To UBound(TE) 'boucle sur tous les éléments de TE
If TOC(I) > 1 Then 'condition 1 : si l'élément a plusieurs occurrences
K = 1 'initialise la variable K
For J = 2 To NL 'boucle 1 sur toutes les lignes J du tableau de cellules TC (en partant de la seconde)
'condition 2 : si la concaténation des colonne 1 deux et trois est égale à TE(I)
'remplace 1, 2 et 3 par le numero des colonnec contenant le "Code Clien", le "Libellé" et le "Prix"
If CStr(TC(J, 1)) & CStr(TC(J, 2)) & CStr(TC(J, 3)) = TE(I) Then
'redimensionne le tableau de lignes TL (autant de ligne que TC a de colonnes,K colonnes)
ReDim Preserve TL(1 To NC, 1 To K)
For L = 1 To NC 'boucle 2 : sur toutes les colonnes de TC
TL(L, K) = TC(J, L) 'récupère dans la ligne de TL la valeur de la colonne de TC (transposition)
Next L 'prochaine colonne de la boujcle 2
K = K + 1 'incrémente K
End If 'fin de la condition 2
Next J 'prochaien ligne de la boucle 1
If K > 1 Then 'condition 3 : si K est supérieur à 1 (au moins une occurrence trouvée)
'définit la cellue de destination DEST
Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, 1).End(xlUp).Offset(3, 0))
'revoie dans DEST redinensionnée le tableau TL transposé
DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
End If 'fin de la condition 3
Erase TL 'vide le tableau TL
End If 'fin de la condition 1
Next I 'prochain élément du tableau TE
End Sub |
Partager