Macro recherche dans une base de donnée

Marjo67

XLDnaute Nouveau
Bonjour à tous,

J'ai un petit souci avec une macro dans une base de donnée que j'utilise quotidiennement sur mon lieu de travail sur Excel 2002.

C'est une base de donnée d'environ une trentaine d'onglet. J'ai voulu rendre plus accessible cette base en créant une macro de recherche qui permette de trouver l'info recherchée immédiatement.
J'ai donc créé le bouton "mot à rechercher" et le projet VBA que voici :

Option Explicit

Sub RechercheEtCouleur()
Dim mot As String, reponse As Integer
Dim oldCel As String

oldCel = Selection.Address 'pour se repositionner ensuite
mot = InputBox(" Rechercher le mot ?")

ActiveSheet.Select 'repréciser où on est
Range("A1").Select 'se placer en début de recherche
oups: ' va nous permettre de boucler

On Error GoTo fin 'si mot n'existe pas = erreur

Cells.Find(What:=mot, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
'effectue la recherche

With ActiveCell.Characters(Start:=InStr(1, Selection, Left(mot, 1), 1), Length:=Len(mot))
.Font.ColorIndex = 3 'colorie en rouge
.Font.Bold = True 'met en gras
End With

reponse = MsgBox("Poursuivre recherche", vbYesNo) 'nécessaire aussi pour stopper la recherche

If reponse = 6 Then 'si le bouton yes est utilisé
Selection.Font.ColorIndex = 0 'remise de la couleur noire
Selection.Font.Bold = False 'enlever le gras
GoTo oups 'on boucle
Else
Selection.Font.ColorIndex = 0 'idem plus haut si le bouton non est choisi
Selection.Font.Bold = False
Range(oldCel).Select 'on reprend notre place
Exit Sub 'on sort lorsque l'on presse le bouton non
End If

fin:
MsgBox "Mot non trouvé"
Range(oldCel).Select 'on reprend notre place
End Sub


Et donc le problème étant que la macro ne recouvre pas tous les onglets et le résultat et à chaque fois "mot non trouvé", car il reste sur la première page de mon document. Quand je passe par "Outils", "Macro", je sélectionne pourtant bien "Tout le classeur".

Je n'arrive pas à trouver l'erreur dans mon projet.

En espèrant avoir été le plus claire possible, je vous remercie par avance pour l'aide que vous pourrez m'apporter.

Cordialement.
Marjo67
 

pierrejean

XLDnaute Barbatruc
Re : Macro recherche dans une base de donnée

Bonjour Marjo67

Teste ceci
NB: à adapter pour Couleur , gras etc ...

Code:
Sub Recherche()
mot = InputBox(" Rechercher le mot ?")
For Each sh In Sheets
 Set c = sh.Cells.Find(mot, LookIn:=xlValues, lookat:=xlWhole)
 If Not c Is Nothing Then
   firstAddress = c.Address
     Do
      MsgBox ("Trouvé dans " & sh.Name & " dans la cellule " & c.Address)
       Set c = sh.Cells.FindNext(c)
     Loop While Not c Is Nothing And c.Address <> firstAddress
 End If
Next
End Sub
 

Marjo67

XLDnaute Nouveau
Re : Macro recherche dans une base de donnée

Merci pour votre rapidité.

Alors j'ai testé et j'ai un message d'erreur qui apparait : Erreur d'exécution '28' - Espace pile insuffisant.

Par contre, je ne suis pas sûre de l'avoir bien retranscrite avec les couleurs et gras, la vôtre étant beaucoup plus courte que la mienne.

Du coup, je recherche toujours une formule pour recouvrir mon document en entier. Merci encore.
 

camarchepas

XLDnaute Barbatruc
Re : Macro recherche dans une base de donnée

Bonjour à tous,

En décomposant, voici déjà une boucle te permettant de parcourir l'ensemble des onglets du classeur

Code:
Sub balaye()
Dim Onglet  As Worksheet

For Each Onglet In ThisWorkbook.Worksheets
 Worksheets(Onglet.Name).Activate
 MsgBox "Visite de la feuille " & Onglet.Name
Next

Si cela fonctionne , l'on verra pour la recherche
 

pierrejean

XLDnaute Barbatruc
Re : Macro recherche dans une base de donnée

Re

Il est possible que la zone de recherche soit à mieux preciser
cette ligne serait à modifier ainsi
Set c = sh.Cells.Find(mot, LookIn:=xlValues, lookat:=xlWhole)
Set c = sh.Range("..:..").Find(mot, LookIn:=xlValues, lookat:=xlWhole)
Sinon nous dire comment tu as adapté pour les gras et couleur
 

Marjo67

XLDnaute Nouveau
Re : Macro recherche dans une base de donnée

Bonjour,

camarchepas :
En testant, j'ai eu ce message d'erreur => Erreur de compilation : Instruction incorrecte à l'extérieure d'une procédure (sur le mot balaye)

pierrejean : Je souhaite en fait, surligner la cellule ou se trouve mon mot recherché (cellule qui ouvre un document extèrieur aux onglets) d'une autre couleur (peut importe laquelle) afin de la faire ressortir des couleurs déja existantes dans le document. Si celui-ci ne convient, passer au suivant, et ainsi de suite ... jusqu'à trouver le document recherché.

Merci pour vos réponses en tout cas.
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal