XL 2019 [RESOLU] Cacher colonnes non continues avec VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Titoine693

XLDnaute Nouveau
Bonjour à tous,

Je viens de créer un planning hebdomadaire pour mon équipe, seulement j'ai un petit problème pour cacher mes colonnes avec un bouton.

Dans mon premier onglet, je renseigne les heures, pas de pb. J'ai même réussi à créer des toggles boutons pour cacher mes colonnes en fonction des services sur le 1er onglet.

La partie se complique quand je veux cacher plusieurs colonnes non continues, ça bug 🙁
Dans l'onglet AFFICHAGE PLANNING HEBDO, je veux faire 3 boutons, à l'image de mon premier onglet, en cachant les colonnes du service expédition, et quand je rappuie dessus, les ré-afficher.
(Expédition colonnes C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH) idem pour le service Transport interne et idem pour la presse...

J'ai tâté plusieurs code, mais je n'arrive pas à obtenir ce que je veux...
Arriveriez-vous à m'aider là-dessus svp ?

Merci d'avance 🙂
 
Bonjour TITOINE693,
Pas de fichier joint mais bon.
Voici donc un code simple
VB:
Sub MasqueColonne()
    Call MasqueAffiche(True)
End Sub

Sub AfficheColonne()
    Call MasqueAffiche(False)
End Sub


Sub MasqueAffiche(xEtat)
    Columns("C:F").EntireColumn.Hidden = xEtat
    Columns("S:V").EntireColumn.Hidden = xEtat
    Columns("AI:AL").EntireColumn.Hidden = xEtat
    Columns("AY:BB").EntireColumn.Hidden = xEtat
    Columns("BO:BR").EntireColumn.Hidden = xEtat
    Columns("CE:CH").EntireColumn.Hidden = xEtat
End Sub

@+ Lolote83
 
Bonjour Titoine, le fil,

bienvenue sur le site XLD ! 🙂

essaye ceci (un code VBA pour chacun des 3 boutons) :

VB:
Sub SREXP()
  Dim chn$: chn = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets("Expédition")
    .Range(chn).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

VB:
Sub SRTIN()
  Dim chn$: chn = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets("Transport interne")
    .Range(chn).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

VB:
Sub SRPRS()
  Dim chn$: chn = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets("Presse")
    .Range(chn).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

chaque bouton fonctionne en bascule :
ça masque / affiche les colonnes.

soan
 
Bonjour,

Je remets ici les deux macros qui fonctionnent:
VB:
Private Sub CommandButton1_Click()
    Dim NewEtat As Boolean
    With Range("C:F")
        NewEtat = Not .EntireColumn.Hidden
        .EntireColumn.Hidden = NewEtat
        If NewEtat = True Then
            CommandButton1.Caption = "Cacher"
        Else
            CommandButton1.Caption = "Masquer"
        End If
    End With
End Sub

Private Sub CommandButton1_Click()
    Dim NewEtat As Boolean
    With Range("C:F")
        NewEtat = Not .EntireColumn.Hidden
        .EntireColumn.Hidden = NewEtat
        CommandButton1.Caption = Array("Masquer", "Afficher")(-NewEtat)
    End With
End Sub

Choisissez une méthode que vous saurez adapter et modifier éventuellement.

Cordialement
 
Re bonjour à tous.
Avec une petite compilation en m'inspirant des codes de @JHA et @soan
Trois boutons nommés respectivement Btn_Expédition, Btn_Transportinterne et Btn_Presse
Le code associé à chaque bouton avec passage en paramètre de
- L'onglet concerné
- La Plage à afficher/masquer

Cela permet donc aussi de déterminer des plages différentes selon les onglets
VB:
Sub BTN_Expédition_Cliquer()
    Call AfficheMasque("Expédition", "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH")
End Sub

Sub BTN_Transportinterne_Cliquer()
    Call AfficheMasque("Transport Interne", "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH")
End Sub

Sub BTN_Presse_Cliquer()
    Call AfficheMasque("Presse", "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH")

End Sub

Sub AfficheMasque(xOnglet, xPlage)
  With Worksheets(xOnglet)
    .Range(xPlage).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub
@+ Lolote83
 
Bonjour Lolote83,

voici une de mes 3 subs de mon post #4 :

VB:
Sub SREXP()
  Dim chn$: chn = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets("Expédition")
    .Range(chn).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

voici la fin du code VBA de ton post #8 :

VB:
Sub AfficheMasque(xOnglet, xPlage)
  With Worksheets(xOnglet)
    .Range(xPlage).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

c'est tellement proche que je suis bien content qu'on soit d'accord
sur ce point : on peut utiliser .Columns et pas .EntireColumn ! 😉

soan
 
Bonjour @soan ,
J'ai bien précisé justement dans mon post#8 que je m'étais inspiré du code de @JHA et du tien.
Si j'ai fait cette petite compil, c'est pour montrer que l'on peut passer en paramètre certaines données et ici, la plage à masquer peut être différente aussi.
Je ne cherche en aucun cas à faire du "plagia"
Bonne continuation.
@+ Lolote83
 
@Lolote83

ok, merci pour ton info ; désolé, j'avais zappé la 1ère phrase de ton post #8. 🙂

petit info : 🍕 "pizza" se termine par "a" ; "plagiat" se termine par "t". 😜​

c'est pas une critique ; c'est juste pour que tu ne fasses pas cette faute sur un
document juridique ou commercial d'entreprise ou de cabinet d'avocats.


soan
 
@Titoine693

voici un code VBA optimisé :

VB:
Option Explicit

Sub HideShow(FX$)
  Const Cols$ = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets(FX)
    .Range(Cols).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

Sub Expédition_Cliquer()
  HideShow "Expédition"
End Sub

Sub TransportInterne_Cliquer()
  HideShow "Transport Interne"
End Sub

Sub Presse_Cliquer()
  HideShow "Presse"
End Sub

soan
 
@Titoine693

voici un code VBA optimisé :

VB:
Option Explicit

Sub HideShow(FX$)
  Const Cols$ = "C:F, S:V, AI:AL, AY:BB, BO:BR, CE:CH"
  With Worksheets(FX)
    .Range(Cols).Columns.Hidden = Not .Columns("C").Hidden
  End With
End Sub

Sub Expédition_Cliquer()
  HideShow "Expédition"
End Sub

Sub TransportInterne_Cliquer()
  HideShow "Transport Interne"
End Sub

Sub Presse_Cliquer()
  HideShow "Presse"
End Sub

soan
Bonjour Soan,

est-ce possible d'adapter la formule avec deux boutons mais que les colonnes masquer pour ces deux bouton sois différente? Exemple le premier bouton on masque les colonnes F, I, L, P:W et le deuxième on masque les colonnes F:J, L:S
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour