Extraire des données avec des entrées a critères variables

Bonjour,

J'ai trois menus déroulants ​:

Menu
déroulant 1 :
Menu déroulant 2 :Menu déroulant 3 :
Critère 1Critère 4Critère 7
Critère 2Critère 5Critère 8
Critère 3Critère 6Critère 9

​avec un tableau de données :​

référence 1Critère 1critère 4critère 7
référence 2Critère 1critère 5critère 7
référence 3Critère 1critère 6critère 7
référence 4Critère 1critère 4critère 7
référence 5Critère 1critère 5critère 7
référence 6Critère 1critère 6critère 7
référence 7Critère 1critère 4critère 7
référence 8Critère 1critère 5critère 7
référence 9Critère 1critère 6critère 7
ect…ect…ect…ect…

​Je souhaite pouvoir extraire la bonne référence en fonction du critère choisi avec les menus déroulants.

Merci de votre aide.
Cordialement.

Bonjour,

Ci-joint une proposition avec INDEX+EQUIV, en espérant que le calcul matriciel fonctionne correctement sur XL2010 (je ne peux pas tester malheureusement).

9book1.xlsx (11.56 Ko)

Bonjour

Sans les coordonnées des cellules...

image

PS : même fonctions mais formule un poil différente

Bonjour VincMalin et le forum
Voici ma proposition avec un formulaire de saisie.
J'ai modifié l'ordre des colonnes en mettant la référence en 4ème colonne.
Cdt
Papy Henri

Bonjour,

Merci à tous pour vos réponses.
J'avais sans doute oublié de préciser que je voulais faire en VBA

8classeur1.xlsm (18.16 Ko)

saboh12617 ça fonctionne très bien. Est-il possible de faire la même chose sans UserForm, directement dans Excel.
Ci-joint une trame. Merci.

Bonjour,

Merci pour votre retour. La formule de Chris devrait aussi fonctionner pour info.

De manière générale dans Excel il est mieux d'éviter le VBA quand on peut passer par des fonctions... Le VBA doit être vu comme une solution de "dernier recours".

Mais pour essayer de répondre, ci-joint le fichier de AFEH mis à jour pour intégrer une fonction de recherche en VBA dans le tableau. La fonction en question ci-après

EDIT : voir message suivant correctif (fichier joint MAJ)

Bonjour
Dans votre exemple vous aurez toujours 3 références qui répondront aux 3 critères.
C'est pourquoi j'avais modifié la colonne CRIT1 en mettant "Critère 1, Critère2, Critère3" 3 fois.
Voici toujours ma proposition par formulaire en tenant compte de votre 1ère structure, mais en modifiant les critères de la colonne 2
@saboh12617: en testant votre proposition, votre fonction ne donne pas toujours le bon résultat.
Cdt
Papy Henri

Très bien vu Papy, j'avais complètement foiré. La correction ci-après

Public Function TrouverRef(c1 As String, c2 As String, c3 As String)
  Dim tblData
  tblData = Range(TBL_NAME).ListObject.DataBodyRange.Value

  ' on suppose c1 dans colonne1, c2 colonne2, c3 colonne3
  Dim i As Long, ref As String
  For i = LBound(tblData, 1) To UBound(tblData, 1)
    If _
      (Abs(StrComp(CStr(tblData(i, 1)), c1, vbTextCompare)) + _
        Abs(StrComp(CStr(tblData(i, 2)), c2, vbTextCompare)) + _
        Abs(StrComp(CStr(tblData(i, 3)), c3, vbTextCompare))) = 0 Then
      TrouverRef = CStr(tblData(i, 4))
      Exit Function
    End If
  Next i

  TrouverRef = ref
End Function

Bonjour,

Merci pour toute vos réponses, c'est sympa.

Mes connaissances étant très limité pourriez vous adapter au fichier Excel (classeur1) que j'ai transmis que j'essaies de comprendre.

Merci.

Bonjour,

