Macro de recherche

Résolu/Fermé
domimeca Messages postés 35 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 16 décembre 2017 - 24 oct. 2010 à 18:17
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 24 oct. 2010 à 21:34
Bonjour,j'aimerais grâce à une macro (vba, excel 2003), rechercher et ouvrir une feuille donnée dans mon classeur. Ceci à partir de ma feuille1(page d'accueil). Toutes mes feuilles sont nommée par un nombre qui correspond à la cellule C1 de chacune d'elle. L'idée est de mettre le nombre 6359 dans la cellule A3 de ma page d'accueil, et l'application ouvrira la feuille où C1=6359, (ou la feuille 6359 qui est la même). Plusieurs essais de plusieurs codes trouvés sur le net furent sans succés. Le meilleur est celui ci:

Sub Recherche()
For Each Sh In Worksheets
With Sh
a = Sh.Name

Set C = .Cells.Find(What:=Sheets("Feuil1").Range("A1").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)

If Not C Is Nothing Then
firstAddress = C.Address
Do
Sh.Activate
C.Activate
Set C = .Cells.FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
End With
Next
End Sub
il selectionne bien ma feuille
mais : erreur 91 variable objet ou variable de bloc With non definie
il surligne
Loop While Not C Is Nothing And C.Address <> firstAddress

Aidez moi.
Merci à tous


A voir également:

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
24 oct. 2010 à 21:34
Bonsoir

Pourquoi faire si compliqué ? Copie ce code dans ta feuille menu (clic droit sur l'onglet, visualiser le code), il devrait suffire :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet
  If Intersect(Range("A3"), Target) Is Nothing Then Exit Sub
  For Each sh In Worksheets
      If sh.Range("C1").Value = Target.Value Then
         sh.Activate
         sh.Range("A1").Activate
      End If
  Next sh
End Sub

Patrice
0