Boucle sur une recherche à 2 critères [Résolu]

Signaler
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021
-
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
-
Bonjour à tous,

je voulais avoir si vous avez déjà réussi à faire une boucle sur une recherche à 2 critères ?

J'ai beau avoir posé mon problème par écrit mais je n'arrive pas à le mettre en forme ...

Par exemple :

Valeur Cherché en A1 (par exemple : AM1)
Si cette valeur est trouvé dans la plage B:B alors;
Cherche la valeur se trouvant sur la même ligne en plage C:C. Si la valeur correspond à "02/2021" alors;
"VRAI" sinon;
Valeur suivante dans la plage B:B jusqu'à plus de valeur correspondant à "AM1" en plage B:B.

est il possible de m'aider ?

bonne journée,

Cordialement

11 réponses

Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Essaye ça
Function RechercheGrutz(Plage As Range, Critere1 As String, Critere2 As String) As Date

Dim tableau As Variant
tableau = Plage.Value
Dim b, c, d As Integer

b = LBound(tableau, 2) 'dimension de la première colonne E dans le tableau
c = b + 1 'dimension de la deuxième colonne
d = UBound(tableau, 2) 'dimension de la troisième colonne


For i = LBound(tableau, 1) To UBound(tableau, 1) 'i du début à la fin du tableau
    If tableau(i, b) = Critere1 Then 'si dans le tableau en colonne 1 = critère 1
    'si on trouve le critère 1 dans la colonne 1, on regarde la valeur de la même ligne en colone 2
        If tableau(i, c) = Critere2 Then 'si dans le tableau en colonne 2 = critère 2
            'on retourne la valeur de la troisième colonne
            RechercheGrutz = tableau(i, d)
            Exit Function
        End If
    End If
    
Next

End Function


Avec
=RechercheGrutz($D$2:$F$7;A2;B2)
dans C2 et
=RechercheGrutz($D$2:$F$7;A3;B3)
dans C3

Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Merci beaucoup ça fonctionne très bien :)
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Bonjour

T’aider oui, à condition de ne pas paraître agaçant et impatient en postant ta question toutes les 3 minutes

https://forums.commentcamarche.net/forum/affich-37109514-boucle-sur-une-recherche-a-2-criteres
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Oui je viens de voir que ça l'avait mis 3 fois alors que les deux premières il y a eu une erreur ... je viens de m'en apercevoir et j'ai pas trouvé ou supprimer les demandes
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
tu n'as pas trouvé non plus comment y ajouter un commentaire pour expliquer la situation?
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021
>
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021

Je ne suis pas un habitué du forum... je cherchais en vain un bouton "supprimer"
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
bonjour,
cela me fait plutôt penser à une boucle imbriquée dans une autre.
bien que tu ne mentionnes qu'une seule fois "valeur suivante"
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
il serait préférable de t'expliquer en français.
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Bonjour,
Il est possible qu'il y est plus de 6 fois la même valeur "AM1" en plage B:B sur le fichier mais toutes à des dates différentes "02 2021"; "06 2021" ....
donc valeurs suivante jusqu'a ce qu'il est epuisé toute les valeurs "AM1"
merci,
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867 >
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

montre déjà ton code avec une boucle.
tiens compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Un modérateur viendra s’en charger
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
En utilisant un tableau (voir un tuto ici si tu ne connais pas https://silkyroad.developpez.com/vba/tableaux/ )

Soit la feuille suivante


Dans un module la fonction suivante
Function RechercheGrutz(Critere1 As String, Critere2 As String) As Boolean

Dim tableau As Variant
tableau = Range("B1:C21").Value
Dim b, c As Integer

b = LBound(tableau, 2) 'dimension de la colonne B dans le tableau
c = UBound(tableau, 2) 'dimension de la colonne C

For i = LBound(tableau, 1) To UBound(tableau, 1)
    If tableau(i, b) = Critere1 Then
    'si on trouve le critère 1 dans la colonne b, on regarde la valeur de la même ligne en c
        If tableau(i, c) = Critere2 Then
            RechercheGrutz = True
            Exit Function
        End If
    End If
    
Next

End Function


Et dans la cellule E2 la formule
=RechercheGrutz(A1;A2)

Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Bonjour,

merci beaucoup pour cette réponse, J'ai compris la macro+ formule, elle dit vrai en E2 si elle trouve l'association des deux (A1 et A2)

C'est une première piste pour moi, mais encore assez loin de ce que je souhaitais faire.

je joins un imp ecran pour que cela soit plus complet :



Encore merci :)
Messages postés
15994
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
12 juin 2021
867
il suffit alors de programmer deux boucles imbriquées,
une qui parcourt les colonnes A-B, l'autre qui parcourt les colonnes E-F.

je pense, par ailleurs, que c'est facilement réalisable sans programmation, en ajoutant deux colonnes, une qui combine A et B, l'autre qui combine E et F, et en utilisant les fonctions classiques de Excel.
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Tu veux que ça renvoies la valeur de la colonne G, c'est ça?
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Oui exactement :) . Comme un recherche V ou un equiv index sauf que ces deux formules renvoient à la première valeur trouvée alors que dans mon tableau les valeurs en "E" peuvent revenir plusieurs fois.
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Dans la macro que je t’ai proposé, au lieu de mettre 2 colonnes dans le tableau, tu en mets 3 et à la place de renvoyer True, tu prends la valeur de la 3ème dimension de la ligne
Messages postés
18
Date d'inscription
mercredi 3 février 2016
Statut
Membre
Dernière intervention
3 mars 2021

Merci,
C'est ce que j'avais essayé de faire :

Function RechercheGrutz(Critere1 As String, Critere2 As String, Critere3 As String) As Boolean

Dim tableau As Variant
tableau = Range("E2:G21").Value
Dim b, c, d As Integer

b = LBound(tableau, 2) 'dimension de la colonne E dans le tableau (1)
c = UBound(tableau, 2) - 1 'dimension de la colonne F (2)
d = UBound(tableau, 2)  'dimension de la colonne G (3)

For i = LBound(tableau, 1) To UBound(tableau, 1) 'i = de 1 à 20
    If tableau(i, b) = Critere1 Then 'si dans le tableau de 1 à 20 en colonne 1 = critère 1
    'si on trouve le critère 1 dans la colonne e, on regarde la valeur de la même ligne en f
        If tableau(i, c) = Critere2 Then 'si dans le tableau de 1 à 20 en colonne 2 = critère 2
    'si on trouve le critère 2 dans la colonne f, on regarde la valeur de la même ligne en g
        If tableau(i, d) = Critere3 Then 'si dans le tableau de 1 à 20 en colonne 3 = critère 3
            RechercheGrutz = Critere3 
            Exit Function
        End If
    End If
    
Next

End Function


Mais cela ne renvoie pas la colonne G...
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
Je ne comprends pas ce que vient faire le 3eme critère en paramètre.

Pour moi c'est la valeur que tu veux découvrir, si tu l'imposes en entrée, c'est que tu la connais déjà donc ta recherche ne sert à rien.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
16024
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 juin 2021
708
De rien