VBA Variables Tableaux - Trouver une valeur sans boucle

La braise

XLDnaute Occasionnel
Bonjour à Tous,

Mon problème du jour... :)

J'utilise une variable tableau (2D) que je souhaite utiliser comme une base pour faire du mapping.

Je cherche VAR_TAB(z, 2) pour un z donné.

Pour identifier z, j'utilise une boucle du genre :

For i = 1 To UBound(VAR_TAB, 1)
If VAR_TAB(i, 1) = Val_Cherchee Then Z = i
Next i
MsgBox VAR_TAB(Z, 2)

Existe t-il un moyen plus efficace que passer par une boucle qui balaye toutes les valeurs la colonne 1 du tableau?

En gros, comment lire une valeur donnée dans un tableau?

D'avance merci pour votre aide toujours aussi efficace.

:D
 

Misange

XLDnaute Barbatruc
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Bonjour
Pourquoi veux tu éviter de boulcer sur les éléments de l'array ? Autant boucler sur la feuille peut être très long, autant boucler sur l'array est quasi immédiat, même avec beaucoup de valeurs.
Ce lien n'existe plus (et 7 pages suivantes mais rien sur ta demande très précise :) )
 

Matheop

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Salut La braise, Misange.

A moins de dire une grosse bêtise ce n'est pas possible et c'est pareil dans pas mal de langages. Si tu souhaites chercher une valeur dans un tableau t'es obligé de "scanner" les cases de celui-ci une par une jusqu'à trouver celle(s) qui corresponde(nt). Sauf si tu connais déjà l'emplacement où est située la valeur que tu cherches, auquel cas la question ne se pose pas... mais sinon faut passer par une boucle.
 

Matheop

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Bon sinon ...

Code:
Sub scanTableau()

Dim monTableau(1 To 3)
  monTableau(1) = "pomme"
  monTableau(2) = "ananas"
  monTableau(3) = "cerise"
  
v = "ananas"

  If IsError(Application.Match(v, monTableau, 0)) Then
    MsgBox "Non trouvé"
  Else
    MsgBox "Trouvé"
  End If

End Sub

Il faut que tu saches quoi chercher dans le tableau et dans le fond (et à mon humble avis) la fonction Match s'appuie sur des boucles pour fonctionner bien qu'à notre niveau ça soit transparent. :cool:
 

La braise

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

J'ai vu cette solution, mais elle m'indique juste si la valeur cherchée existe et non sa position qui me permettrait d'aller lire le tableau pour récupérer la valeur d'une autre colonne.

Du coup j'arrive à ça en combinant un peu tout:

For i = 1 To UBound(VAR_TAB, 1)
If VAR_TAB(i, 1) = Val_Cherchee Then Exit For
Next i

If i > UBound(VAR_TAB, 1) Then
MsgBox "exite pas"
Else
MsgBox VAR_TAB(i, 2)
End If

Si quelqu’un a mieux je suis au combien preneur! :)

Merci à vous pour votre aide.
 

Misange

XLDnaute Barbatruc
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Il y a différentes solutions pour trouver si une valeur est présente ou pas dans un tableau à 2dimensions mais aucune à ma connaissance ne renvoie sa position.Mais je repose ma question : qu'est-ce qui t'ennuie dans le fait de faire cette boucle ? Les boucles sur des arrays sont TRES rapides...

Pour un tableau à une seule dim tu peux trouver sa position avec match

Sub Test() Dim Tblo As Variant, truc As String, n As Integer Tblo = [{"lundi", "mardi", "voiture", "12"}] truc = "voiture" On Error Resume Next n = Application.Match(truc, tblo, 0) On Error Goto 0 MsgBox n End Sub

Mais avec un tableau 2D ?

[edit]
en cherchant j'ai trouvé cela :

Dim arr(1 To 10, 1 To 2)
Dim x

For x = 1 To 10
arr(x, 1) = x
arr(x, 2) = 11 - x
Next x

