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 :

jgtableau01
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 Function

Bonjour 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.

Rechercher des sujets similaires à "recherche tableau"