Apprentissage Scripting.Dictionary

cathodique

XLDnaute Barbatruc
Bonjour Le Forum,

Dans ma précédente discussion, Robert que je remercie tout particulièrement m'a été d'une grande aide et sans oublier les autres intervenants.

Je maîtrise assez bien bien Excel, par contre je suis nul en VBA. J'ai constaté qu'il fallait avoir au moins un minimun de théorie (comme dans tout autre domaine). Donc, je nage entre la compréhension des syntaxes de codes, des fonctions et ses boucles.

Sur le site de Jacques Boisgontier que j'ai beaucoup apprécié. Bravo! pour le travail. J'ai donc téléchargé ce fichier joint et je n'ai pas compris certaines lignes de code. Pourriez-vous m'expliquer leurs significations?

En fait, sur mon fichier de la dernière discussion, j'avais envisagé d'insérer dans le code pour récupérer des données une formule (SommeProd) et m'aperçois que ce n'est pas vraiment une bonne idée. Je suis donc à la recherche d'une solution plus adaptée. Et par la même occasion apprendre l'utilisation du dictionnaire.
Code:
Sub Stat2D()
  Set d1 = CreateObject("Scripting.Dictionary")
  Set d2 = CreateObject("Scripting.Dictionary")
  Dim a(1 To 100, 1 To 100)
  Dim t1(1 To 100)
  Dim t2(1 To 100)
  lig = 1
  col = 1
  Mlig = lig
  Mcol = col
  For Each c In Range("a2:a" & [A65000].End(xlUp).Row)
'========Début code non compris
    If d1.exists(c.Value) Then lig = d1(c.Value) Else d1(c.Value) = Mlig: lig = Mlig: Mlig = Mlig + 1 comprise
    tmp = c.Offset(, 1)
    If d2.exists(tmp) Then col = d2(tmp) Else d2(tmp) = Mcol: col = Mcol: Mcol = Mcol + 1
'=========Fin code non compris
    a(lig, col) = a(lig, col) + c.Offset(, 2)
    t1(lig) = t1(lig) + c.Offset(, 2)
    t2(col) = t2(col) + c.Offset(, 2)
  Next c
  [f2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)
  [g1].Resize(1, d2.Count) = d2.keys
  [g2].Resize(d1.Count, d2.Count) = a
  [f2].Offset(d1.Count, 1).Resize(, d2.Count) = t2
  [g2].Offset(, d2.Count).Resize(d1.Count) = Application.Transpose(t1)
End Sub

En vous remerciant.
 

Pièces jointes

  • Dict2crit2.xls
    30 KB · Affichages: 49

cathodique

XLDnaute Barbatruc
Re : Apprentissage Scripting.Dictionary

Bonjour Boisgontier, Bonjour le Forum,

Je te remercie beaucoup pour ton aide. En fait, je ne pense pas que les TCD soient adaptés à mon problème car je ne fais aucun calcul. Je voulais comprendre le mécanisme du fichier joint et tenter de l'adapter à ma situation.

Comme je l'avais dit dans mon premier post, Robert que je remercie beaucoup m'a donné un sacré coup de main. Je pensais parvenir sans trop de difficultés des insérer des formules dans le code VBA. Mais, rien à faire ça ne passe pas.

Je parviens à obtenir le résultat désiré en utilisant sommeprod sur les différentes feuilles de calcul. Je voudrais le faire en VBA que je ne maîtrise pas bien, pour ne pas dire pas du tout.

En fait, d'une DB j'extrais des données dans une présentation différente de celle de la BD. Si quelqu'un peut m'aider, je joins le fichier et lui en serais reconnaissant.

If d1.exists(c.Value) Then lig = d1(c.Value) Else d1(c.Value) = Mlig: lig = Mlig: Mlig

Je n'ai pas compris ce qui est souligné, que signifie les 2 points " : "? Merci.

Je prépare le fichier et je le joindrai dans mon prochain post.

Je vous remercie beaucoup.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Apprentissage Scripting.Dictionary

Le caractère : sert à séparer 2 instructions VBA.
Mlig est une variable qui donne le nombre d'éléments du dictionnaire.

-Si la clé existe, on récupère l'indice de la ligne pour le tableau a(,) lig = d1(c.Value)
-Si la clé n'existe pas, on crée une nouvelle clé et un nouvel indice de ligne pour le tableau a (,)
d1(c.Value) = Mlig: lig = Mlig: Mlig = Mlig + 1

JB
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Apprentissage Scripting.Dictionary

Je te remercie beaucoup Boisgontier pour tes explications, là, je comprends un peu mieux.
Si le travail sur le site de Jacques Boisgontier est de toi. Je me permets de te féliciter, c'est vrai formidable. En m'inspirant et adaptant certains exemples, je suis parvenu tout débutant que je suis à réaliser des formulaires de choix en cascade. C'était un très bon exercice, j'ai bien saisi les déclarations dans les modules des combobox pour ne pas avoir de données en doublons.

Par contre, je n'ai pas encore compris comment structurer le dictionnaire pour, par exemple, récupérer les données correspondantes à 2 colonnes (ou plus) par rapport à une autre colonne (ex: colA sans doublons, récupération valeurs colA et valeurs correspondantes des colonnes B et C).

J'ai consulté cette page Formation Excel VBA JB, mais je n'ai pas bien compris. Pourrais-tu éclairer ma lanterne, en te remerciant par avance.

Pour mon fichier, je suis bloqué. J'ai pensé à une macro indépendante qui sera appelée à la fin de la première.
Je vous joins le fichier.

Bonne soirée.
 

Pièces jointes

  • Dictionary-Transfert2.xls
    139 KB · Affichages: 39

cathodique

XLDnaute Barbatruc
Re : Apprentissage Scripting.Dictionary

Bonsoir Klin89, Bonsoir le Forum,

Je te remercie beaucoup, je vais sur le champ le mettre dans mes favoris même si c'est dans la langue de Shakespeare. D'ailleurs tout ce qui concerne l'informatique est en anglais. Merci.

Bonne soirée!

Cordialement,
Cathodique
 

Statistiques des forums

Discussions
312 323
Messages
2 087 301
Membres
103 512
dernier inscrit
sisi235