Pfff... j'ai déjà passé une heure dessus ce matin ! Envolé ! j'ai fermé la fenêtre involontairement : YAPUKA recommencer.
C'est pas simple non plus vu le nombre de lignes de la macro...
Les variables i% et k% sont déclarées integer (% = As integer)
o est une variable Objet/Range pour parcourir les boucles For...Next
Dans la situation ou je l'utilise, Arr est un Array dynamique à une seule dimension. (en ligne)
Pour tester ce genre d'engin voici une courte démo : (à tester sur une feuille vide)
Sub test1()
Dim Arr
Arr = Split("Lundi Mardi Mercredi")
[A1].Resize(, UBound(Arr) + 1) = Arr
End Sub
Dico est un autre sorte Array un peu zarbi. (Les puristes vont pousser un Ho ! shocking... Mais on s'en fout ! IZONKA s'y coller !
Il faut comprendre ce Dico comme un array à une seule dimension. (en ligne)
A la différence des Array, il stocke des valeurs avec des index (appelés : key) qui sont des "strings", Comme un dictionnaire.
De plus, comme un dictionnaire, il n'autorise pas les doublons. Si tu tentes de lui refiler un index existant, il "le saute"
Application à la feuille 1 de ton classeur démo (pour lister tes App) :
Sub test()
Dim Arr, Dico, i%, k%, o
Worksheets(2).[A1].CurrentRegion.Clear
Set Dico = CreateObject("Scripting.Dictionary")
k = [B65000].End(xlUp).Row
For Each o In Range("B2:B" & k)
Dico(o.Value) = ""
Next
Worksheets(2).[A1].Resize(, Dico.Count) = Dico.keys
End Sub
Mais il ne se contente pas de stocker les index comme un Dictionnaire il est capable d'en donner la définition (pardon : la valeur ou le contenu.
Tout au long de mon parcours de cette colonne je stocke dans un caleçon long String toutes les valeurs en regard de cet index (key) (Celle-là... je pouvais pas la louper )
avec une expression un peu compliquée (dans la Sub Galopin) :
Dico(o.Value) = Dico(o.Value) & o.Offset(0, -1) & ":"
Appliqué à EDD le string était : "5004:5003:5002")
A chaque tour de cette première boucle le string s'allonge avec une valeur complémentaire en cas de doublon. (je te dis pas la taille du String pour "stock" ! Mais le dico est assez tolérant il accepte des Strings XXXL !
C'est ce string que je décode dans la boucle suivante :
Pour chaque Valeur du Dico je stocke dans Arr les valeurs répertoriées dans le dico en splitant le String de chaque .item.
Après YAPUKA mettre ça en colonne avec un petit coup de Resize...Transpose...
C'est plus clair ?
Euh... j'ai pas mieux !
A+