Recherche sur plusieurs feuilles

  • Initiateur de la discussion Initiateur de la discussion paskito
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

paskito

Guest
Bonjour, après quelques jours de recherches, je me suis décidé à m'inscrire pour savoir si vous pouviez m'aider.

Je possède un Tableau excel. Dans ce tableau, il y'a plusieurs feuilles "Client". Dans ses feuilles se trouve plusieurs colonnes (Code client, nom, Date facture, montant...) et sur chaque ligne une facture.
Je souhaite mettre sur la première feuille de mon classeur excel, une fonction permettant de taper le numéro client ou le numéro de facture et tomber directement sur la feuille en question (j'ai essayé Control+F...mais bon, pas pratique)

Merci à vous pour, j'espère, votre aide.
 
Re : Recherche sur plusieurs feuilles

Bonjour paskito, bienvenue sur XLD,

Le texte (ou le nombre) recherché est supposé en cellule C5 de la 1ère feuille.

Dans le code de cette feuille (clic droit sur l'onglet et Visualise le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$5" Then 'cellule à adapter
  If Target <> "" Then
    Dim i As Integer, cel As Range
    For i = 2 To Worksheets.Count
      Set cel = Worksheets(i).Cells.Find(Target, , xlValues, xlWhole)
      If Not cel Is Nothing Then _
        Worksheets(i).Visible = True: Application.Goto cel: Exit Sub
    Next
    MsgBox "Pas trouvé..."
  End If
End If
End Sub
A+
 
Re : Recherche sur plusieurs feuilles

Bonjour paskito, le forum,

Cette macro dans Module1 est bien sûr plus compliquée (Alt+F11) :

Code:
Sub CelluleSuivante()
'touches de raccourci Ctrl+S
If ActiveCell = "" Then Exit Sub
Static cel As Range 'mémorisation
Dim r As Range, i As Integer
If cel Is Nothing Then Set cel = ActiveCell
If ActiveSheet.Name <> cel.Parent.Name Then Set cel = ActiveCell
If ActiveCell <> cel Then Set cel = ActiveCell
Set r = ActiveSheet.Cells.Find(cel, ActiveCell, xlValues, xlWhole)
If r.Address <> cel.Address Then
  r.Select
Else
  For i = ActiveSheet.Index + 1 To Worksheets.Count
    Set cel = Worksheets(i).Cells.Find(ActiveCell)
    If Not cel Is Nothing Then
      Worksheets(i).Visible = True
      Application.Goto cel
      Exit Sub
    End If
  Next
  MsgBox "Pas de cellule suivante..."
End If
End Sub
Elle recherche les cellules suivantes contenant la même valeur.

Elle se lance soit par Ctrl+S soit par double-clic, voir dans ThisWorkbook :

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
If Target <> "" Then Cancel = True: CelluleSuivante
End Sub
Fichier joint.

Edit : pour un 1er post sur XLD bravo, il mérite un Like !

A+
 

Pièces jointes

Dernière édition:
Re : Recherche sur plusieurs feuilles

Re,

c'est possible de clicker sur entrée au lieu de Crontrol S ou double click ?

Bien sûr, il suffit d'affecter la macro à chacune des 2 touches <Entrée> :

Code:
Private Sub Workbook_Activate()
Application.OnKey "~", "CelluleSuivante"
Application.OnKey "{ENTER}", "CelluleSuivante" 'pavé numérique
End Sub

Private Sub Workbook_Deactivate()
Application.OnKey "~"
Application.OnKey "{ENTER}"
End Sub
A placer dans ThisWorkbook.

Fichier (2).

Edit : cela dit il y aura recherche chaque fois qu'on validera une donnée.

Je crains que ce ne soit vite horripilant 🙂

A+
 

Pièces jointes

Dernière édition:
Re : Recherche sur plusieurs feuilles

Bonjour paskito, le forum,

Pour être complet voici une solution utilisant une macro paramétrée :

Code:
Sub CelluleSuivante()
Recherche xlNext
End Sub

Sub CellulePrecedente()
Recherche xlPrevious
End Sub

Sub Recherche(sens)
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
If IsError(ActiveCell) Then MsgBox "Recherche impossible...": Exit Sub
If ActiveCell = "" Then Exit Sub
Dim cel As Range, r As Range, i As Integer
Set cel = ActiveSheet.Cells.Find(ActiveCell, , xlValues, xlWhole, , sens)
If sens = xlNext And ActiveSheet.[A1] = cel Then Set cel = ActiveSheet.[A1]
Set r = ActiveSheet.Cells.Find(cel, ActiveCell, , , , sens)
If r.Address <> cel.Address Then
  r.Select
Else
  i = IIf(sens = xlNext, 1, -1)
  For i = ActiveSheet.Index + i To IIf(i = 1, Worksheets.Count, 1) Step i
    Set cel = Worksheets(i).Cells.Find(r, SearchDirection:=sens)
    If Not cel Is Nothing Then
      If sens = xlNext And Worksheets(i).[A1] = r Then Set cel = Worksheets(i).[A1]
      Worksheets(i).Visible = True
      Application.Goto cel
      Exit Sub
    End If
  Next
  MsgBox "Pas de cellule " & IIf(i, "suivante...", "précédente...")
End If
End Sub
Fichier (2).

Par rapport au fichier (1) précédent on notera le calcul de cel au début.

La différence apparaît si l'on part d'une cellule centrale, par exemple B9 en Feuil2.

Edit : ajouté If TypeName(ActiveSheet) <> "Worksheet" Then... au cas où il y a des graphiques.

A+
 

Pièces jointes

Dernière édition:
Re : Recherche sur plusieurs feuilles

Bonjour paskito, le forum,

La manière dont je déterminais la 1ère cellule (éventuellement en A1) n'était guère fameuse.

Voici le bon code :

Code:
Set cel = ActiveSheet.Cells.Find(ActiveCell, , xlValues, xlWhole, , xlPrevious)
If sens = xlNext Then Set cel = ActiveSheet.Cells.Find(cel, cel)
'-----
    Set cel = Worksheets(i).Cells.Find(r, SearchDirection:=xlPrevious)
    If Not cel Is Nothing Then
      If sens = xlNext Then Set cel = Worksheets(i).Cells.Find(r, cel)
Utilisez la macro du fichier (3).

A+
 

Pièces jointes

Re : Recherche sur plusieurs feuilles

Bonjour paskito, le forum,

Une solution avec mémorisation de la cellule initiale memcel.

On peut ainsi utiliser les caractères génériques * et ?.

Noter qu'ils ne fonctionnent pas sur les dates, alors qu'ils fonctionnent en manuel avec Ctrl+F.

Code:
Sub CelluleSuivante()
Recherche xlNext
End Sub

Sub CellulePrecedente()
Recherche xlPrevious
End Sub

Sub Recherche(sens)
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
If IsError(ActiveCell) Then MsgBox "Recherche impossible...": Exit Sub
If ActiveCell = "" Then Exit Sub
Static memcel As Range 'mémorisation
Dim cel As Range, r As Range, i As Integer
Set memcel = IIf(ActiveSheet.CodeName <> "Feuil1", memcel, Nothing)
If memcel Is Nothing Then Set memcel = ActiveCell
If ActiveCell.Find(memcel, , xlFormulas, xlWhole) Is Nothing _
  Then Set memcel = ActiveCell
Set cel = ActiveSheet.Cells.Find(memcel, SearchDirection:=xlPrevious)
If sens = xlNext Then Set cel = ActiveSheet.Cells.Find(memcel, cel)
Set r = ActiveSheet.Cells.Find(memcel, ActiveCell, , , , sens)
If r.Address <> cel.Address Then
  r.Select
Else
  i = IIf(sens = xlNext, 1, -1)
  For i = ActiveSheet.Index + i To IIf(i = 1, Worksheets.Count, 1) Step i
    Set cel = Worksheets(i).Cells.Find(memcel, SearchDirection:=xlPrevious)
    If Not cel Is Nothing Then
      If sens = xlNext Then Set cel = Worksheets(i).Cells.Find(memcel, cel)
      Worksheets(i).Visible = True
      Application.Goto cel
      Exit Sub
    End If
  Next
  MsgBox "Pas de cellule " & IIf(i, "suivante...", "précédente...")
End If
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Recherche sur plusieurs feuilles

Re,

Je découvre que la recherche de dates par un texte fonctionne :

- en intervertissant mois et jour

- et en supprimant les zéros non significatifs.

Fichier (1 bis).

A+
 

Pièces jointes

Dernière édition:
Re : Recherche sur plusieurs feuilles

Bonjour Job,

je viens de découvrir le fichier, je ne sais pas si c'est voulu, (je suis sous 2007), quand on fait une recherche avec Ctrl+F, on ne peux pas allez chercher la cellule suivante.



A+ 😎
 
Dernière édition:
Re : Recherche sur plusieurs feuilles

Bonjour Lone-wolf,

Avec la boîte de dialogue standard, si l'on veut rechercher dans toutes les feuilles, il faut d'abord les sélectionner.

C'est-à-dire créer un Groupe de travail.

De ce fait l'ordre de la recherche est assez anarchique.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
11
Affichages
728
Retour