Rechercher avec plusieurs critères en VBA

burno07

XLDnaute Nouveau
Bonjour à vous tous.
Voili voilou mon petit problème.
J'ai un tableau à plusieurs colonnes et plusieurs lignes.
Exemple : Dans la colonne A, il y a des valeurs qui peuvent être en doublon. Dans la colonne D, il y a des valeurs autres et qui peuvent aussi être en doublon. Par contre, l'association A+D sur une ligne ne peut exister qu'une fois, donc pas de doublon au niveau des lignes.
J'ai créé des variables a et d, et à partir de ces variables, je voudrais me positionner sur la ligne recherchée, et me déplacer de 2 colonnes + à droite.
1 variable je sais faire, mais en enchaîner 2, ça dépasse mes petites compétences.
Merci d'avance
 

burno07

XLDnaute Nouveau
Re : Rechercher avec plusieurs critères en VBA

C'est la 1ère fois que je fais la manip de joindre un fichier, pas sur que ça marche.
Donc, je recherche la ligne où je vais trouver en A la valeur a et en B la valeur 0 et aller sur la colonne D de cette ligne.
C'est + clair ?
 

Pièces jointes

  • Essaisrecherche.xls
    13.5 KB · Affichages: 79
  • Essaisrecherche.xls
    13.5 KB · Affichages: 63
  • Essaisrecherche.xls
    13.5 KB · Affichages: 65

burno07

XLDnaute Nouveau
Re : Rechercher avec plusieurs critères en VBA

Ca marche Nickel, mais comment remplacer E4 et F4 par des variables "TOTO" et "TATA"
J'ai créé des variables TOTO et TATA et j'ai essayé de remplacer le .Range("E4") par .Range("TOTO") ..... Pas concluant du tout du tout mon histoire. Mais Range est il utilisable avec des variables ??????(et oui, vraiment petit autodidacte le mec)
 

pedrag31

XLDnaute Occasionnel
Re : Rechercher avec plusieurs critères en VBA

Bonjour Burno07, Jean-Marcel, le forum,

Ci-joint une proposition avec la méthode Find d'Excel, qui sélectionne aussi la première occurence trouvée et qui informe l'utilisateur s'il y a plusieurs autres occurences trouvées (doublons) dans la liste.

J'ai également eut à traiter la même problématique que Burno dans des fichiers énormes (60,000 lignes) et la méthode Find, bien que plus complexe, est bien plus rapide qu'une boucle qui scanne toutes les lignes du fichiers.

VB:
Option Explicit

Sub recherche2()
    Dim Lig As Long
    Dim Trouve As Boolean
    Dim Liste() As String
    Dim i As Integer, j As Integer
    Dim c As Range
    Dim firstAddress As String
    Dim Message As String
    
    'initialisation des variables
    i = 0
    Trouve = False
    
    
    'on limite la recherche à la colonne du premier critère (colonne A)
    With Sheets("Feuil1").Range("A3:A" & Sheets("Feuil1").UsedRange.Rows.Count)
    'on recherche toutes les occurences du premier critère dans la colonne A
    Set c = .Find("*" & Sheets("Feuil1").Range("E4").Value & "*", , xlFormulas, xlPart, xlByRows, xlNext, False, False)
        If Not c Is Nothing Then
            firstAddress = c.Address
            
            Do While Not c Is Nothing
            'test si le deuxième critère est OK
            If Sheets("Feuil1").Range("B" & c.Row).Value = Sheets("Feuil1").Range("F4").Value And Trouve = False Then
                i = i + 1
                ReDim Preserve Liste(1, i)
                Liste(0, i) = c.Row
                Liste(1, i) = "Crit 1=" & c.Value & "; Crit2=" & Sheets("Feuil1").Range("B" & c.Row).Value
                Trouve = True
                c.Select
            ElseIf Sheets("Feuil1").Range("B" & c.Row).Value = Sheets("Feuil1").Range("F4").Value And Trouve = True Then
                i = i + 1
                ReDim Preserve Liste(1, i)
                Liste(0, i) = c.Row
                Liste(1, i) = "Crit 1=" & c.Value & "; Crit2=" & Sheets("Feuil1").Range("B" & c.Row).Value
            End If
            
            Set c = .FindNext(c)
            If c Is Nothing Then Exit Do
            If c.Address = firstAddress Then Exit Do
            Loop
            
            's'il ya des doublons dans les occurences trouvées
            If i > 1 Then
            Message = "ATTENTION! Résultat = " & i & " occurences trouvées!"
                For j = 1 To i
                    Message = Message & vbCr & "Ligne = " & Liste(0, j) & " - " & Liste(1, j)
                Next j
            MsgBox Message
            End If
        End If
    End With
End Sub

Bonne journée :)
 

Pièces jointes

  • EssaisrechercheAvecFind.xls
    39.5 KB · Affichages: 202

burno07

XLDnaute Nouveau
Re : Rechercher avec plusieurs critères en VBA

J'ai à nouveau un blocage. J'ai rajouté une colonne et une variable dans la macro. Donc quand on lance la macro, on se positionne comme je le désire. Mais comment peut on additionner la valeur de la variable à la valeur de la cellule.
Cellule avant lancement macro = 25, variable = 20 donc resultat final cellule =45.
 

Pièces jointes

  • Essaisrecherche.xls
    24.5 KB · Affichages: 53
  • Essaisrecherche.xls
    24.5 KB · Affichages: 55
  • Essaisrecherche.xls
    24.5 KB · Affichages: 65
Dernière édition:

burno07

XLDnaute Nouveau
Re : Rechercher avec plusieurs critères en VBA

Quand je lançais la macro, le résultat était = à la variable -1.
J'ai modifié la formule et ça marche.
Grand merci pour la réponse Jean-Marcel.
je joins le fichier modifié. Si tu trouves quelque chose de bizarre dans ma modif, je suis preneur.
A+
 

Pièces jointes

  • Essaisrecherche.xls
    24.5 KB · Affichages: 107
  • Essaisrecherche.xls
    24.5 KB · Affichages: 71
  • Essaisrecherche.xls
    24.5 KB · Affichages: 96

Discussions similaires

Réponses
22
Affichages
758

Statistiques des forums

Discussions
312 184
Messages
2 086 008
Membres
103 088
dernier inscrit
Psodam