XL 2019 [RESOLU] Cacher colonnes non continues avec VBA

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 :)
 

Lolote83

XLDnaute Barbatruc
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
 

soan

XLDnaute Barbatruc
Inactif
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
 

Hasco

XLDnaute Barbatruc
Repose en paix
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
 

Lolote83

XLDnaute Barbatruc
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
 

soan

XLDnaute Barbatruc
Inactif
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
 

Lolote83

XLDnaute Barbatruc
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
 

soan

XLDnaute Barbatruc
Inactif
@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
 

soan

XLDnaute Barbatruc
Inactif
@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
 

My<3

XLDnaute Junior
@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
 

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki