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
| Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
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 TMP 'déclare la variable TMP (tableau TeMPoraire)
Dim TM() 'déclare la variable TM (Tableau des Max)
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données de la colonne 1 de 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 doublons
ReDim TM(1 To 2, 1 To D.Count) 'redimensionne le tableau des max TM
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
TM(1, J + 1) = TMP(J) 'définit la valeur de la ligne 1 de TM
TM(2, J + 1) = 0 'définit la valeur de la ligne 2 de TM
For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
If TV(I, 1) = TMP(J) Then 'condition : si la donnée en colonne 1 du tableau des valeurs TV est égele à l'élément J de TMP
'si la donnée en colonne 2 de TV est supérieure à la donnée en ligne 2 de TM,
'la donnée en ligne 2 de TM devient la valeur en colonne 2 de TV
If TV(I, 2) > TM(2, J + 1) Then TM(2, J + 1) = TV(I, 2)
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
O.Range("D1").Value = "Donnée" 'écrit en D1
O.Range("E1").Value = "Max" 'écrit en E1
'renvoie en D2 redimensionnée le tableau TM transposé
O.Range("D2").Resize(UBound(TM, 2), UBound(TM, 1)).Value = Application.Transpose(TM)
End Sub |
Partager