XL 2019 masquer des colonne sous condition d'une cellule en 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 !

Hellboy60

XLDnaute Nouveau
Bonjour à tous.
Avant tout, je voudrais remercier ce site où je trouve souvent des infos très utiles.
Alors voilà, mon petit souci : je suis une quiche pour tout ce qui concerne le VBA puisque
Je ne connais malheureusement pas la langue de Shakespeare, en plus certainement d'un blocage.

Je souhaiterais masquer les colonnes de J à BB, mais si les cellules de "J1 à L1"
affiche la même adresse que la Cellule en C2, colonnes de "J à L" visible et ainsi de suite.
si les cellules "M1 à O1" affichent la même adresse que la cellule C2, les colonnes "M à O" restent visibles et
masquer les autres colonnes de "J à BB".
Tout ça en VBA et sans bouton.

Et comme je veux progresser, un petit texte expliquant les lignes de commande en français,
pourrait m'aider à comprendre et à l'adapter sur d'autres projets.

joint fichier
 

Pièces jointes

Bonjour Helloboy, et bienvenu sur XLD,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
    If Not Intersect(Target, [C2:E2]) Is Nothing Then   ' Si modif valeur en C2:E2 alors
         Application.ScreenUpdating = False             ' On fige l'écran,plus rapide.
         Columns("J:BB").EntireColumn.Hidden = True     ' On masque toutes les colonnes
         For C = 10 To 54                               ' De la colonne J à BB
            If Cells(1, C) = Target Then Columns(C).EntireColumn.Hidden = False  'On démasque la colonne
         Next C
    End If
Fin:
End Sub
La macro est automatique lorsqu'on modifie la valeur en C2.
Si cette cellule est vide, on affiche toutes les colonnes.
 

Pièces jointes

Bonjour Helloboy, et bienvenu sur XLD,
Un essai en PJ avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
    If Not Intersect(Target, [C2:E2]) Is Nothing Then   ' Si modif valeur en C2:E2 alors
         Application.ScreenUpdating = False             ' On fige l'écran,plus rapide.
         Columns("J:BB").EntireColumn.Hidden = True     ' On masque toutes les colonnes
         For C = 10 To 54                               ' De la colonne J à BB
            If Cells(1, C) = Target Then Columns(C).EntireColumn.Hidden = False  'On démasque la colonne
         Next C
    End If
Fin:
End Sub
La macro est automatique lorsqu'on modifie la valeur en C2.
Si cette cellule est vide, on affiche toutes les colonnes.
super je suis bluffé, non seulement c'est nickel, mais tu est réactif comme l'éclair.
bien expliqué, simple et concis, du bonheur
un grand merci à toi, en te souhaitant un bon week-end et de bonne fêtes de fin d'année.
cordialement.
 
Bonjour Hellboy60, sylvanu,

Les valeurs en J1:BB1 étant données par des formules on peut utiliser l'évènement Calculate avec ce code :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In [J1:BB1]
    c.Columns.Hidden = c = "" 'masque la colonne si c  = "", affiche si c <> ""
Next
End Sub
A+
 

Pièces jointes

Bonjour Hellboy60, sylvanu,

Les valeurs en J1:BB1 étant données par des formules on peut utiliser l'évènement Calculate avec ce code :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In [J1:BB1]
    c.Columns.Hidden = c = "" 'masque la colonne si c  = "", affiche si c <> ""
Next
End Sub
A+
super, deux codes VBA en moins de temps qu'on peut le dire.
un grand Merci Job75 et sylvanu , vous assurez graves.
et du coup me voilà moins bête qu'hier, et encore Merci (de nos jours, on a tendance , à oublié l'importance du mot merci)
 
Re, bonjour Job,
Et comme je veux progresser, un petit texte expliquant les lignes de commande en français, pourrait m'aider à comprendre
Alors "just for the fun", on peut se passer des formules en ligne 1, en cherchant la valeur de C2 dans la ligne 3, avec :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
    If Not Intersect(Target, [C2:E2]) Is Nothing Then  ' Si modif valeur en C2:E2 alors
        Application.ScreenUpdating = False             ' On fige l'écran,plus rapide.
        Columns("J:BB").EntireColumn.Hidden = True     ' On masque toutes les colonnes
        C = Application.Match(Target, [3:3], 0)        ' On recherche où se trouve C2 dans la ligne 3
        Range(Cells(1, C), Cells(1, C + 2)).EntireColumn.Hidden = False 'On démasque les colonnes
        Exit Sub                                       ' On sort
    End If
Fin:                                                   ' Si erreur détctée car valuer de C2 non trouvée
Columns("J:BB").EntireColumn.Hidden = False            ' On démasque toutes les colonnes si erreur rencontrée
End Sub
 

Pièces jointes

- 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

Discussions similaires

Réponses
2
Affichages
170
Réponses
2
Affichages
576
Retour