EXCEl/VBA ET FIND

Bonjour,

Est il possible d'utiliser find avec plusieurs variables ?

un truc du genre Find(What:=variable1&variable2, ....).

Merci

-- 20 Fév 2010, 17:31 --

en gros pour éviter ca :

x1 = plage.Find(What:=c1, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

x2 = plage.Find(What:=c2, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

x3 = plage.Find(What:=c3, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

x4 = plage.Find(What:=c4, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

x5 = plage.Find(What:=c5, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

pour simplifier le code en une ligne du genre

x1 = plage.Find(What:=c1,c2,c3,c4,c5, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

-- 20 Fév 2010, 18:11 --

et mon deuxième problème :

problème lorsque je recherche c1

c1="?"
x1 = plage.Find(What:=c1, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

je recherche le caractère point d'interrogation dans une plage, mais ca me renvoie l'adresse d'une cellule ou il n'y a pas de point d'interrogation. Donc comment faire pour recherche le caractère "?". en gros what:="?" doit renvoyer toutes les cellules je penses..

merci d'avance

Bonjour ketamacanna,

Et si tu fait un :

x1 = plage.Find(What:=c1 & c2 & c3 & c4 & c5, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

ou un

x1 = plage.Find(What:=c1 & c2 & c3 & c4 & c5, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

ça ne marche pas ?

Pour ta 2è question, si tu veux chercher un "?", utilise la syntaxe suivante :

c1="~?"

(le ~ étant obtenu avec Alt Gr + é)

no ca ne marche pas le variable 1 & variable 2 etc...

Ok pour le tilde, quand faut il utiliser ce caractère?

si j'avais voulu recherché "*" ma variable doit être ainsi "~*" ??

re,

ketamacanna a écrit :

no ca ne marche pas le variable 1 & variable 2 etc...

Que veux-tu que le code fasse ? Peux-tu donner un exemple concret (fichier ?) de ce que tu veux faire ?
ketamacanna a écrit :

Ok pour le tilde, quand faut il utiliser ce caractère?

si j'avais voulu recherché "*" ma variable doit être ainsi "~*" ??

T'as tout compris !

Pour plus d'infos, tape "caractère générique" dans l'aide d'excel.

merci pour ton aide.

En gros je voudrais tester si des caractères existes dans ma plage de cellule

par exemple :

c1 = "~?"

c2 = "~*"

et au lieu d'avoir le code suivant

x1 = plage.Find(What:=c1, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address
x2 = plage.Find(What:=c2, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

If Not x1 = "" Then
MsgBox "caractère c1 trouvé"
Elseif Not x2 = "" Then
MsgBox "caractère c2 trouvé"
Else
MsgBox "aucun caractere trouvé"
End If

je voudrai un code du genre :

x1 = plage.Find(What:=c1 & c2, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns).Address

If Not x1 = "" Then
MsgBox "caractère c1 ou c2 trouvé"
Else
MsgBox "aucun caractere trouvé"
End If

Ah ok. Je ne sais pas si c'est possible avec la méthode Find. Essaie avec quelque chose comme ça :

    Set plage = [a1:a10]
    For Each cel In plage
        If cel Like "*[*]*" Or cel Like "*[?]*" Then
            MsgBox "caractère * ou ? trouvé en " & cel.Address
        Else
            MsgBox "aucun caractere trouvé en " & cel.Address
        End If
    Next cel

Sachant que si tu veux chercher un "*" ou "?" ou "#", il faut l'entourer de crochets.

Plage à adapter bien sûr.

ouai c'est presque ca. Sauf que ca fait cellule par cellule...

Il y a moyen que ca recherche directement sur toute les cellules ?

If cel Like "*[*]*" Or cel Like "*[?]*" Then

msgbox "trouvé"

else

msgox "pas trouvé"

Comme ça peut-être ?

    Set plage = [a1:a10]
    valeur = 0
    For Each cel In plage
        If cel Like "*[*]*" Or cel Like "*[?]*" Then valeur = valeur + 1
    Next cel
    MsgBox IIf(valeur = 0, "pas trouvé", "trouvé")

voilà j'étais parti sur cette piste merci c'est ce que je recherchai.

J'ai deux petites questions :

les crochets dans set plage c'est pour spécifier qu'on est dans la feuille ?

Est-ce que :

Dim ws As Worksheet

Set ws = Worksheets("Fournisseurs")

Set plage = ws.Range("B1:B31")

équivaut

Set plage = [B1:B31]

Et enfin, est ce que si j'ai :

cel1 = ws.Cells(1,1).value

je peux utiliser

If cel1 Like "*[*]*" Or cel Like "*[?]*" Then

msgbox "trouvé"

else

msgbox "pas trouvé"

endif

merci encore

ketamacanna a écrit :

les crochets dans set plage c'est pour spécifier qu'on est dans la feuille ?

Pas tout à fait.

En fait un [A1:A10] équivaut à un range("A1:A10"), j'utilise les crochets juste pour raccourcir !

Donc ton

Set plage = ws.Range("B1:B31")

équivaut à

Set plage = ws.[B1:B31]
ketamacanna a écrit :

Et enfin, est ce que si j'ai :

cel1 = ws.Cells(1,1).value

je peux utiliser

If cel1 Like "*[*]*" Or cel Like "*[?]*" Then

msgbox "trouvé"

else

msgbox "pas trouvé"

endif

Oui tout à fait, l'opérateur "Like" permet de comparer 2 chaînes de caractères.

ok merci pour ton aide

Rechercher des sujets similaires à "vba find"