Merci pour toute vos réponses, c'est sympa.

Mes connaissances étant très limité pourriez vous adapter au fichier Excel (classeur1) que j'ai transmis que j'essaies de comprendre.

Merci.

Bonjour,

Voir ci-joint ma dernière proposition adaptée à votre classeur (changement des colonnes).

6classeur1.xlsm (27.03 Ko)

2 points sur lesquels nous sommes tous d'accord :

  • utilisez un tableau structuré pour stocker vos données, ça n'a que des avantages.
  • faites attention à vos données : dans votre exemple la colonne 3 contenait "crière" au lieu de "critère" donc ça ne risquait pas de fonctionner.

Bonne journée

Merci.
Si je veux lancer la macro avec le CommandButton1_Click() de l'onglet "Extraction' et mettre le résultat également dans l'onglet "Extraction' en E6.
Classeur 1 est un exemple, je suis dans un cadre pro ou je ne peux transmettre ma vrai base de donnée.

En fait vu que c'est une formule il n'y a pas besoin de bouton...

Vous pouvez simplement couper/coller la formule que j'ai mise dans menu déroulant F5 dans votre feuille référence. Dès lors que vous changez l'un des critères de tri, la formule est réévaluée.

Oui je peux faire ça, ça fonctionne.
Mais de manière générale, j'évite les formules dans les cellules car le fichier à plusieurs utilisateur qui sont susceptibles de la supprimer.

C'est pour ça que je passe souvent passe par un CommandButton1_Click().

Dans ce cas vous pouvez "tricher" : dans votre commandbutton, appelez la fonction et collez le résultat tel quel dans la cellule.

Private Sub CommandButton1_Click()
  With ThisWorkbook.Worksheets("Menu déroulant")  ' with pour récupérer les valeurs depuis l'autre feuille (avec .Range)
    Me.Range("E6").Value = TrouverRef(.Range("B5"), .Range("C5"), .Range("D5"))
  End With
End Sub

Cela fonctionne. Merci.
Pour adapter à mon fichier final, je peux avoir quelques explications sur le module 1 ?
J'espère ne pas abuser de votre temps.

Merci.

Cela fonctionne. Merci.
Pour adapter à mon fichier final, je peux avoir quelques explications sur le module 1 ?
J'espère ne pas abuser de votre temps.

Merci.

La fonction TrouverRef fonctionne ainsi :

  • elle récupère les données se trouvant dans le tableau nommé "Table1". Ce nom se trouve dans la constante TBL_NAME(en haut de module).
  • elle parcourt chaque ligne de ce tableau (indice i), pour chaque ligne, elle regarde si les critères dans chacune des colonnes sont égaux à ceux recherchés. Pour ça on utilise StrComp qui est un peu plus précis que "=" (permet d'éviter les problèmes majuscules/minuscules notamment).
  • Quand la fonction a trouvé une correspondance exacte sur les 3 colonnes elle la renvoie, sinon on finit le parcours du tableau et on renvoie la valeur par défaut : "non trouvé".

Si vous débutez en VBA je vous conseille de lire la formation du site afin de vous familiariser avec les concepts évoqués Cours VBA gratuit.


N'oubliez pas de passer le fil en résolu.

Bonne journée

Pas sûr d'avoir tout compris mais je vais essayer d'appliquer à mon cas conquérait.

A quel moment on dit que "table 1" est égale à mon tableau de données ?

Merci.

Sur le lien que je vous avais donné : Les tableaux structurés § Utilisation dans VBA, c'est expliqué. Range("monTableau") renvoie la range contenant monTableau.

Bonjour à tous !

Mais de manière générale, j'évite les formules dans les cellules car le fichier à plusieurs utilisateur qui sont susceptibles de la supprimer.

Il est possible de protéger les cellules alimentées par une fonction.

Merci à tous pour vos réponses.

Rechercher des sujets similaires à "extraire donnees entrees criteres variables"