Dictionnaire (dans dictionnaire ou 3eme colonne) puis tri

Bonjour à tous !

Je suis complètement bloqué sur mon code.

J'aimerais votre aide sur ma macro. Je suis bloqué mais complètement...

voici mon code les explications se trouvent dedans et si vous souhaitez mes fichiers pour comprendre pas de problème

Sub info_master_lvl()
Dim ORFBOM As Worksheet 'déclare la variable ORFBOM (Onglet de ReFérence BOM)
Set ORFBOM = Workbooks("DATAS.xlsx").Sheets("BOM") 'définit l'onglet de RéFérence page BOM
Dim ORFPATS As Worksheet 'déclare la variable ORFPARTS (Onglet de ReFérence PARTS)
Set ORFPARTS = Workbooks("DATAS.xlsx").Sheets("PARTS") 'définit l'onglet de RéFérence page Parts
Set CD = ThisWorkbook 'définit le classeur de destination CD (=ce classeur)
Set ODMENU = CD.Sheets("Menu") 'définit l'onglet de destination ODMENU
Dim d As Integer 'd incrementation des lignes dans BOM et parts
Dim a As Integer 'a incrementation des pages de mon classeur de référence
'''''''''''''''''''''''''''' info_master_lvl1 : Donne les assembly level 1 du master assembly'''''''''''''''
Dim atableau ' permet de retenir toutes les données que l'on veut dans un tableau
atableau = ORFBOM.Range("C1:E" & ORFBOM.[C65536].End(xlUp).Row).Value 'C=M_UQID ; D=C_UQID ; E = Quantity
Dim Dico As Dictionary
Dim dicoi As Integer
Dim dicoc As Variant
Dim Keys As Variant ' Key du Dico
Dim Item As Variant 'Item du Dico

Set Dico = CreateObject("Scripting.Dictionary")
Dim Tbl(1 To 2)

If Not IsEmpty(ODMENU.[g2]) Then
d = 2 'Incrémente les lignes de ORFBOM, commence à deux vu qu'il ya des en-têtes
a = 2 'Me servira à incrémenter les pages pour appliquer la formule sur toutes les pages de mon classeur sauf la 1ere
While ORFBOM.Cells(d, 3) <> "" ' Continu la boucle tant que toutes les cellules de C n'ont pas été traité
            While ODMENU.Cells(2, 7) <> ORFBOM.Cells(d, 3) And ORFBOM.Cells(d, 3) <> "" 'Boucle tant que la cellule n'est pas égale à la valeur cherché + continu la boucle tant que toutes les cellules de C n'ont pas été traité
            d = d + 1 ' incrémente la ligne C de ORFBOM
            Wend ' fin de boucle
                If ODMENU.Cells(2, 7) = ORFBOM.Cells(d, 3) Then ' Si la celule est égale à la valeur chercher en G2
                        dicoi = d 'prend la valeur de d pour prendre la bonne valeur dans atableau
                            Tbl(1) = atableau(dicoi, 2) 'recopie la valeur de la 2eme colonne de atableau dans Tbl 1ere colonne
                            Tbl(2) = atableau(dicoi, 3) 'recopie la valeur de la 3eme colonne de atableau dans Tbl 2eme colonne
                            Dico(atableau(dicoi, 2) & atableau(dicoi, 3)) = Tbl ' Je comprend pas trop, il me semble que ca rentre Tbl dans Dico
                d = d + 1 ' incrémente d pour ne pas boucler indéfiniment
                End If
Wend
End If

