VBA : scripting.dictionary

Résolu
Melycea -  
 Melycea -
Bonjour à tous,

Je suis en pleine initiation forcée au VBA.
Je voudrai savoir s'il est possible d'utiliser deux dictionnaires dans une même macro en sachant qu'ils ont pour clé une colonne commune.
Plus clairement, j'ai :
dict1.Add A:A, B:B  
dict2.Add A:A, C:C

et j'ai toujours l'erreur 457.
J'ai essayé de les créer dans deux fonctions différentes mais ça me met toujours la même erreur...
Quelqu'un a une idée?!

Merci ^^

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    L'objet dictionary ne tolère pas de doublon dans ses clés, sinon erreur 457

    si on a besoin des doublons, cet objet ne convient pas

    sinon il faut tester

    if not.dico.exists(laclé) then
        dico.add laclé, unevaleurdépendantedelaclé
    end if
    
    1
  2. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Je ne crois pas (sauf erreur) qu'il soit possible d'initialiser d'un seul coup le dictionnaire. La méthode Add n'accepte que des couples (clé, valeur).
    Je suggère de modifier le code comme cela :

    
    Set dict1 = CreateObject("Scripting.Dictionary") 
    Set dict2 = CreateObject("Scripting.Dictionary") 
    
    Derlig = Range("A65536").End(xlUp).Row 
    For lig = 1 To Derlig 
        dict1.Add Cells(lig, 1), Cells(lig, 2) 
        dict2.Add Cells(lig, 1), Cells(lig, 3) 
    Next lig 
    
    


    A+

    Cordialement,
    0
  3. Melycea
     
    Merci pour ta réponse mais ça ne me résout pas mon problème. J'ai toujours la même erreur.

    Est ce qu'il est possible sinon, de créer 2 macros pour la même feuille?!
    0
  4. Melycea
     
    Bonjour Michel,
    merci pour ta réponse mais je ne peux pas utiliser cette solution dans mon cas.
    En fait, en refaisant mon algorythme, je pense pas être partie dans la bonne direction.
    Mon algo est le suivant:

    DEBUT
    Chercher dans [Classeur2]Feuil1!ColA les lignes où on trouve la valeur F2
    SI B2 n'est pas dans ces lignes en [Classeur2]Feuil1!ColB ALORS
    Print "Valeur B incompatible"
    SINON
    SI C2 n'est pas dans ces lignes(avec F2 et B2)en [Classeur2]Feuil1!ColC ALORS
    Print "Valeur C incompatible"
    FINSI
    FINSI
    FIN

    Tout ça pour vérifier si les valeurs tapées en B2 et C2 du Classeur1 correspondent bien à un triplé (unique) dans le classeur2!A,B,C. En sachant qu'on a déjà la valeur en F2.

    Voila, si quelqu'un se sent l'âme à m'aider
    0