Recherchev à deux critères ou INDEX+EQUIV

julein12

XLDnaute Nouveau
Bonsoir à tous,

Après des heures de recherches cette après-midi, je n'arrive toujours pas à manier Excel comme je le souhaiterais. J'ai besoin pour un cours de créer des listes de déroulantes à 4 niveaux qui renvoient vers des données.

PB: Je souhaiterais (fichier ci-joint) que lorsque l'on choisit dans la feuille "choix" des critères (Type de véhicule, marque, model et couleur) cela me donne le prix et le nom du premier ainsi que du second concessionnaire.

J'ai réussi à récupérer d'un copain un excel avec 4 listes déroulantes + une valeur associée (prix concessionnaire 1). J'aimerais maintenant associer les 3 autres colonnes (Nom concessionnaire 1 + non et prix concessionnaire 2). J'avoue ne pas comprendre.

Après énormément de recherche cette aprem, j'ai trouvé une solution avec =SI(ET... mais cela est fastidieux et source d'erreur. C'est malheureusement la seule que j'arrive à utiliser jusque maintenant. Je pense qu'il y a mieux à faire.

Pourriez-vous, s'il vous plait, m'aider ? :)

Julien
 

Pièces jointes

  • Choix - Voiture.xls
    148.5 KB · Affichages: 42

Papou-net

XLDnaute Barbatruc
Re : Recherchev à deux critères ou INDEX+EQUIV

Bonjour Julien,

Le principe de fonctionnement est le suivant:

On commence par rechercher la première ligne correspondant au type de voiture dans la colonne A de la feuille BD
Set Typ = .Columns(1).Find(ComboBox1, LookIn:=xlValues)

On calcule ensuite le nombre de lignes contenant le type dans la même colonne
nLignes = WorksheetFunction.CountIf(.Columns(1), Typ)
On retranche 1 à nLignes car cette variable sera incrémentée dans la boucle suivante

Dans la boucle y, on compare les cellules B:E aux listes déroulantes correspondantes sur le formulaire
If .Cells(y, 2) = ComboBox2 And .Cells(y, 3) = ComboBox3 And .Cells(y, 4) = ComboBox4 Then Exit For
Lorsque l'égalité est trouvée, y représente alors la ligne correspondante sur la feuille BD et on met fin à la boucle

La boucle x se contente de copier les valeurs des colonnes A:A de BD sur la feuille Choix

Pour corroborer cette description, je te joins une copie du code commenté.

Code:
Private Sub B_ok_Click()
Dim Ligne, nLignes, Typ, x, y

Ligne = ActiveCell.Row 'stocke le n° de ligne de la cellule sélectionnée de la feuille Choix
With Feuil1
  'toutes les adresses précédées d'un point s'appliquent à la feuille BD
  'recherche du type de véhicule dans la colonne A de la feuille BD
  Set Typ = .Columns(1).Find(ComboBox1, LookIn:=xlValues)
  'calcule le nombre de lignes correspondant au type dans le feuille BD et retranche 1
  nLignes = WorksheetFunction.CountIf(.Columns(1), Typ)
  For y = Typ.Row To Typ.Row + nLignes
    'si la marque, le modèle et la couleur correspondent aux listes déroulantes alors la boucle s'arrête sur la ligne y
    If .Cells(y, 2) = ComboBox2 And .Cells(y, 3) = ComboBox3 And .Cells(y, 4) = ComboBox4 Then Exit For
  Next
  'la boucle reporte les valeurs de la ligne y de BD (colonnes A:H) sur la ligne Ligne de la feuille Choix
  For x = 1 To 8
    Cells(Ligne, x) = .Cells(y, x)
  Next x
End With
Unload Me
End Sub

En te souhaitant une bonne soirée.

Cordialement.
 

Discussions similaires