Rechercher : dans
Par :

VB Excel moteur de recherche dans classeur

Dernière réponse le 10 fév 2009 à 15:56:46 Ludivine, le 8 fév 2009 à 18:07:03 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « VB Excel moteur de recherche dans classeur » dans :
[vi/vim] Rechercher un mot VoirAfin de rechercher un mot sous Vi/Vim, il suffit de taper "/" ou "?", suivi du mot à rechercher afin de lancer la recherche respectivement vers le bas ou vers le haut. Une pression sur la touche "n" permet d'aller directement à l'occurence...
[IE 7 et 8] Modifier le moteur de recherche par défaut VoirPour Internet Explorer 7 Ouvrez Internet Explorer. Faites un clic sur la flèche dans la barre de recherche en haut à droite. Cliquez sur "Modifier les paramètres de recherche par défaut". Vous pouvez : Définir un moteur de recherche...
[Moteurs] Google ... et les autres VoirTout le monde connait Google comme étant LE moteur de recherche. Mais ce n'est pas le seul ! Voici une petite liste de quelques autres moteurs de recherche qui peuvent éventuellement vous être utiles. A compléter...   Moteurs généralistes : ...
Télécharger Ms Word Excel Cracker VoirMs Word Excel Craker est une application permettant de retrouver les mots de passe perdus ou oubliés pour les fichiers.xls ou .doc créés avec Microsoft Office 97, 2000, 2003, XP ou autres programmes Word ou Excel compatibles. Cette application vous...
PHP - Créer un moteur de recherche VoirIdée générale Le moteur de recherche ci-dessous ne correspond qu'à une idée possible de moteur de recherche simple, ne gérant qu'un seul mot clé. Le concept du fonctionnement de ce moteur est de créer une base de donnée contenant les mots clés de...
Web - Moteur de recherche VoirIl existe une énorme quantité d'informations sur Internet (plusieurs millions ou milliards de documents), et ces informations sont pour la plupart renouvelées quotidiennement. Le moteur de recherche est un élément indispensable pour s'y...

1

gbinforme, le 8 fév 2009 à 23:24:21

Bonjour

Ce que tu veux faire est la procédure effectuée par ctrl + f et rechercher tout et elle est relativement rapide.

Au lieu de sélectionner toutes les occurrences (activate) au fur et à mesure de la recherche, il vaut mieux les enregistrer comme fait la fonction "recherche" pour les lister ensuite mais tout dépend de l'utilisation que tu veux faire de ta macro
Toujours zen

Répondre à gbinforme

2

lulu, le 9 fév 2009 à 15:22:55

Bonjour gbinforme,

merci pour ta réponse.

En fait, voici précisément ce que je souhaite faire:
- chercher une valeur saisie dans une zone de texte dans le classeur
- ouvrir l'onglet où se trouve cette valeur.
- si c'est le bon feuillet (c'est le user qui dira si c'est ok ou non), ouvrir le userform TEST
- si c'est le mauvais feuillet (c'est le user qui dira si c'est ok ou non), continuer la recherche, ouvrir le feuillet...
- après avec mon userform, je vais faire pleins de choses.

Qu'en penses-tu?

Répondre à lulu

3

gbinforme, le 9 fév 2009 à 17:17:48

Bonjour

Qu'en penses-tu?

Je n'ai pas ton classeur devant les yeux mais ce que tu veux réaliser le parait tout à fait possible.

Tu pourrais même faire tes recherches avec ton userform sans avoir à ouvrir tes onglets et en affichant le résultat dans le formulaire.
Toujours zen

Répondre à gbinforme

4

Ludivine, le 9 fév 2009 à 17:27:57

Merci pour ta réponse,

Effectivement, c'est une idée intéressante. Cela évite de se ballader dans les onglets.

Mais ma difficulté, c'est que je suis bloquée dès la première étape: rechercher dans le classeur entier.

Je n'arrive qu'à rechercher dans une feuille. Ou alors, il faut que je fasse une boucle pour chercher dans toutes les feuilles une par une, mais ça va mouliner. Pourtant dans Excel, il est possible avec ctrl F de faire une recherche dans l'ensemble du classeur, donc ça doit être possible de ne pas passer par une boucle sur les feuillets non? Mais le code fournit par l'enregistrement automatique de macro ne m'aide pas.
J'ai cherché dans les forums, certains proposent des codes de plusieurs pages alors que la solution est relativement simple je pense, d'autres n'ont finalement pas aboutis...

Répondre à Ludivine

5

gbinforme, le 9 fév 2009 à 21:30:58
  • +1

Bonjour

Pour rechercher dans un classeur entier avec cette macro tu peux vérifier que le temps de comptage des résultats n'est pas prohibitif.

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

Répondre à gbinforme

6

Ludivine50, le 10 fév 2009 à 12:05:02

Bonjour gbinforme!
Je viens de tester et c'est une excellente base de travail pour ce que je souhaite réaliser! Et en plus, ton code est très compréhensible! Je suis déjà en train de l'adapter à mon traitement.
Je te remercies, tu m'as fournie la clé pour travailler sur ce traitement.
Merci encore, et je te souhaite une bonne journée!

Répondre à Ludivine50

7

Ludivine50, le 10 fév 2009 à 12:13:15

Gbinforme, je ne peux pas passer en résolu car entre-temps je suis devenue membre.
Peux-tu le faire à ma place?
Merci

Répondre à Ludivine50

8

 gbinforme, le 10 fév 2009 à 15:56:46

Bonjour

Content de voir que cela te permet de continuer : il ne faut souvent pas chercher trop compliqué car le plus simple est en général le plus efficace.
Toujours zen

Répondre à gbinforme