Signaler

Masquer des colonnes dans plusieurs feuilles excel [Résolu]

Posez votre question amiralS 26Messages postés samedi 26 octobre 2013Date d'inscription 8 janvier 2017 Dernière intervention - Dernière réponse le 9 janv. 2017 à 22:05 par 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
Afficher la suite 
Utile
+0
moins plus
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.  :)
amiralS 26Messages postés samedi 26 octobre 2013Date d'inscription 8 janvier 2017 Dernière intervention - 8 janv. 2017 à 17:49
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
Répondre
albkan 2272Messages postés samedi 26 mars 2016Date d'inscription 18 janvier 2017 Dernière intervention - 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.  :)
 
Répondre
amiralS 26Messages postés samedi 26 octobre 2013Date d'inscription 8 janvier 2017 Dernière intervention - 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
Répondre
albkan 2272Messages postés samedi 26 mars 2016Date d'inscription 18 janvier 2017 Dernière intervention - 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.  :)
 
Répondre
amiralS- 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+
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !