OVH Cloud OVH Cloud

fonction recherche a travers toutes les feuilles d'un classeur

7 réponses
Avatar
sharpegreg
Hello,

j'utilise le code suivant pour rechercher "monnom" dans une feuille

If Cells.Find(What:="monnom", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False).Select = true then

msgbox("trouve : " & cells)

end if

seulement si il n'existe pas, la macro plante et s'arrete. Que faut il
changer pour que la macro ignore le cas lorsque la valeur n'est pas presente.

Par ailleurs il faudrait que la macro s'execute pour dans toutes les
feuilles du classeur ? quel est le code ? for x next ???

d'avance merci

Greg

7 réponses

Avatar
Daniel
Bonjour.
Quand la recherche est infructueuse, la plage que tu veux sélecter n'existe
pas, d'où l'erreur; mets :

If Not Cells.Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse) Is Nothing Then

MsgBox ("trouve : " & Cells)

End If

Cordialement.
Daniel
"sharpegreg" a écrit dans le message
de news:

Hello,

j'utilise le code suivant pour rechercher "monnom" dans une feuille

If Cells.Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Select = true then

msgbox("trouve : " & cells)

end if

seulement si il n'existe pas, la macro plante et s'arrete. Que faut il
changer pour que la macro ignore le cas lorsque la valeur n'est pas
presente.

Par ailleurs il faudrait que la macro s'execute pour dans toutes les
feuilles du classeur ? quel est le code ? for x next ???

d'avance merci

Greg


Avatar
ThierryP
bonjour sharpegreg,

Avant ta recherche, tu mets un on error resume next, que tu peux
réinitialiser par on error goto 0
for i = 1 to workbooks.count
TaMacro
next


Hello,

j'utilise le code suivant pour rechercher "monnom" dans une feuille

If Cells.Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Select = true then

msgbox("trouve : " & cells)

end if

seulement si il n'existe pas, la macro plante et s'arrete. Que faut il
changer pour que la macro ignore le cas lorsque la valeur n'est pas presente.

Par ailleurs il faudrait que la macro s'execute pour dans toutes les
feuilles du classeur ? quel est le code ? for x next ???

d'avance merci

Greg


--
@+ thierryp
-----------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet - G. Courteline

Avatar
papou
Bonjour
For i = 1 To Sheets.Count
With Worksheets(i).Cells
Set c = .Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
MsgBox "trouve en : " & c.Address & " sur " & Worksheets(i).Name
Else
MsgBox "non trouvé sur " & Worksheets(i).Name
End If
End With
Next i
Set c = Nothing

Cordialement
Pascal
Avatar
JB
Bonjour,

Pour rechercher dans une feuille, 2 approches:

http://cjoint.com/?dDmlcZzrUW

Sub cherche()
nomCherche = InputBox("Nom cherché? ")
On Error Resume Next
Err = 0
Range("A2:A14").Find(What:=nomCherche, LookIn:=xlValues).Select
If Err = 0 Then
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
Else
MsgBox "Pas trouvé"
End If
On Error GoTo 0
End Sub

Sub cherche2()
nomCherche = InputBox("Nom cherché? ")
Set result = Range("A2:A14").Find(What:=nomCherche,
LookIn:=xlValues)
If result Is Nothing Then
MsgBox "Non trouvé"
Else
Range(result, result.End(xlToRight)).Select
End If
End Sub

Pour toutes les feuilles:

For s=1 To Sheets.count
Sheets(i).Activate
....
Next s


Cordialement JB
Avatar
sharpegreg
Merci


Bonjour
For i = 1 To Sheets.Count
With Worksheets(i).Cells
Set c = .Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse)
If Not c Is Nothing Then
MsgBox "trouve en : " & c.Address & " sur " & Worksheets(i).Name
Else
MsgBox "non trouvé sur " & Worksheets(i).Name
End If
End With
Next i
Set c = Nothing

Cordialement
Pascal





Avatar
lSteph
Bonjour,
A condition de limiter à une taille de plage raisonnable (ici a1:m500) et à
ce titre en fonction du nombre
de cellules susceptibles de contenir la chaîne recherchée pour pouvoir
afficher résultat dans un msgbox:

Sub testsearch()
Dim ltxt As String, c As Range, _
sh As Worksheet, mess As String
ltxt = InputBox("texte à chercher: ")
For Each sh In ActiveWorkbook.Worksheets
mess = mess & vbCrLf & sh.Name & ":" & vbCrLf
For Each c In sh.Range("a1:m500").Cells
If Not IsEmpty(c) Then
If c.Text Like "*" & ltxt & "*" Then
mess = mess & " " & c.Address
End If
End If
Next
Next
MsgBox mess

End Sub

'lSteph

"sharpegreg" a écrit dans le message
de news:

Hello,

j'utilise le code suivant pour rechercher "monnom" dans une feuille

If Cells.Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Select = true then

msgbox("trouve : " & cells)

end if

seulement si il n'existe pas, la macro plante et s'arrete. Que faut il
changer pour que la macro ignore le cas lorsque la valeur n'est pas
presente.

Par ailleurs il faudrait que la macro s'execute pour dans toutes les
feuilles du classeur ? quel est le code ? for x next ???

d'avance merci

Greg


Avatar
michdenis
Bonjour sharpegreg,

Dans l'aide d'excel, il y a ce paragraphe sur la méthode Find d'un objet range :

Notes
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode.
Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont
utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a
pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute
ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.


Dans ton cas, selon le contenu de ta feuille de calcul, ce serait plus prudent d'utiliser ceci pour ces paramètres :
LookIn:=xlValues et LookAt:=xlPart


Salutations!






"sharpegreg" a écrit dans le message de news:


Hello,

j'utilise le code suivant pour rechercher "monnom" dans une feuille

If Cells.Find(What:="monnom", After:¬tiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:úlse).Select = true then

msgbox("trouve : " & cells)

end if

seulement si il n'existe pas, la macro plante et s'arrete. Que faut il
changer pour que la macro ignore le cas lorsque la valeur n'est pas presente.

Par ailleurs il faudrait que la macro s'execute pour dans toutes les
feuilles du classeur ? quel est le code ? for x next ???

d'avance merci

Greg