Masquer des colonnes dans plusieurs feuilles excel

Résolu
amiralS Messages postés 48 Statut Membre -  
 amiralS -
Bonjour,
J'ai un classeur excel 2016 contenant des feuilles nommées "Sem_36 A", "Sem_37 B", "Sem_38 A", "Sem_39 B" etc...

Pour chaque feuille je voudrais pouvoir masquer ou afficher les colonnes de H à K . Ci dessous le résultat à partir de l'enregistreur de macro:

'Masquer les colonnes H:K de Plusieurs feuilles
Sub MasquerColonnes()
Sheets(Array("Sem_36 A", "Sem_37 B", "Sem_38 A")).Select
Sheets("Sem_36 A").Activate
Columns("H:K").Select
Selection.EntireColumn.Hidden = True
End Sub

'Afficher les colonnes H:K de Plusieurs feuilles
Sub AficherColonnes()
Sheets(Array("Sem_36 A", "Sem_37 B", "Sem_38 A")).Select
Sheets("Sem_36 A").Activate
Columns("H;K").Select
Selection.EntireColumn.Hidden = False
End Sub

Est-il possible de simplifier ces "macro" pour éviter la liste des feuilles sélectionnées?
Est-il possible de faire en sorte que ces "macro" prennent en compte des feuilles ajoutées ultérieurement?

Merci d'avance pour vos réponses
amiralS

1 réponse

  1. Utilisateur anonyme
     
    Bonjour amiralS,

    Je te propose ce code VBA :

    
    Option Explicit
    
    Sub Essai()
      Dim FX As Worksheet: Application.ScreenUpdating = False
      For Each FX In Worksheets
        FX.Range("H1, K1").EntireColumn.Hidden = Not FX.Columns("H").Hidden
      Next FX
    End Sub
    
    

    Tu pourras voir que cette macro fonctionne pour toutes les feuilles
    du classeur (y compris si tu en ajoutes d'autres par la suite).

    C'est la même macro qui masque / affiche successivement les
    2 colonnes H et K, une fois sur deux, pour chaque feuille.

    Dis-moi ce que tu en penses, et si ça te convient.
    Tu peux me demander une adaptation si besoin.

    Cordialement.  :)
    0
    1. amiralS Messages postés 48 Statut Membre 2
       
      Merci pour ton aide,
      Je viens d'essayer mais malheureusement ça coince dans mon cas sur cette ligne
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      FX.Range("H1, K1").EntireColumn.Hidden = Not FX.Columns("H").Hidden
      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      Ce qui marche pour les 4 colonnes de h à k et les trois feuilles c'est ce code. C'est long c'est lourd et ne fonctionnera pas si j'ajoute des feuilles. Pour Afficher je dois écrire une autre macro en remplaçant true par False
      'Masquer les colonnes H:K de Plusieurs feuilles
      Sub masque()
      Sheets("Sem_36 A").Select
      Columns("H:K").Select
      Selection.EntireColumn.Hidden = True
      Sheets("Sem_37 B").Select
      Columns("H:K").Select
      Selection.EntireColumn.Hidden = True
      Sheets("Sem_38 A").Select
      Columns("H:K").Select
      Selection.EntireColumn.Hidden = True
      End Sub

      Cordialement amiralS

      En essayant avec un classeur vierge juste des feuilles vides nommées par défaut Feuil1 Feuil2 Feuil3 ... et ta macro, ça fonctionne très bien
      0
      1. Utilisateur anonyme > amiralS Messages postés 48 Statut Membre
         
         
        Ma macro est indépendante du nom des feuilles, et agit sur toutes
        les feuilles du classeur. Mon code précédent était pour 2 colonnes
        seulement : H et K. Pour 4 colonnes H à K, voici un autre code :

        
        Option Explicit
        
        
        Sub Essai()
          Dim FX As Worksheet: Application.ScreenUpdating = False
          For Each FX In Worksheets
            FX.Columns("H:K").Hidden = Not FX.Columns("H").Hidden
          Next FX
        End Sub
        
        

        Les 2 macros fonctionnent sur un classeur vide ou non,
        mais il faudra faire une adaptation si tu as des feuilles
        masquées.

        À te lire pour savoir si ton problème est réglé ou non.

        Si oui, merci d'aller en haut de page pour cliquer sur
        le lien « Marquer comme résolu ». Cordialement.  :)
         
        0
      2. amiralS Messages postés 48 Statut Membre 2 > Utilisateur anonyme
         
        Merci
        J'avais déjà remplacé ("H1, K1") par ("H:K") pour masquer les 4 colonnes, ça fonctionne très bien. Comme ça marche très bien sur un classeur vide et pas avec celui que j'avais commencé, pour ne pas perdre de temps je copie les feuilles une par une dans ce classeur vide je vérifie chaque fois que ta macro fonctionne toujours puis je copie une par par une les macros que j'ai déjà créées avec vérification de leur exécution à chaque fois.
        Je viens de trouver, si des cellules sont protégées dans les feuilles la macro ne fonctionne pas, en ôtant la protection c'est bon.
        Quelles modifications faut-il faire? j'aurai des feuilles cachées pour les semaines de vacances.
        Est-il possible que cette macro s'exécute sur toutes les feuilles sauf 1 ou plusieurs. Par exemple que cette macro s'exécute à partir de la feuille 3 jusqu'à la feuille x?

        Cordialement
        0
      3. Utilisateur anonyme > amiralS Messages postés 48 Statut Membre
         
         
        As-tu remarqué que j'avais changé le début ? Au lieu de :
        FX.Range("H1, K1").EntireColumn.Hidden c'est :
        FX.Columns("H:K").Hidden

        Si la protection de tes feuilles pose un problème :

        
        Option Explicit
        
        
        Sub Essai()
          Dim FX As Worksheet: Application.ScreenUpdating = False
          For Each FX In Worksheets
            With FX
              .Unprotect
              .Columns("H:K").Hidden = Not .Columns("H").Hidden
              .Protect
            End With
          Next FX
        End Sub
        
        

        Si en plus tu as des feuilles masquées (cachées), alors pour les éviter :

        
        Option Explicit
        
        
        Sub Essai()
          Dim FX As Worksheet: Application.ScreenUpdating = False
          For Each FX In Worksheets
            With FX
              If .Visible Then
                .Unprotect
                .Columns("H:K").Hidden = Not .Columns("H").Hidden
                .Protect
              End If
            End With
          Next FX
        End Sub
        
        

        Des feuilles 3 à 10, toujours en évitant les feuilles masquées :

        
        Option Explicit
        
        
        Sub Essai()
          Dim FX As Byte: Application.ScreenUpdating = False
          For FX = 3 To 10
            With Worksheets(FX)
              If .Visible Then
                .Unprotect
                .Columns("H:K").Hidden = Not .Columns("H").Hidden
                .Protect
              End If
            End With
          Next FX
        End Sub
        
        

        A+ pour avoir ton avis.  :)
         
        0
      4. amiralS > Utilisateur anonyme
         
        Bonsoir albkan,

        Un grand merci pour ton aide. Je viens de me remettre sur mon projet et j'ai essayé toutes tes propositions avec succès.
        J'ai retenu la dernière qui me permet d'appliquer la macro sur un choix de feuilles déterminé.
        Donc grande satisfaction et grand merci pour ce problème résolu.

        A+
        0