Recherche dans une Collections

Bonjour a tous.

En python il existe une instruction simple qui permet de vérifier si un élément appartient a une collection(list)

"élement in list" qui renvoie 'True" si l'élément appartient a la liste ou "False" si il n'appartient.

Existe-il en VBA une instruction simple équivalente?

j'avais essayé avec "instr" mais çà ne marche pas

Merci

Yan

bonsoir,

ici un exemple

https://excelmacromastery.com/excel-vba-collections/ et puis "13.Check if an item exists in a Collection"

Bonjour bart

Merci de m'avoir répondu. J'avais en effet fait dans un 1er temps une boucle, mais je ne trouvais pas cela trop élégant. Car si la liste est très longue et que par malchance l'élément recherché est a la fin çà augmente considérablement le temps de résolution.

Je ne sais pas comment fait "python" mais c'est pratiquement instantané. Donc il n'y aurait pas d'instruction équivalente en VBA

Merci de t'être penché sur mon problème

Yan

re,

avec l'opion 2, cela ne fonctionne pas ?

' https://excelmacromastery.com/
Function Exists(coll As Collection, key As String) As Boolean

    On Error Goto EH

    IsObject (coll.Item(key))

    Exists = True
EH:
End Function

Bonjour

Je n'arrive pas à intégrer les liens que tu m'as donné dans mon programme

mon programme crée 2 listes une des 500 premiers carrés et une des 500 premiers cube

Dim liste1 As New Collection
Dim liste2 As New Collection
Sub toto()
For x = 1 To 500
ca = x ^ 2
cu = x ^ 3
liste1.Add (ca)
liste2.Add (cu)
Next
Stop
a = 25

si la variable a contient la valeur 25

comment je teste quelle est bien dans liste1 et pas dans liste2

Merci

A+

yan

re, moi, je préfère des dictionaires

Sub toto()
     Dim liste1: Set liste1 = CreateObject("scripting.dictionary")
     Dim liste2: Set liste2 = CreateObject("scripting.dictionary")

     For x = 1 To 500
          liste1(x ^ 2) = vbEmpty
          liste2(x ^ 3) = vbEmpty
     Next

     b = liste1.Exists(25)                   'existe 25 dans liste1 ?
     MsgBox "25 " & IIf(b, "existe", "n'existe pas") & " en 2eme puissance", vbQuestion, "Existe 25 ?"

     b = liste2.Exists(123)                  'existe 25 dans liste2 ?
     MsgBox "123 " & IIf(b, "existe", "n'existe pas") & " en 3eme puissance", vbQuestion, "Existe 123 ?"

End Sub

Bonsoir Yan1954,

Il existe en VBA, une solution qui permet de tester si un élément appartient à telle collection.

Il suffit d'ajouter sur ta boucle 1 to 500 l'élément key à chaque item de tes collections. Voir ci dessous.

Dim liste1 As New Collection
Dim liste2 As New Collection

Sub toto()
Dim a as Long, st as String
For x = 1 To 500
ca = x ^ 2, Cstr(ca)
cu = x ^ 3, Cstr(cu)
liste1.Add (ca)
liste2.Add (cu)
Next
a = 25
'Double Test par boîte de message de la valeur choisie. On contrôle d'abord si carré puis si cube
On Error resume Next
MsgBox Koll_1(CStr(a)) & " est un carré"
On Error goto ErrFin
MsgBox Koll_2(CStr(a)) & " est un cube"
End
ErrFin:
MsgBox "Non trouvé"
End

Si la valeur n'est pas trouvé dans une des collections, le message Non trouvé s'affichera seulement.

merci a vous deux.

çà fonctionne

Rechercher des sujets similaires à "recherche collections"