|
|
|
|
Bonjour à tous,
Je viens vous demander conseil. Je cherche à faire une macro qui cherche dans l'ensemble du classeur Excel une valeur saisie dans une zone de texte.
Après recherche, la seule solution que j'ai trouvée serait de faire une boucle pour faire défiler les feuillets, et rechercher dans chaque feuillet la valeur saisie. Mais ce classeur Excel contient de nombreux feuillets, et ça va mouliner!!
J'ai essayé avec l'enregistrement auto de macro en testant une recherche sur l'ensemble du classeur, mais le code qu'il me fournit est du type :
Sheets("feuilleA").Select
Cells.Find(What:="truc", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Sheets("feuilleB").Select
Cells.FindNext(After:=ActiveCell).Activate
Ce qui revient à faire une boucle et à défiler sur chaque feuillet...
Si quelqu'un a une solution plus efficace, je serais ravie de la connaître!
Merci à tous
Configuration: Excel 2003
Bonjour
|
Répondre à gbinforme
|
Bonjour
Public Sub chercher(rech As String) 'recherche d'une chaine
Dim sel As Object ' cellule trouvée
Dim c As Integer ' colonne
Dim f As Integer ' feuille
Dim l As Long ' ligne
Dim n As Integer ' éléments trouvés
n = 0
For f = 1 To Sheets.Count ' boucle feuilles
With Sheets(f)
l = 1: c = 1
Do ' recherche
Set sel = .Cells.Find(What:=rech, after:=.Cells(l, c), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If sel Is Nothing Then Exit Do
If sel.Column <= c And sel.Row <= l Then Exit Do
c = sel.Column
l = sel.Row
n = n + 1 ' élément trouvé : traitement
Loop
End With
Next f
MsgBox n & " éléments trouvés"
End Sub
Pour tester, tu peux remplacer : "rech As String" par espace et "rech" par un mot à chercher Ensuite à toi de rajouter le traitement que tu veux à chaque élément trouvé et la macro peut être appelée dans ton formulaire en mettant les variables en "Public". Toujours zen |
Bonjour gbinforme!
|