Dictionnaire Imbrique
Kzawi77
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Hello a tous et a toute ,
J'esperes que la communaute pourra m'aider, en effet c'est mon tout 1er post
Je suis en plein developpement d'un outil, et j'aimerai imbrique 3 voir 4 dico cependant je bloque!
je sais comment en imbrique 2 mais au dela cela devient un peu plus complexe.
ci dessous vous trouverez mon code :
'* je pense aussi avoir besoin d'aide pour cette partie la
Merci D'Avance
J'esperes que la communaute pourra m'aider, en effet c'est mon tout 1er post
Je suis en plein developpement d'un outil, et j'aimerai imbrique 3 voir 4 dico cependant je bloque!
je sais comment en imbrique 2 mais au dela cela devient un peu plus complexe.
ci dessous vous trouverez mon code :
Function LoadDicMultiple(Rge As Range) As Dictionary Dim dico As New Dictionary Dim dico2 As New Dictionary Dim Dico3 As New Dictionary Dim Dico4 As New Dictionary Dim cel As Range For Each cel In Range(Rge.Offset(1), Rge.Offset(1).End(xlDown)) key1 = cel.Offset(, 6).Value key2 = cel.Offset(, 8).Value key3 = cel.Offset(, 1).Value key4 = cel.Offset(, 4).Value If Not dico.Exists(key1) Then dico.Add key1, New Dictionary Call dico(key1).Add(key2, dico2) Call dico2(key2).Add(key3, key4) Call Dico3(key3).Add(key4, cel.Offset(, 2).Value) Else If Not dico.item(key1).Exists(key2) Then dico.item(key1).Add key2, key3
'* je pense aussi avoir besoin d'aide pour cette partie la
End If Next cel Set LoadDicMultiple = dico Set dico = Nothing Set dico2 = Nothing Set Dico3 = Nothing Set Dico4 = Nothing End Function
Merci D'Avance
A voir également:
- Dictionnaire Imbrique
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Télécharger dictionnaire médical larousse gratuit pdf - Télécharger - Dictionnaires & Langues
- Dictionnaire synonyme gratuit - Télécharger - Études & Formations
- Télécharger dictionnaire informatique gratuit pdf - Télécharger - Bureautique
- Télécharger dictionnaire français gratuit pdf - Télécharger - Bureautique
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
tu ne nous expliques pas quelle aide tu espères recevoir.
tu ne nous expliques pas si ton code fait ce que tu souhaites.
tu ne nous expliques pas ce que tu souhaites que ton code fasse.
tu ne nous expliques pas pourquoi tu fais cet outil.
n'imagine pas que nous pourrons deviner tout cela à partir de ton code.
tu ne nous expliques pas quelle aide tu espères recevoir.
tu ne nous expliques pas si ton code fait ce que tu souhaites.
tu ne nous expliques pas ce que tu souhaites que ton code fasse.
tu ne nous expliques pas pourquoi tu fais cet outil.
n'imagine pas que nous pourrons deviner tout cela à partir de ton code.
Hello yg_be,
Desole c'est mon tout 1er poste , merci je vais essaye de repondre a tes questions.
J''ai un soucis au niveau du 3 et 4 eme dico j'arrive a imbrique un dico dans un dico mais pas ( dico de dico de dico de dico ).
Du coup mon code bloque au niveau de cette ligne
Call dico2(key2).Add(key3, key4)
Mon code est censer parcourir une feuille excel avec plusieurs colonnes ou je m'interesse a 4 calonnes en particulier et remplir mes different dico de dico anfin d'avoir qu'une seul valeur et non des doublons et de concatener les valeurs qui font parti des Items.
je peux le faire avec un tableau mais pour evite les doublons je dois utilise des conditions ce qui ralentie conciderablement le temps d'execution tout en sachant que il doit tourner sur 3 onglet et sur plus de 100 fichier et avec dans chaque onglet +100 000 lignes.
Voila j'espere que c'est peu etre un peu plus claire n'hesite pas a me faire des remarque ou me poser des questions si besoin.
Merci d'avance a tous.
Desole c'est mon tout 1er poste , merci je vais essaye de repondre a tes questions.
J''ai un soucis au niveau du 3 et 4 eme dico j'arrive a imbrique un dico dans un dico mais pas ( dico de dico de dico de dico ).
Du coup mon code bloque au niveau de cette ligne
Call dico2(key2).Add(key3, key4)
Mon code est censer parcourir une feuille excel avec plusieurs colonnes ou je m'interesse a 4 calonnes en particulier et remplir mes different dico de dico anfin d'avoir qu'une seul valeur et non des doublons et de concatener les valeurs qui font parti des Items.
je peux le faire avec un tableau mais pour evite les doublons je dois utilise des conditions ce qui ralentie conciderablement le temps d'execution tout en sachant que il doit tourner sur 3 onglet et sur plus de 100 fichier et avec dans chaque onglet +100 000 lignes.
Voila j'espere que c'est peu etre un peu plus claire n'hesite pas a me faire des remarque ou me poser des questions si besoin.
Merci d'avance a tous.
tu donnes une ligne de code qui ne fonctionne pas, et tu ne dis pas ce que tu souhaites qu'elle fasse.
tu écris que ton code bloque: cela donne-t'il un message d'erreur?
je suggère d'oublier un moment la programmation et surtout les dictionnaires: explique ce que tu veux réaliser.
je pense que ton code, comme il est, n'a pas de sens. cependant, si tu veux simplement éviter le message d'erreur et clarifier le code:
tu écris que ton code bloque: cela donne-t'il un message d'erreur?
je suggère d'oublier un moment la programmation et surtout les dictionnaires: explique ce que tu veux réaliser.
je pense que ton code, comme il est, n'a pas de sens. cependant, si tu veux simplement éviter le message d'erreur et clarifier le code:
Private Function LoadDicMultiple(Rge As Range) As Dictionary Dim dico As New Dictionary Dim dico2 As New Dictionary Dim Dico3 As New Dictionary Dim Dico4 As New Dictionary Dim ndico As New Dictionary Dim key1, key2, key3, key4 Dim cel As Range For Each cel In Range(Rge.Offset(1), Rge.Offset(1).End(xlDown)) key1 = cel.Offset(, 0).Value key2 = cel.Offset(, 1).Value key3 = cel.Offset(, 2).Value key4 = cel.Offset(, 3).Value If Not dico.Exists(key1) Then Set ndico = New Dictionary Call dico.Add(key1, ndico) Call ndico.Add(key2, dico2) Call dico2.Add(key3, Dico3) Call Dico3.Add(key4, cel.Offset(, 2).Value) Else If Not dico.Item(key1).Exists(key2) Then dico.Item(key1).Add key2, key3 End If End If Next cel Set LoadDicMultiple = dico Set dico = Nothing Set dico2 = Nothing Set Dico3 = Nothing Set Dico4 = Nothing End Function
J'ai un fichier avec plusieurs colonnes :
Colonne 1 : des dates
Colonne 2 : ID1
colonne 3: ID2
colonne 4: Nominal
je souhaite Remplir mon Dico avec les dates qui seront des clefs avec les ID1 qui seront aussi des clefs , les ID2 aussi des clefs puis les Nominaux qui doivent s'additioner si L'ID2 et le meme.
je sais pas si cela est plus claire pour toi , sachant que je veux faire ca sur plusieurs fichier ou il y a 3 onglets a chaque fois et ou il ya plus de 100K lines par onglets.
je le fais deja avec un tableau mais cela me prends une eternite car chaque fichier fait 150mb un peu pres.
Colonne 1 : des dates
Colonne 2 : ID1
colonne 3: ID2
colonne 4: Nominal
je souhaite Remplir mon Dico avec les dates qui seront des clefs avec les ID1 qui seront aussi des clefs , les ID2 aussi des clefs puis les Nominaux qui doivent s'additioner si L'ID2 et le meme.
je sais pas si cela est plus claire pour toi , sachant que je veux faire ca sur plusieurs fichier ou il y a 3 onglets a chaque fois et ou il ya plus de 100K lines par onglets.
je le fais deja avec un tableau mais cela me prends une eternite car chaque fichier fait 150mb un peu pres.
si je comprends bien, tu veux retrouver la somme des nominaux par combinaison (date, ID1, ID2).
et tu as choisi de réaliser cela avec une hiérarchie de dictionnaires.
ai-je bien compris?
si oui, suggestion:
et tu as choisi de réaliser cela avec une hiérarchie de dictionnaires.
ai-je bien compris?
si oui, suggestion:
Private Function LoadDicMultiple(Rge As Range) As Dictionary Dim dicodate As New Dictionary Dim dicoidun As Dictionary Dim dicoiddeux As Dictionary Dim keydate, keyid1, keyid2, nominal Dim cel As Range For Each cel In Range(Rge.Offset(1), Rge.Offset(1).End(xlDown)) keydate = cel.Offset(, 0).Value keyid1 = cel.Offset(, 1).Value keyid2 = cel.Offset(, 2).Value nominal = cel.Offset(, 3).Value If Not dicodate.Exists(keydate) Then Set dicoidun = New Dictionary Call dicodate.Add(keydate, dicoidun) Set dicoiddeux = New Dictionary Call dicoidun.Add(keyid1, dicoiddeux) Call dicoiddeux.Add(keyid2, nominal) Else Set dicoidun = dicodate(keydate) If Not dicoidun.Exists(keyid1) Then Set dicoiddeux = New Dictionary Call dicoidun.Add(keyid1, dicoiddeux) Call dicoiddeux.Add(keyid2, nominal) Else Set dicoiddeux = dicoidun(keyid1) If Not dicoiddeux.Exists(keyid2) Then Call dicoiddeux.Add(keyid2, nominal) Else dicoiddeux(keyid2) = dicoiddeux(keyid2) + nominal End If End If End If Next cel Set LoadDicMultiple = dicodate End Function