Macro - Recherche de lignes selon deux critères

wizard0147

XLDnaute Occasionnel
Bonjour à tous,

Je cherche à créer un code VBA qui permet d'identifier une ligne dans une base de données en fonction de deux critères.

Un truc du genre:

Columns("A:A").Select
Set c = Selection.Find(What:=Sheets("Home").Range("$I$12"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole)
&
Columns("B:B").Select
Set c = Selection.Find(What:=Sheets("Home").Range("$I$18"), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole)

puis sélection de la ligne regroupant ces deux critères.

J'espère être suffisamment clair.

Merci d'avance pour votre aide :)
 

wizard0147

XLDnaute Occasionnel
Re : Macro - Recherche de lignes selon deux critères

Bonjour Hasco,

Non, il faudrait sélectionner uniquement la ligne qui contient ces deux critères. Dans ma base de données, une seule ligne pourra regrouper les deux critères.

Je mets un exmple du fichier en pièce jointe.

En fonction des résultats des cellules C5 et C9, je souhaite sélectionner la ligne correspondante à ces deux critères dans la feuille "Données".

Merci :)
 

Pièces jointes

  • Test v2.xlsm
    23.8 KB · Affichages: 150
  • Test v2.xlsm
    23.8 KB · Affichages: 160
  • Test v2.xlsm
    23.8 KB · Affichages: 156
G

Guest

Guest
Re : Macro - Recherche de lignes selon deux critères

Bonsoir,

En plus de la macro recherche, je t'ai mis une formule en A1 de Accueil que tu mettre ailleurs (une feuille cachée ou feuill temp) qui retourne le numéro de ligne dans laquelle se trouve le constructeur et le modèle. Ce sera toujours plus rapide qu'une macro.

A+
 

wizard0147

XLDnaute Occasionnel
Re : Macro - Recherche de lignes selon deux critères

Bonjour Klin89, Hasco,

Merci pour vos deux solutions.

J'avais déjà étudié la piste des formules matricielles mais cela ne convient pas. en effet, je vais copier la ligne sélectionnée pour la copier ailleurs mais il faut absolument que les cellules ùu je copie soient vides.

Je vais me pencher sur le lien de klin89.

Merci à vous deux :)
 
G

Guest

Guest
Re : Macro - Recherche de lignes selon deux critères

Bonjour,

As-tu lu complètement mon post, dans le fichier tu as une macro de recherche sans formule. La formule était là simplement en exemple d'un autre moyen.

A+
 

wizard0147

XLDnaute Occasionnel
Re : Macro - Recherche de lignes selon deux critères

Hasco,

Ton code VBA convient parfaitement, merci beaucoup :).

Je l'ai légèrement modifié pour copier et coller la ligne en question et non plus faire apparaitre un msgbox.

Juste un dernier petit détail. Avec ma modification, il copie de la colonne A à H.
Est-il possible de ne copier que de la colonne Dà H ?

Merci encore
 

Pièces jointes

  • Test v2.xlsm
    26.1 KB · Affichages: 199
  • Test v2.xlsm
    26.1 KB · Affichages: 196
  • Test v2.xlsm
    26.1 KB · Affichages: 204
G

Guest

Guest
Re : Macro - Recherche de lignes selon deux critères

Bonjour,

Dans ton fichier exemple je ne vois pas de ligne pour copier / coller quelque lignes que se soit. De plus dans WorkSheet_Change tu lances un code (RechercheMulticritères) qui n'est pas du tout celui que je t'ai passé et qui plante à la ligne Range("Constructeur") (i).resize(,2).Select car la feuille Données n'est pas la feuille active.

Déclare tes variables avec leur type

Refait un fichier propre et je verrai.

A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Macro - Recherche de lignes selon deux critères

Bonjour,

VB:
Sub Recherche()
Dim Constructeur As String, Modele As String
Dim c As Range, Adr1 As String
Constructeur = Sheets("Accueil").Range("C5")
Modele = Sheets("Accueil").Range("C9")
If Trim(Constructeur) <> "" And Trim(Modele) <> "" Then
With Sheets("Données")
With .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
Set c = .Find(What:=Constructeur, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not c Is Nothing Then
Adr1 = c.Address
Do
If c.Offset(, 2) = Modele Then
Sheets("Accueil").Range("A20:A24").Value = Application.Transpose(c.Offset(, 3).Resize(1, 5))
Exit Do
End If
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> Adr1
End If
End With
End With
End If
End Sub

A+
 

Discussions similaires

Réponses
2
Affichages
284

Statistiques des forums

Discussions
314 022
Messages
2 104 732
Membres
109 114
dernier inscrit
ibrababa1957