Recherchev sous VBA avec conditions multiples [Résolu]

Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
- - Dernière réponse : idieordeco
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
- 6 déc. 2007 à 09:29
Bonjour,

Bon.... vous allez me détester, j'ai encore une merde que j'essaie de résoudre depuis 5 heures.
Ma recherchev ne marche pas.
Le code en question ne met aucun résultat et au bout d'un moment "l'indice n'appartient pas à la sélection" (je zappe cette erreur avec un "on error resume next")

Le coupable :

(...)
Dim NbLignes As Long
Dim j As Long
'--Recherche du type d'OPCVM


    NbLignes = ActiveSheet.UsedRange.Rows.Count
    For j = NbLignes To 1 Step -1
                If Range("c" & j).Value "ACTION" And Range("d" & j).Value "Jule" Then
        Range("n" & j).Value = Application.WorksheetFunction.VLookup(Range("e" & j).Value, Worksheets("valeur").Range("A101:E150"), 3, False)
        End If        If Range("c" & j).Value "INTER" And Range("d" & j).Value "Jule" Then
        Range("n" & j).Value = Application.WorksheetFunction.VLookup(Range("e" & j).Value, Worksheets("valeur").Range("A51:E100"), 3, False)
        End If        If Range("c" & j).Value "EURO" And Range("d" & j).Value "Jule" Then
        Range("n" & j).Value = Application.WorksheetFunction.VLookup(Range("e" & j).Value, Worksheets("valeur").Range("A2:E50"), 3, False)
        End If
        Next j


(...)

Ma première impression, c'est que la valeur à rechercher dans la matrice fait merder le recherchev :
"VLookup(Range("e" & j).Value,(...)"
Probléme, cette valeur varie à chaque ligne (c'est un code pour être précis)
Cette même valeur se trouve dans la matrice dans une autre feuille colonne 1 et VBA doit me renvoyer la valeur de la colonne 3

Enfin, je suis vraiment au bout du rouleau avec mes recherchev de merde, pour une fois que j'étais fier de mon code... il merde.
Je précise que la personne trouvant la solution sera moutement remerciée

Bière qui roule bière qui mousse
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
3
Merci
Merci swan94 pour ta réponse !

Bon, je vais être honnète avec toi, ce que j'ai mis sur mon premier post marché mais la je n'obtenais pas de réponse car la base valeur de recherchev n'était sur le même classeur de la macro...
Donc du coup, pas de résultat...
Je suis vraiment désolé de t'avoir fait perdre ton temps

Pour ceux que ça interesse voila la macro et le principe :

Principe :
Faire une recherchev sur critères multiples de recheche
Dans mon cas il y a 2 conditions (qui varient sur chaque ligne) pour faire la rechechev et la rechechev recherche le résultat de la valeur cible (qui varie à chaque ligne) dans la base valeur mais que sur certaines certaines lignes (d'ou le range limité de la recherchev dans la base).
Si la macro ne trouve rien, elle ne m'est rien.
Attention la macro ne met pas de formule dans les cases mais le résultat de la formule.

La macro :

 NbLignes = ActiveSheet.UsedRange.Rows.Count
    For i = NbLignes To 1 Step -1


        If Range("c" & i).Value "PSG" And Range("d" & i).Value "PANCRATE" Then
        Range("k" & i).Value = Application.WorksheetFunction.VLookup(Range("e" & i).Value, Worksheets("valeur").Range("A101:E150"), 3, False)
        End If        If Range("c" & i).Value "MARSEILLE" And Range("d" & i).Value "FIORESE" Then
        Range("k" & i).Value = Application.WorksheetFunction.VLookup(Range("e" & i).Value, Worksheets("valeur").Range("A2:E50"), 3, False)
        End If        If Range("c" & i).Value "LYON" And Range("d" & i).Value "MADAR" Then
        Range("k" & i).Value = Application.WorksheetFunction.VLookup(Range("e" & i).Value, Worksheets("valeur").Range("A51:E100"), 3, False)
        End If
        Next i

Voila en espérant avoir été un peu clair,

Bière qui roule bière qui mousse

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de idieordeco
Messages postés
255
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
2 avril 2010
0
Merci
Salut as tu essayé sous cette forme :
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[7],Feuil2!R:R[1048575],1)"

?

bon je suis sous 2007 c'est pour ca qu'il y a de telles valeurs de lignes ;)

mais en reprenant et modifiant a tes besoins ca devrait marcher.

Swan94
===============Si la réponse vous convient, merci de l'accepter=================
Commenter la réponse de swan94
Messages postés
255
Date d'inscription
jeudi 29 juillet 2004
Statut
Membre
Dernière intervention
2 avril 2010
0
Merci
désolé là je ne comprends rien du tout

Swan94
===============Si la réponse vous convient, merci de l'accepter=================
Commenter la réponse de swan94
Messages postés
2
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
13 mars 2009
0
Merci
salut
je veux devolopper une application avec vb appliquer avec excel;et je veux le programme de recherche multicritères c'est à dire que j'ai des chekboxs à cocher et une fois que je clique sur le boutton de recherche j'obtient les resultats dans une nouvelle feuile excel
Commenter la réponse de hakima1985
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
0
Merci
Bière qui roule bière qui mousse
Commenter la réponse de idieordeco
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
0
Merci
Alors dans le détail, je me suis peut être mal expliqué.
Ce n'est pas une recherche multicritères (qu'est ce que c'est ??) mais multiconditions.
C'est à dire que si plusieurs conditions, présentes sur une même ligne, sont remplies, alors la recherchev s'effectue.

(bon, on est sur le forum débutant, alors désolé pour l'erreur)

Le code là haut est bon mais ne gère pas les erreurs de recherchev :
Si les deux conditions pour effectuer la recherche sont remplies et que la recherche ne donne pas de résultat (c'est à dire que la base valeur ne renvoit rien), la macro plante ! "erreur propriété blablabla"
Pour éviter cela, en début de procédure, faut mettre :
On Error Resume Next

Comme ça la macro mouline jusqu'au bout et renvoie les données qu'elle trouve


En espèrant avoir été plus clair
Commenter la réponse de idieordeco