Debug.Print Application.Match(3, Application.Index(arr, 0, 1), 0)
Debug.Print Application.Match(3, Application.Index(arr, 0, 2), 0)
 
Dernière édition:

La braise

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Re,

Boisgontier, je suis tombé sur ton code ce matin lors de mes tests.
Mais chez moi il ne fonctionne pas. :confused:
J'ai une erreur 13 Type mismatch

Misange,
ce qui m'embête c'est j'ai une base de 15.000 lignes dans le tableau et je dois mapper 5/6000 lignes...
ça fait beaucoup de boucles...
 

tototiti2008

XLDnaute Barbatruc
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Bonjour La braise, Bonjour Matichoux, Bonjour Misange, Bonjour Boisgontier, :)

ce qui m'embête c'est j'ai une base de 15.000 lignes dans le tableau et je dois mapper 5/6000 lignes...

mapper 5000 à 6000 lignes avec des valeurs différentes à chercher, ou bien 5000 à 6000 réponses pour une recherche ?
 

La braise

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Merci à vous tous de vous intéresser à mon pbm :)

Tototiti2008,
Non, j'ai une base globale de 15000 lignes avec des valeurs dans 10/15 colonnes.
C'est cette base que je mets dans la VAR_TAB

J'ai un autre fichier de 5/6000 lignes à mapper sur 4/5 colonnes à partir de la base VAR_TAB
Dans l'idée, pour chacune des 5/6000 lignes, je l'identifie dans la VAR_TAB et je me sers de sa position pour remplir les 4/5 colonnes que je cherche.

J'espère que c'est plus clair... :cool:
 

Misange

XLDnaute Barbatruc
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Re,

Misange,
ce qui m'embête c'est j'ai une base de 15.000 lignes dans le tableau et je dois mapper 5/6000 lignes...
ça fait beaucoup de boucles...

Tu as lu ma réponse ?

******ca c'est pour créer un array 2D pour faire un exemple...********
Dim arr(1 To 10, 1 To 2)
Dim x

For x = 1 To 10
arr(x, 1) = x
arr(x, 2) = 11 - x
Next x
*******fin de la création d'un array exemple, toi tu pars d'ici avec le tien**************
et là c'est le code pour chercher dans ton array la valeur et retourner son index.

Debug.Print Application.Match(3, Application.Index(arr, 0, 1), 0)
Debug.Print Application.Match(3, Application.Index(arr, 0, 2), 0)
 

Misange

XLDnaute Barbatruc
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

C'est difficile de t'aider :
tu ne montres pas le code que tu as essayé sur ta base, on n'a pas de fichier joint, même sur quelques lignes. et tu dis juste "j'ai essayé" essayé QUOI exactement
et sur quelle ligne as tu une erreur 2042 ?

le code que je t'ai fourni fonctionne très bien en tous cas
 

La braise

XLDnaute Occasionnel
Re : VBA Variables Tableaux - Trouver une valeur sans boucle

Merci pour le temps passé à m'aider.

Mon code :
Sub Test()

Dim VAR_TAB() As Variant
Dim Val_Cherchee As String
Dim i As Long

VAR_TAB = Range("A1:B8")
Val_Cherchee = "1003"

'methode boucle
For i = 1 To UBound(VAR_TAB, 1)
If VAR_TAB(i, 1) = Val_Cherchee Then Exit For
Next i

If i > UBound(VAR_TAB, 1) Then
MsgBox "exite pas"
Else
MsgBox VAR_TAB(i, 2)
End If

'methode sans boucle : identifier index
Debug.Print Application.Match("1003", Application.Index(VAR_TAB, 0, 1), 0)
Debug.Print Application.Match(Val_Cherchee, Application.Index(VAR_TAB, 0, 1), 0)

End Sub

Mon fichier d'origine :
Colonne A Colonne B
1001 AAA
1002 BBB
1003 CCC
1004 DDD
1005 EEE
1006 FFF
1007 GGG
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa