Recherche dans un tableau
Hello tout le monde
C'est sans doute moi qui m'y prend mal mais je trouve la recherche dans un tableau à deux dimensions particulièrement lourdingue et assez peu "logique".
Ayant besoin d'y faire souvent appel, j'ai créé une petite fonction qui me facilite pour le moment grandement la tâche.
Au début, la fonction étant censée retrouver une valeur dans des tableaux ne contenant que des chiffres (méthode 0), puis je l'ai changée pour permettre la recherche sur n'importe quel type de valeur mais alors de manière précise (méthode 1).
Voici l'aide que j'ai écrite pour les autres expliquant la fonction et, plus bas, vous trouverez le code :
Public Function JGTableau(Tableau, Largeur, Hauteur, Methode) ' Je déclaire ma fonction et les variables qui y entreront
Dim MonTableau ' Je créé une variable pour y inclue mon tableau
MonTableau = Tableau ' J'assigne à cette variable le tableau indiqué par la fonction
If Methode = 0 Then
For i = 2 To UBound(MonTableau, 2) ' Je parcours les colonnes de 2 à la dernière
If MonTableau(1, i) >= Largeur Then ' Si la colonne correspond à ma largeur, alors
For j = 2 To UBound(MonTableau, 1) ' je parcours les lignes de la 2 à la dernière
If MonTableau(j, 1) >= Hauteur Then ' Si ma hauteur correspond à ma hauteur alors
JGTableau = MonTableau(j, i) ' Je renvoie la donné correspondant à cette colonne et à cette ligne.
Exit Function ' Je quitte la fonction car n'ai plus besoin de continuer la boucle
End If
Next ' Si ma ligne ne correspond pas, je passe à la suivante.
End If
Next ' Si ma colonne ne correspond pas, je passe à la suivante
End If
If Methode = 1 Then
For i = 2 To UBound(MonTableau, 2) ' Je parcours les colonnes de 2 à la dernière
If MonTableau(1, i) = Largeur Then ' Si la colonne correspond à ma largeur, alors
For j = 2 To UBound(MonTableau, 1) ' je parcours les lignes de la 2 à la dernière
If MonTableau(j, 1) = Hauteur Then ' Si ma hauteur correspond à ma hauteur alors
JGTableau = MonTableau(j, i) ' Je renvoie la donné correspondant à cette colonne et à cette ligne.
Exit Function ' Je quitte la fonction car n'ai plus besoin de continuer la boucle
End If
Next ' Si ma ligne ne correspond pas, je passe à la suivante.
End If
Next ' Si ma colonne ne correspond pas, je passe à la suivante
End If
MsgBox ("Les valeurs semblent hors limites") ' Si aucune colonne et aucune ligne ne correspond, un message est envoyé
End FunctionBonjour Marc.
Ta fonction évite d'utiliser les fonctions Index et Equiv d'Excel.
Quelle est ta question sur ton sujet ?
Je découvre Excel en fait.
Et, en effet, c'est une technique INDEX/EQUIV que j'avais trouvé sur internet.
Je trouvais bizarre qu'il n'y ait rien de plus simple, donc la question était surtout de savoir si il existait plus simple ou non et, si cela n'était pas le cas, autant alors que ma fonction puisse servir à d'autres si cela est plus facile pour eux aussi.
Bonjour, Salut Benoît !
Quelques remarques à ce propos :
Une fonction personnalisée utilisable en fonction de feuille de calcul présente un intérêt pour des cas particuliers pour lesquels on ne dispose pas de fonctions Excel, ou bien dans des cas ou la formulation aboutirait à une formule complexe et lourde, alors que VBA permet d'opérer de façon plus simple.
Mais dans les autres cas il demeure préférable d'utiliser les fonctions Excel sur feuille, qui seront généralement plus performantes.
Cordialement.