Recherche multi critere en VBA ou formule

Bonjour,

j'avais déjà pose une question similaire il y a environ 1 an mais je souhaiterai "complexifier" la chose.

Comme un exemple est plus clair qu'un long paragraphe je vous joint ma feuille "exemple" en pièce jointe !

Merci d'avance à ceux qui prendront le temps de m'aider

17classeur1bis.xlsx (16.97 Ko)

Edit modo : voici la demande, toujours mieux de la mettre dans le post

Je souhaiterai (si possible) :

Dans la cellules JAUNES C1 s'affiche le resultat de la recherche suivante :
- Rechercher tous les "A" (valeur de B1) se trouvant dans la zone A2:N21 de la FEUIL2
- Chaque fois que la lettre "A" est trouvée dans la zone de recherche on recuperer le "chiffre indice" immediatement à GAUCHE et on recherche dans la même colonne mais à partir de la ligne 22 (Zone en vert) le ou les "chiffre indice" pour recuperer la valeur de la cellule immédiatement à DROITE.
- Cela est effectué pour chaque colonne ou A est trouvé et une liste est constituée avec tous les résultats trouvés
- On recupere une valeur ALEATOIRE dans cette liste de resultats et on l'affiche en C1 (Cellule JAUNE dans mon exemple)

Dans mon exemple :
- Pour trouver C1 : je recherche la valeur donnée en "B" (ici A) dans la zone A2:A21 de la FEUIL2 (je le trouve 10 fois "en ORANGE")
- Je recupere les "chiffres indice" immédiatement à gauche de chaque valeur A trouvée et recupere les valeurs associées aux chiffres indice dans chaque colonne (zone en vert à partir de la ligne 22)
- Je choisi alors aleatoirement UNE SEULE valeur (ici en BLEU) dans la liste composée de toutes les valeurs (15 valeurs dans mon exemple) associées à "A" avec les même chiffre indice"
- Pour C1 j'obtient donc le resultat "J"

Bonjour Oly80,

Quelle est la finalité/utilité de votre demande

A+

Bonsoir @ tous !

Une proposition :

Sub LouReeD()
    Dim Trouve As Range, Adr As String, LaChaine As String, Valeur, Col, I, Temp, Tablo
' on cherche la première valeur
    Set Trouve = Sheets("Feuil2").Range("B2:AC21").Find(Sheets("Feuil1").Range("B1"), lookat:=xlWhole)
' si on en trouve une
    If Not Trouve Is Nothing Then
' on récupère l'adresse de la cellule
        Adr = Trouve.Address
' on récupère le numéro de colonne des chiffres
        Col = Trouve.Column - 1
' on lance une boucle indéfinie afin de cherche les autres occurences
        Do
' on récupère le chiffre à gauche de l'occurence    
            Valeur = CDbl(Trouve.Offset(, -1))
' on boucle sur la colonne de chiffre à partir de la ligne 22
            For I = 22 To 34
' si on trouve on ajoute la lettre à la chaine
                If Sheets("Feuil2").Cells(I, Col) = valeur Then LaChaine = LaChaine & Sheets("Feuil2").Cells(I, Col).Offset(, 1) & ","
            Next
' on lance la recherche suivante de l'occurence
            Set Trouve = Sheets("Feuil2").Range("B2:AC21").FindNext(Trouve)
' on sort de la boucle si on tombe sur la première adresse trouvée
        Loop While Trouve.Address <> Adr
' on réduit la chaine d'un caractère pour enlever la dernière virgule
' et on la split sur avec les virgules
        Tablo = Split(Mid(LaChaine, 1, Len(LaChaine) - 1), ",")
' on choisi au hasard un index du tableau
        Temp = Int(Rnd * UBound(Tablo))
' on affiche la lettre correspondante
        Sheets("Feuil1").Range("C1") = Tablo(Temp)
    Else
' on a pas trouver d'occurence
        MsgBox ("La valeur : " & Sheets("Feuil1").Range("B1") & " n'a pas été trouvée...")
    End If
End Sub

@ bientôt

LouReeD

bonjour

un essai sans vba

23oly80.xlsx (23.51 Ko)

Merci à Tulipe et Loureed !

Désolé pas trop eu le temps de reprendre mes tests ces derniers jours...

Alors tulipe ta formule m’intéresse (car l’idéal était de ne pas utilisé de VBA) mais je n'arrive pas à rechercher toutes les lettres c'est assez bizarre...

Pour toi Loureed étant moins à l'aise avec VBA je t'avouerai que je n'ai pas réussi à transposer ton code dans mon fichier...

Rechercher des sujets similaires à "recherche multi critere vba formule"