Masquer des colonnes dans plusieurs feuilles excel

Résolu/Fermé
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 - Modifié par amiralS le 8/01/2017 à 14:15
 amiralS - 9 janv. 2017 à 22:05
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
A voir également:

1 réponse

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
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2
Modifié par amiralS le 8/01/2017 à 18:33
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
Utilisateur anonyme > amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020
8 janv. 2017 à 18:40
 
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
amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020 2 > Utilisateur anonyme
8 janv. 2017 à 19:50
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
Utilisateur anonyme > amiralS Messages postés 46 Date d'inscription samedi 26 octobre 2013 Statut Membre Dernière intervention 21 février 2020
8 janv. 2017 à 23:58
 
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
amiralS > Utilisateur anonyme
9 janv. 2017 à 22:05
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