Dim dicod(): ReDim dicod(1 To 2, 1 To Dico.Count) 'dimensionne dicod pour accepter les valeur de Dico
dicoi = 1 'Initialisation de dicoi
Keys = Dico.Keys 'Keys est la clé du Dico
Item = Dico.Items 'Item est l'item du Dico
' boucle while permettant de trouver la valeur de mon item dans la feuille PARTS colonne C ->
While dicoi <> d And ORFPARTS.Cells(d, 3) <> "" And ORFPARTS.Cells(d, 3) <> "" 'je veux mettre la valeur" Item (dicoi)(1) " sachant que dicoi me permettra d'incrémenter ma ligne du dico
    d = d + 1 'incrémente la ligne de ORFPARTS
    If ORFPARTS.Cells(d, 3) = "" Then  'je veux mettre la valeur Item (dicoi)(1) au lieu du "" avant le then
    dicoi = dicoi + 1 'incrémente dicoi pour la prochaine cellule recherché
    dicod(1, dicoi) = ORFPARTS.Cells(d, 1) 'je récupère la donnée que je souhaite en A pour la mettre dans la colonne 1 de mon dicod
    dicod(2, dicoi) = Dico(item1)   'je met en colonne 2 de mon dicod la valeur de mon Dico (exemple : J'ai chercher Item(1)(1) alors la valeur de mon Dico souhaité sera Item1 "P7761
    End If
Wend
'Ensuite je vais trier les valeurs de mon dicod dans le sens croissant
'Créer un tableau à 3 valeurs : 1ere colonne = 1ere colonne de dicod et 2eme colonne sera les 6er caractere de la colonne 2 de dicod 3eme colonne sera le reste des caractères de la colonne 3
'les 2eme et 3eme colonne reconstitueront mon Dico donc si vous avez un raccourci pour entrer en 3eme colonne ma valeur en A de ORFPARTS
' Puis trier ce tableau avec la 3eme colonne je serais tout simplement refais je serais prêt à vous payer mais je préfère les échanges de service ;)
' ensuite avec les valeurs de dico je créerais une page pour chaque ligne du dico à 3 colonnes
' je transposerais ma valeur de colonne 1 en X colonne 2 en T et colonne 3 en M tout va dépendre de ce que comporte mes colonnes
' et je m'aiderais de cette macro pour finir mon projet avec une dernière macro

'J'ai déjà construit une boucle pour créer une nouvelle feuille par ligne mais je suis completement bloqué sur comment prendre la valeur d'une case de mon dico
'Je vous remercie d'avance pour avoir réfléchi et encore plus si vous m'aidez à mettre résolu sur ce sujet ;)
end sub

Ici une photo de ma fenetre d'espions

https://www.cjoint.com/c/EHApQs08HSQ

Je vous remercie d'avance

Re,

Pas bien clair tout ça...

Je ne retiens que : comment prendre la valeur d'une case de mon dico

Boucler sur un dictionary :

Dim k As Variant
For Each k In dict
    Debug.Print dict.Item(k)
Next k

ou :

Dim e, k
For Each e In dict.items
    MsgBox e
Next e

For Each k In dict.keys
    MsgBox k
Next k

eric

Bonjour eric,

Arf Je vais reprendre mon post alors x)

Merci , Je suis pas sur mais ton exemple fonctionne sur un dictionnaire avec une colonne mais comment faire si j'en ai deux ou trois?

Mais à quoi sert debug print?

Puis je utiliser une valeur du dico pour rechercher tant qu'une cellule est différente de cette case du dico? :S

Non mais ne donne pas que des fragments de ce que tu veux faire, les propositions peuvent être totalement différentes selon le but final, ou bien qu'on ne sache pas.

Tu veux faire quoi ?

Travailler sur les éléments 1 par 1 ? Apparement non, tu ne veux pas de la boucle.

Inscrire toutes les keys sur une feuille ? Les items ?

Autre chose ?

Et si tu as 3 dico il faut les traiter un par un. On ne sait même pas si tu travailles avec que les keys, avec les keys+items, s'ils ont une clé commune. Comment veux-tu qu'on te réponde ?

Et la recherche sur une feuille fera l'objet d'un autre topic si tu veux bien, restons sur la question de départ.

PS: un très bon site à regarder en entier. La page sur les dictionary : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm

Rechercher des sujets similaires à "dictionnaire 3eme colonne puis tri"