RechercheX (ou autre?) d'une valeur dans une matrice

Bonjour à tous,

Le fichier est sans doute plus parlant, l'idée est de pouvoir chercher une valeur dans un tableau ou une plage de donnée, mais qui peut se trouver dans n'importe quelle colonne (pas forcément la 1ère comme avec un recherchev classique) et bien sûr n'importe quelle ligne... (edit : et de renvoyer la valeur de la cellule contiguë)

Je suis parvenu à un résultat en imbriquant plusieurs recherchex comme vous pouvez voir dans le fichier, mais cela ne me semble pas très optimisé et cela occasionne des ralentissements sur des volumes de données importants.

J'ai un peu creusé avec Index et Equiv mais je n'ai pas trouvé mon bonheur...
Si une bonne âme avait une piste ?

Les formules sont dans la colonne O du fichier...
Merci déjà à vous qui m'avez lu, et merci par avance pour vos réponses !

Bonsoir,

En détournant totalement ton tableau et contournant la logique de sa construction, une piste.

Bonne soirée.

27test.xlsx (12.74 Ko)

Bonsoir Ergotamine,

Merci beaucoup, ça marche effectivement parfaitement ici (avec des dates).

Je suis impressionné, admiratif et reconnaissant...

Il est vrai que si une solution fonctionnant avec tous types de données (autre que dates) existe, cela m'intéresse grandement également !

Merci encore !

Bonjour

Bonjour à tous

Une variante avec fonction personnalisée.

Bye !

En O4 :

=INDEX($A$1:$L$34;SOMMEPROD(($N4=$A$4:$L$34)*LIGNE($A$4:$A$34));EQUIV(DATE(ANNEE($N4);MOIS($N4);1);$A$3:$L$3;0)+1)

Par contre attention tes mois sont sur l'année 2020 alors que les dates recherchées sont sur 2021.

Merci encore Ergotamine,
Ta première proposition était plus facilement adaptable pour moi, j'avoue mal comprendre le fonctionnement de cette seconde, elle semble aussi basée sur les dates ?
Merci !

Bonjour,

En effet c'est une recherche en matrice. La fonction SOMMEPROD renvoie le numéro de ligne sur laquelle se trouve la date. La fonction EQUIV renvoie la colonne à renvoyer en fonction du mois de la date recherchée. Donc on reste en effet lié par cette idée de date à cause du mois.

Bonjour gmb, merci beaucoup !

Je ne cesse d'être impressionné, génial !

Par contre, j'ai dû renommer la fonction personnalisé, je suis sous office 365 et "recherchex" existe nativement désormais...

Mais ta superbe solution m'ouvre de grand horizon : Est-il possible d'intégrer dans la fonction le numéro de la colonne à renvoyer comme variable ? (=@rechercheX($A$4:$L$34;$N4;2) par exemple ?

Merci encore !

Bonjour,

En modifiant le code de gmb :

Attention, si tu indiques une colonne qui fait sortir le résultats de ta plage de recherche, la formule te renvoie une erreur.

Option Explicit

Dim tablo
Dim i&, j&, r

Public Function RechercheX(plage As Range, dte As Range, col As Integer)

    Application.Volatile
    tablo = plage
    For i = 1 To UBound(tablo, 1)
        For j = 1 To UBound(tablo, 2) - 1 Step 2
            If tablo(i, j) = dte Then
                r = tablo(i, j + col)
                GoTo fin
            End If
        Next j
    Next i
fin:
    RechercheX = r
End Function

Super, merci beaucoup Ergotamine,

Cela fonctionne même avec des chiffres négatifs, c'est génial !

J'ai juste renommé le nom de la fonction en "rechercheZ" pour ne pas faire conflit avec le nouveau "recherchex" d'office 365...

Merci encore Ergatomine, merci gmb !

Ultimes question sans vouloir abuser : Sauriez-vous me dire si ce code est compatible avec Excel 64 bits (et Excel Mac) ? (Pour savoir si je peux partager mes fichiers utilisant cette fonction avec tous les types de profils ? Je me demande aussi comment se comporte une fonction personnalisée lorsqu'un fichier l'utilisant est ouvert avec Excel sur le Web, mais je ferais l'essai, je verrais bien...

Avec toute ma reconnaissance encore

Rechercher des sujets similaires à "recherchex valeur matrice"