Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Afficher un élément d'un dictionnaire

15 réponses
Avatar
Apitos
Bonsoir =E0 tous,

En voulant afficher un Item d'un dictionnaire "dic", j'ai eu un message d'e=
rreur :

'---------------------------------------------
i =3D 1
Set dic =3D CreateObject("Scripting.Dictionary")
=20
'-- On remplit le dictionnaire dic=20
For Each C In WS2.Range("F2:F" & LastLg)
If Not dic.Exists(C.Value) Then
dic.Add Key:=3DC.Offset(0, -5).Value, Item:=3DC.Offset(=
0, -5).Value
MsgBox dic.Items(i) ' ICI l'erreur
i =3D i + 1
End If
Next C
'-----------------------------------------------------

"------------------------------------
Erreur d'ex=E9cution '451'

La proc=E9dure Property Let n'est pas d=E9finie et la proc=E9dure Property =
Get n'a pas renvoy=E9 d'objet=20
"-------------------------------------

Merci.

5 réponses

1 2
Avatar
Apitos
L'item ajouté peut avoir la même valeur que la clé du dictionnaire. Cela dépend de l'objectif de l'usager.



Oui comme ça on n'aura pas de message d'erreur.

Parce que je teste sur une plage ou la valeur de C se répète.
Avatar
Apitos
Mais je pense aussi à :

If Not Dic.Exists(C.Value) Then

Normmlement cette ligne nous permet de tester si une clé à déjà la même valeur C courante.

Si elle existe la condition if est fausse et cette ligne n'est pas exécut ée :

Dic.Add Key:=C.Value, Item:=C.Offset(0, -5).Value

Alors pourquoi le teste if est devenu juste alors que le dictionnaire à d éjà une clé qui contient la valeur C courante ?
Avatar
MichD
| Alors pourquoi le teste if est devenu juste alors que le dictionnaire à déjà une clé qui
contient la valeur C courante ?

Désolé, mais je ne comprends pas la question.



MichD
---------------------------------------------------------------
Avatar
Apitos
Bonjour,

| Alors pourquoi le teste if est devenu juste alors que le dictionnaire à déjà une clé qui contient la valeur C courante ?

Désolé, mais je ne comprends pas la question.



Normalement, l'ajout d'une nouvelle clé ne se fera que si elle n'existe p as.

Parce qu'on teste avec :

If Not Dic.Exists(C.Value)

Comme ça, si il y a une clé qui à la valeur = C.Value on ne passera plus à la ligne suivante :

Dic.Add Key:=C.Value, Item:=C.Offset(0, -5).Value

Et par conséquent on ne recevra plus le message d'erreur :

"------------------------------------------------------------"
Cette clé est déjà associée à un élément de cette collection
"------------------------------------------------------------"

Mais on recevant cette erreur, cela nous dis que la condition a été r éalisé.

Alors qu'est-ce qui fait que le test soit juste malgré que la clé exist e déjà ?
Avatar
MichD
Le code initial testait sur la "valeur en C.Offset" et non pas directement
sur la valeur C

Cette ligne de code : If Not Dic.Exists(C.Value) teste si la clé existe ou non.
L'ajout se fait seulement si la clé est absente. Une attention spéciale au petit mot "NOT"
dans la ligne de code...

L'objet "Dictionary" est un outil simple et rapide pour repérer seulement les valeurs
uniques.


MichD
---------------------------------------------------------------
1 2