Comprendre mieux un code VBA
Bonsoir ,
il ya quelques temps une personne dans se forum m'aider pour une macro , et je reviens vers le forum pour de l'aide encore une fois.
j'utilise le code suivant pour trouver les occurances et supprimer les doublons >3 et déplacer les occurances vers un autre feuil et qui affiche en méme temps le nombre des occurances.
le code fonctionne parfaitement sans souci mais je n'arrive pas à comprndre le role de chaque ligne !
Serait-il possible d'avoir des commantaire devant chaque ligne pour comprendre le role de chaque boucle !
merci beaucoup
Option Explicit
Dim derln&, dico As Object, dico2 As Object
Dim tablo, tabloR(), tabloR2()
Dim f As Worksheet
Dim i&, j&, k&, n&, cle, it
Sub Doublons()
Set f = ActiveSheet
derln = Range("A" & Rows.Count).End(xlUp).Row 'Formule Dernière ligne de la base de données
Range("E2:E" & derln).ClearContents 'Suppression du contenu
tablo = Range("A2:E" & derln)
Set dico = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo, 1) 'pour connaître la dernier n° de notre tableau consiste on utilise la fonction Ubound
dico(tablo(i, 1) & tablo(i, 3)) = dico(tablo(i, 1) & tablo(i, 3)) + 1
Next i
k = 0
For i = 1 To UBound(tablo, 1)
tablo(i, 5) = dico(tablo(i, 1) & tablo(i, 3))
If tablo(i, 5) >= 3 Then
ReDim Preserve tabloR(5, k + 1) 'Déclarez un tableau dynamique (parenthèses vides), puis définissez ses dimensions avec Redim
For j = 1 To 5
tabloR(j - 1, k) = tablo(i, j)
Next j
k = k + 1
End If
Next i
Set dico2 = CreateObject("Scripting.Dictionary")
For j = 0 To UBound(tabloR, 2) - 1
dico2(tabloR(0, j) & tabloR(2, j)) = dico2(tabloR(0, j) & tabloR(2, j)) + 1
Next j
it = dico2.items
cle = dico2.keys
k = 0
For n = 0 To dico2.Count - 1
For i = 1 To UBound(tablo, 1)
If tablo(i, 1) & tablo(i, 3) = cle(n) Then
ReDim Preserve tabloR2(5, k + 1)
For j = 1 To 4
tabloR2(j - 1, k) = tablo(i, j)
Next j
tabloR2(4, k) = it(n)
k = k + 1
GoTo Suite
End If
Next i
Suite:
Next n
Range("A2").Resize(UBound(tablo, 1), 5) = tablo
Sheets("Résultats").Range("A2").CurrentRegion.Offset(1, 0).ClearContents
Sheets("Résultats").Range("A2").Resize(UBound(tabloR2, 2), 5) = Application.Transpose(tabloR2)
Sheets("Résultats").Activate
End SubBonjour,
il n'y a pas grand chose à commenter, ce ne sont que de tests et des affectations.
C'est le fonctionnement que tu ne comprends pas, c'est ça le soucis quand on fait faire ses devoirs...
Dans ce cas exécuter en pas à pas et regarder l'évolution des variables dans la fenêtre espion pour comprendre.
Et pour les dictionnaires faire une recherche google : vba dictionnaire ou vba dictionary
eric