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 Sub

Re

j'ai mis en PJ le fichier Excel avec le code

merci d'avance !

33code-v1.xlsm (23.04 Ko)

Bonjour,

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

Bonjour,

Etait-il nécessaire d'utiliser VBA pour cela ?

Cdlt.

28code-v1.xlsm (41.90 Ko)
Rechercher des sujets similaires à "comprendre mieux code vba"