Traduction code vba

sircroco

XLDnaute Nouveau
Bonjour,

Excusez moi de vous déranger, je suis en pleine autoformation de VBA..., je souhaiterai avoir une traduction simple de ce qu'il se passe sur les lignes de codes des deux modules dans ce fichier... j'apprend à faire du VBA, je vous remercie !!
 

Pièces jointes

  • code.xlsm
    22.1 KB · Affichages: 44

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Sircroco, bonjour le forum,

Module 4, le code va :
- balayer une première fois toutes les lignes du premier onglet (à partir de la seconde)
- à l'aide d'un objet dictionnaire il ne va garder que les paires Mag/Réf des années différentes de 2018 sans doublon
- balayer une seconde fois toutes les lignes du premier onglet (à partir de la seconde)
- si une paire Mag/Réf existante dans le dictionnaire dico est aussi présente en 2018, elle est supprimé du dictionnaire dico
- au final, ne sont renvoyées dans l'onglet Sheet2 uniquement les données Mag/Réf unique autres qu'en 2018 et n'existant pas non plus en 2018.

Le code commenté :

VB:
Sub Bouton1_Cliquer()

'déclaration des variables : a de type variant (par défaut), i de type entier long, txt de type texte, dico comme objet
Dim a, i As Long, txt As String, dico As Object
'définit le dictionnaire dici
Set dico = CreateObject("Scripting.Dictionary")
dico.CompareMode = 1
'définit le tableau a (l'ensemble des cellules non vides adjacentes à A1 du premier onglet du classeur
a = Sheets(1).Range("a1").CurrentRegion.Value
'boucle sur toutes les lignes i du tableau a (en partant de la seconde)
For i = 2 To UBound(a, 1)
    'condition : si la donnée ligne i, colonne 3 de a est différente de 2018
    If a(i, 3) <> 2018 Then
        'définit la variable txt : la paire Mag/Réf
        txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
        'alimente le dictionnaire dico avec la variable txt (sans doublon)
        dico(txt) = VBA.Array(a(i, 1), a(i, 2))
    'fin de la condition
    End If
'prochaine ligne de la boucle
Next
'boucle sur toutes les lignes i du tableau a (en partant de la seconde)
For i = 2 To UBound(a, 1)
    'condition 1 : si la donnée ligne i, colonne 3 de a est égale à 2018
    If a(i, 3) = 2018 Then
        'définit la variable txt : la paire Mag/Réf
        txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
        'condition 2 : si la paire existe em 2018
        If dico.exists(txt) Then
            'suprime cette paire
            dico.Remove txt
        'fin de la condition 2
        End If
    'fin de la condition 2
    End If
'prochaine ligne de la boucle
Next
'prend en compte l'ensemble des l'ensemble des cellules non vides adjacentes à A1 du second onglet du classeur en le redimensionnant aux deux premières colonnes uniquement
With Sheets(2).Range("a1").Resize(, 2)
    'efface le contenu d'éventuelles anciennes données
    .CurrentRegion.Clear
    'si le dictionnaire dico (la liste des txt sans doublons) n'est pas vide
    If dico.Count > 0 Then
        'écrit "Magasin" en A1 et Article en B1
        .Value = Array("Magasin", "Article")
        'reprend en compte l'ensemble au dessus en se décalant d'une ligne vers le bas en redimensionnant d'autant de ligne que dico a d'éléments
        With .Offset(1).Resize(dico.Count)
            'renvoie dans ces cellules le tableau dico transposé
            .Value = Application.Transpose(Application.Transpose(dico.items))
        'fin de la seconde prise en compte
        End With
    'fin de la condition
    End If
'fin de la première prise en compte
End With
'vide l'objet dico
Set dico = Nothing
End Sub
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
206
Réponses
2
Affichages
98
Réponses
93
Affichages
1 K

Statistiques des forums

Discussions
311 720
Messages
2 081 900
Membres
101 834
dernier inscrit
Jeremy06510