Macro pour masque un onglet dans un autre fichier

guerando Messages postés 364 Statut Membre -  
guerando Messages postés 364 Statut Membre -
Bonjour,

serait il possible que depuis un fichier ayant le nom des onglets d'un autre fichier, l'on puisse avoir une macro qui masque l'onglet dont on a sélectionné le nom.

exemple :
fichier 1 :
en a1 : nom de l'onglet 1 du fichier 2 : en b1 : xx1
a2 : nom de l'onglet 2 du fichier 2 : b2 : xx2
a3 : nom de l'onglet 3 du fichier 2 : b3 : xx3

fichier 2 :
il y a trois onglets xx1 xx2 et xx3

j'aimerai me mettre en b1 par exemple et lancer la macro et l'onglet xx1 se masquerait

Comment faire ? avez vous des idées ?

bonne soirée,

1 réponse

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Voici un exemple, à adapter le nom du classeur de destination. Se déclenche au double clic dans les cellules B1,B2 et B3

    Faire Alt F11 sur la feuille concernée où se trouve les cellules B1, B2 et B3 et coller ce code:

    Option Explicit
    'se déclenche au double clic en B1, B2, B3
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim dest As Workbook
    Set dest = Workbooks.Open(Filename:=ThisWorkbook.Path & "\essai.xlsx") 'a adapter le chemin et le nom du classeur de destination
    If Not Application.Intersect(Target, Range("B1:B3")) Is Nothing Then
    Select Case Target.Value
    Case "xx1"
     dest.Sheets(Target.Value).Visible = False
     dest.Sheets("xx2").Visible = True
    dest.Sheets("xx3").Visible = True
     Case "xx2"
      dest.Sheets(Target.Value).Visible = False
     dest.Sheets("xx1").Visible = True
    dest.Sheets("xx3").Visible = True
     Case "xx3"
      dest.Sheets(Target.Value).Visible = False
     dest.Sheets("xx1").Visible = True
    dest.Sheets("xx2").Visible = True
     End Select
     dest.Close 'ferme le classeur destination
     End If
    End Sub
    


    les 2 classeurs sont dans le même dossier

    Voilà

    0
    1. guerando Messages postés 364 Statut Membre 6
       
      merci beaucoup Le Pivert j'y regarde en début d'aprés midi :)
      0
    2. guerando Messages postés 364 Statut Membre 6
       
      Rebonjour Le Pivert :)
      Effectivement c'est super !
      Cependant, je me suis mal exprimée, les onglets qui sont fermés doivent rester fermer.
      Pour le code dois je : enlever les lignes concernant les autres onglets ?

      Case "xx1"
      dest.Sheets(Target.Value).Visible = False
      Case "xx2"
      dest.Sheets(Target.Value).Visible = False
      ...

      sachant que mon tableau d'origine peu avoir 200 onglets je dois rentrer le code 200 fois (copier / coller et changer le nom) ?

      De plus l'endroit où je dois cliquer c'est une fusion de cellule, est ce que ca pose problème ? voici des fichiers qui devrient etre plus clair. J'ai mis ton code dessus.

      Merci beaucoup de ton aide

      https://www.cjoint.com/c/HJEnHa4VE0l
      https://www.cjoint.com/c/HJEnHAsnyRl
      0
    3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Il ne faut pas de cellules fusionnées.

      Pour le code il suffit de mettre simplement cela

      Déprotéger la feuille avant (tu auras le code avec l'enregistreur de macro)

      dest.Sheets(Target.Value).Visible = False


      la protéger ensuite (tu auras le code avec l'enregistreur de macro)

      Il faut qu'il reste une feuille visible dans le classeur!

      Je ne peux pas faire fonctionner ton classeur tab-de-synthese car il est en liaision avec celui-ci:

      C:\Users\Moi\OneDrive\Documents\Actions à comptabiliser pour stock.xlsm

      Voilà
      0
    4. guerando Messages postés 364 Statut Membre 6
       
      meci le Pivert :) je vais y travailler ! à bientot
      bonne journée
      0
    5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Une première approche en défusionnant les cellules:

      Option Explicit
      'se déclenche au double clic
      Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      Dim dest As Workbook
      If Not Application.Intersect(Target, Range("N:N")) Is Nothing Then
      If Target.Value = "" Then Exit Sub
      Set dest = Workbooks.Open(Filename:=ThisWorkbook.Path & "\Action.xlsx") 'a adapter le chemin et le nom du classeur de destination
       dest.Sheets(Target.Value).Unprotect 'déprotège la feuille
       dest.Sheets(Target.Value).Visible = False
       dest.Sheets(Target.Value).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'protège la feuille
       dest.Close 'ferme le classeur destination
       End If
      End Sub
      

      tu écris

      les onglets qui sont fermés doivent rester fermer.

      mais je ne comprends pas cette manière de masquer seulement. Il va bien falloir les afficher à un moment donné!

      voilà

      @+ Le Pivert
      0