XL 2016 RÉSOLU - Atteindre des feuilles masquées avec Worksheet_BeforeDoubleClick

Patsylla

XLDnaute Nouveau
Bonjour,
Je suis entrain de créer un fichier pour gérer des contrôles qualités.
Pour que ce fichier soit facilement lisible, il y a la Feuil2(Liste des contrôles) qui est la feuille principale où sont regroupé les informations principales qui est visible.
Par contre toutes les autres feuilles sont masquées et atteignable pour l'instant par des boutons/ macro, situés dans la colonne I.
Exemple:
Sub Bouton9_Cliquer()
' Bouton9_Cliquer Macro
' Lien vers feuille CTR-Blocage - 004, Suivi du contrôle


Sheets("CTR-Blocage - 004").Visible = True
'Pour afficher la feuille masquée
Sheets("CTR-Blocage - 004").Select
Range("A1").Select
Selection.End(xlDown).Offset(1).Select

'Pour placer le curseur sur la première ligne vide
End Sub

Au départ cela convenait, mais au fur et à mesure, le nombre de contrôles et de feuilles a fortement augmenté, j'en suis à près de 100.

1573474499190.png
1573474596694.png


En parcourant des forums j'ai trouvé une solution qui conviendrait mieux celle de procédures d'évènements Worksheet_BeforeDoubleClick.

J'ai trouvé l'exemple qui suit, mais je peine à l'adapter à mon fichier
Function ExisteFeuille(S) As Boolean
On Error Resume Next
ExisteFeuille = Worksheets(S).Index > 0
End Function

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect([A11:A28], Target) Is Nothing Then
'......................................................................................... Je pense devoir le remplacer par ([I2:I100], Target)
Choix = "Fich" & Target '.......................................C'est ici que je peine Dans l'exemple les feuilles commençaient par Fich suivi d'un nombre. Dans mon fichier.e nom des cellules de la colonne I et le nom des feuilles sont:
CTR-Blocage - 001
CTR-Blocage - 002
...
CTR-Blocage -016
CTR-EAR - 001
etc

If ExisteFeuille(Choix) Then
For Each Ws In Worksheets
If Ws.Name = Choix Then Ws.Visible = xlSheetVisible Else _
If Ws.Name <> Me.Name Then Ws.Visible = xlSheetVeryHidden
Next

Cancel = True
Worksheets(Choix).Activate
End If
End If
End Sub


Comment puis-je adapter ce "modèle".
C'est la première fois que je pose une question sur un forum, d'habitude je me contente de lire les précieuses réponses qui y sont apportées.
C'est pourquoi je vous demande beaucoup d'indulgence pour la forme sous laquelle est faite cette demande.
Merci à ceux et celles qui prendront le temps de m'aider.

Patsylla
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Comme tu as l'air d'avoir beaucoup de feuilles, une astuce dans ce fichier.
Tu double clic sur la liste pour ouvrir la feuille, et tu appuies sur F1 pour la refermer.
L'appui sur F1 est mis dans ThisWorkBook pour être applicable à toutes les feuilles.
Bien évidemment l'aide en ligne ( touche F1 ) est invalidé.
A+
 

Pièces jointes

  • Selection page.xlsm
    20.4 KB · Affichages: 4

Patsylla

XLDnaute Nouveau
Bonjour Patsylla,
Quelque chose comme ça ?
Ensuite on peut améliorer, adapter ou faire évoluer.
Bonsoir Sylvanu,
Merci beaucoup pour ta réponse.
Je vais te joindre mon fichier pour que tu puisses mieux comprendre. Excuse pour mon délai de retour, mais j'ai en faire une coquille vide.
Le truc que j'aimerai c'est de pouvoir remplacer tous les boutons de la colonne I, par Private Sub Worksheet_BeforeDoubleClick qui amènerait sur les feuilles masquées. Pour le "retour" je pense laisser mes boutons de retour.
J'ai mis en jaune les cellules que j'ai préparé pour remplacer les boutons.
En faite je fais ce fichier pour être utiliser par des personnes qui ne maitrisent pas grand choses, et j'aimerai qu'il soit le plus convivial possible.
J'espère que le manque de professionnalisme de ce fichier ne te fera pas trop rire, mais tiens compte, stp que je n'ai jamais pris de cours et que je suis une parfaite autoddidacte.

Si tu as encore le courage de m'aider un peu, merci beaucoup:)
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

à mettre dans ThisWorkbook :
VB:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim c As Range
    If Sh.Name = "Liste des Contrôles" Then
        If Target.Row > 1 And Target.Column = 9 Then
            Cancel = True
            On Error GoTo fin
            With Worksheets(Target.Value)
                .Visible = xlSheetVisible
                .Activate
            End With
        End If
    Else
        If Target.Row = 1 Then
            Set c = Worksheets("Liste des Contrôles").Columns(9).Find(Sh.Name, , xlValues, xlWhole)
            If Not c Is Nothing Then
                ' si la feuille est listée dans Worksheets("Liste des Contrôles") colonne I, on masque
                Cancel = True
                Sh.Visible = xlSheetHidden
                Worksheets("Liste des Contrôles").Activate
            End If
        End If
    End If
    Exit Sub
fin:
    MsgBox "Feuille '" & Target.Value & "' inconnue"
End Sub
un double-clic en I de "Liste des Contrôles" affiche la feuille.
Un double-clic sur la ligne 1 des autres feuilles masque la feuille si elle est présente dans "Liste des Contrôles"!I:I, et active "Liste des Contrôles". Pas besoin de leur ajouter de bouton.
eric
 
Dernière édition:

Patsylla

XLDnaute Nouveau
Bonjour,

à mettre dans ThisWorkbook :
VB:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim c As Range
    If Sh.Name = "Liste des Contrôles" Then
        If Target.Row > 1 And Target.Column = 9 Then
            Cancel = True
            On Error GoTo fin
            With Worksheets(Target.Value)
                .Visible = xlSheetVisible
                .Activate
            End With
        End If
    Else
        If Target.Row = 1 Then
            Set c = Worksheets("Liste des Contrôles").Columns(9).Find(Sh.Name, , xlValues, xlWhole)
            If Not c Is Nothing Then
                ' si la feuille est listée dans Worksheets("Liste des Contrôles") colonne I, on masque
                Cancel = True
                Sh.Visible = xlSheetHidden
                Worksheets("Liste des Contrôles").Activate
            End If
        End If
    End If
    Exit Sub
fin:
    MsgBox "Feuille '" & Target.Value & "' inconnue"
End Sub
un double-clic en I de "Liste des Contrôles" affiche la feuille.
Un double-clic sur la ligne 1 des autres feuilles masque la feuille si elle est présente dans "Liste des Contrôles"!I:I, et active "Liste des Contrôles". Pas besoin de leur ajouter de bouton.
eric
Bonjour,
Merci beaucoup Eriiiic, c'est parfait ça va me faciliter les choses.

Excellente journée à toi

Pat
 

Discussions similaires

Réponses
7
Affichages
420
Réponses
7
Affichages
485

Statistiques des forums

Discussions
313 271
Messages
2 096 725
Membres
106 720
dernier inscrit
Alain EDZOA