Recherche VBA à plusieurs critères et plusieurs retours

Myst3ry

XLDnaute Nouveau
Bonjour à tous,

Je suis tout nouveau sur ce forum que je consulte tout de même depuis maintenant quelques temps puisqu'il est l'une des meilleurs sources d'aide en Excel sur le Web que j'ai trouvé. Bon, voici pour la petite présentation, passons aux choses sérieuses. J'ai chercher sur plusieurs forum, mais rien n'est vraiment ce que je recherche (j'espère sincèrement ne pas ramener un vieux sujet déjà répondu). Je n'arrive pas à trouver une manière de créer un code de recherche, en VBA, qui respecte plusieurs critères (2) et qui permet de renvoyer plusieurs valeurs (3).

Voici mon exemple pour plus de simplicité...
Feuille "donnée"
10012133466
12332233456
23441262313466
23125533266
43232443266
...............
[td]CodeNumérique[/td]
[td]ValeurBrut[/td]
[td]ValeurPoint[/td]
[td]IDdivision[/td]
[td]IDunique[/td]

J'ai utilisé des chiffres et des noms de colonnes aléatoires pour le simple fait d'illustrer mon sujet car la feuille réel contient énormément de colonnes et de lignes.

Bref, dans une autre feuille, nommons la "main", j'entre 2 critères: IDdivision et IDunique et j'appuis sur rechercher valeurs. Le scripts recherche toutes les lignes qui respecte ces deux valeurs et me renvois les valeurs de CodeNumérique, ValeurBrut et ValeurPoint dans des variables distinctes du genre "array" pour que je puisse les traiter (additionner, soustraire, diviser, etc.)

Exemple: J'entre IDdivision = 32 et IDunique = 66. La recherche me renvois donc 3 variables de type "array" un peu sous la forme suivante.
CodeNum(0) = 23ValeurBrut(0) = 12ValeurPoint(0) = 553
CodeNum(1) = 432ValeurBrut(1) = 32ValeurPoint(1) = 44
Bien que les variables array ne soit pas obligatoire, je crois avec mon peu d'expérience que ce serait la manière la plus simple de les traiter par la suite. (risque d'avoir des recherches qui renvoient près de 100 lignes)

Et bien voilà! Je sais que j'en demande beaucoup pour un petit nouveau, mais je galère depuis longtemps avec la fonction "find" et je n'arrive à vraiment rien qui ce rapproche de ce que je désire. Je pensais à un principe de boucle, mais déjà je trouve cela très fastidieux et très peu "ergonomique". Mon esprit de codeur PHP m'indique qu'il y a certainement une autre alternative. Bref, si quelqu'un pourrait me sortir de ce gouffre, je lui en serait TRÈS reconnaissant. :rolleyes:

P.S. Mon but n'est pas de vous faire faire le code à ma place, bien que des exemples de code seraient plus compréhensible pour moi, c'est pour ça que je n'ai donné qu'un exemple fictif, mais qui est à 2 poils près ce que je veux réaliser. :)

Encore merci d'avance à vous tous,
Myst3ry alias Maxime. Je suis du Québec donc désolé d'avance pour les heures où j'écrirai/répondrai à vos messages! :eek:
 

Dormeur74

XLDnaute Occasionnel
Re : Recherche VBA à plusieurs critères et plusieurs retours

Je n'ai utilisé que la feuille de données pour simplifier moi aussi. A partir de cet exemple, tu devrais pouvoir adapter.
Les données extraites sont dans le tableau.
 

Pièces jointes

  • Classeur1.xls
    25.5 KB · Affichages: 107
  • Classeur1.xls
    25.5 KB · Affichages: 100
  • Classeur1.xls
    25.5 KB · Affichages: 84
Dernière édition:

Theze

XLDnaute Occasionnel
Re : Recherche VBA à plusieurs critères et plusieurs retours

Bonjour,

Dans le même esprit que Dormeur74, retourne les valeurs des colonnes A, B et C quand les critères sont vrais :
Code:
Sub Test()

    Dim Tablo() As Long
    Dim I As Long
    
    'le numéro de la colonne est celui où se fait la recherche de Valeur1
    'soit dans ton exemple la colonne 4 et donc, la Valeur2 se fera sur la colonne de droite
    Tablo = Chercher(32, 66, 4)
    
    'résultats dans la fenêtre d'exécution
    For I = 1 To UBound(Tablo, 2)
    
        Debug.Print Tablo(1, I) & " - " & Tablo(2, I) & " - " & Tablo(3, I)
        
    Next I

End Sub

Function Chercher(Valeur1 As Long, Valeur2 As Long, NumCol As Integer) As Long()

    Dim Tbl() As Long
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim I As Long
    
    'défini la plage de recherche sur la colonne
    With ActiveSheet
    
        Set Plage = .Range(.Cells(2, NumCol), .Cells(.Rows.Count, NumCol).End(xlUp))
    
    End With
    
    'effectue une recherche exacte
    Set Cel = Plage.Find(Valeur1, , xlValues, xlWhole)
    
    'si trouvé
    If Not Cel Is Nothing Then
        
        'mémorise l'adresse pour la fin de boucle
        Adr = Cel.Address
        
        Do
                
            'si la cellule à droite est identique à Valeur2
            If Cel.Offset(, 1) = Valeur2 Then
            
                'redimensionne le tableau sur 3 colonnes et
                'récupère les valeurs situées en colonnes A, B et C
                I = I + 1
                ReDim Preserve Tbl(1 To 3, 1 To I)
                Tbl(1, I) = ActiveSheet.Cells(Cel.Row, 1) 'colonne A, CodeNumérique
                Tbl(2, I) = ActiveSheet.Cells(Cel.Row, 2) 'colonne B, ValeurBrut
                Tbl(3, I) = ActiveSheet.Cells(Cel.Row, 3) 'colonne C, ValeurPoint
                
            End If
            
            'continu la recherche
            Set Cel = Plage.FindNext(Cel)
            
        'fin quand on est revenu au début
        Loop While Adr <> Cel.Address
        
    End If
    
    'passe le tableau à la fonction
    Chercher = Tbl

End Function

Hervé.
 

Myst3ry

XLDnaute Nouveau
Re : Recherche VBA à plusieurs critères et plusieurs retours

Bonjour à vous trois,

Comment dire....WOW! Je savais que ce forum était rempli de bonnes choses et de gens bien, mais cette fois-ci chapeau, vous avez toute ma gratitude. Dormeur74, simple et efficace comme méthode pour une recherche à 2 ou plusieurs critères! Hervé, tu as fait presque le total du travail à ma place, ce code est magnifique, il ne me reste qu'à bucher dessus afin de bien le comprendre, le maitriser et ainsi être capable de l'adapter à plusieurs situation! Avec les commentaires je devrais y arriver. Finalement, Bebere, ta petite macro ajouté est très inspirante!

Sur ce je vais tester et comprendre vos code et je vous reviens si j'ai besoin d'aide pour la compréhension.

Merci encore,
Maxime
 

Myst3ry

XLDnaute Nouveau
Re : Recherche VBA à plusieurs critères et plusieurs retours

Bonjour à tous,

Je viens de travailler sur mon projet, mais il semble que juste a partie de test de macro (partie UBound) n'affiche rien. Je ne connaissais pas cette fonction donc j'ai regardé de la documentation, mais il ne semble pourtant rien manqué. J'ai essayer d'intégrer un MsgBox mais j'obtiens un bug dans la compatibilité des variables...Si vous avez une piste ;)

Je continue à work la dessus! Encore merci!

Maxime
 

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 578
Membres
111 205
dernier inscrit
Adrien25