Masquer plusieurs colonnes

codeli

XLDnaute Nouveau
Bonjour,

J'ai réalisé un tableau contenant entre autres une colonne produits (A), une colonne prix(H), une colonne prix remisé 1 (I) et une colonne prix remisé 2 (J). Les deux remises sont exprimées en pourcentage, respectivement dans les cellules B17 et B18 hors du tableau. Elle sont indépendante l'une de l'autre. Donc B17 pour I et B18 pour J.
Je souhaiterai afficher les colonnes I et J seulement si B17 et/ou B18 auxquelles elles se réfèrent respectivement sont supérieures à 0%. Dans le cas contraire les masquer.

J'ai trouvé un code me permettant cette opération mais pour une colonne seulement. Je l'ai collé dans "Visualiser le code" sur la feuille et ça marche mais pour une colonne seulement et je ne sais pas aller plus loin.

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B18")) Is Nothing Then Exit Sub
If Target.Value <> 0 Then Columns(10).Hidden = False
If Target.Value = 0 Then Columns(10).Hidden = True
End Sub

Merci par avance pour votre aide.
Je suis novice.
 

Staple1600

XLDnaute Barbatruc
Re : Masquer plusieurs colonnes

Bonsoir à tous

codeli
Sans fichier exemple, les tests sont aléatoires ...
Donc à vue de nez et au pif je dirai
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B17,B18")) Is Nothing Then Exit Sub
If Target.Value <> 0 Then Columns("I:J").EntireColumn.Hidden = False
If Target.Value = 0 Then Columns("I:J").EntireColumn.Hidden = True
End Sub
 

codeli

XLDnaute Nouveau
Re : Masquer plusieurs colonnes

J'ai testé ce code mais il supprime les deux colonnes en même temps si l'une ou l'autre des cellules B17 ou B18 est à 0%.
Hors ce que je souhaite c'est que:
si B17 = 0% alors "I" est masqué.
si B18 = 0% alors "J" est masqué.
Merci tout de même pour ta réponse.
 

Staple1600

XLDnaute Barbatruc
Re : Masquer plusieurs colonnes

Re

codeli
J'avais pris le soin de préciser
Sans fichier exemple, les tests sont aléatoires ...
Donc la logique aurait voulu que dans la foulée, tu daignes joindre un fichier exemple...

Est-il trop tard pour encore espérer le voir venir ce fameux fichier exemple ?

Donc toujours à l'aveugle, une modification non testée (puisque toujours pas de fichier)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B17,B18")) Is Nothing Then Exit Sub
Select Case Target.Address
Case Is = "$B$17"
If Target.Value <> 0 Then Columns("I:i").EntireColumn.Hidden = False
If Target.Value = 0 Then Columns("I:I").EntireColumn.Hidden = True
Case Is = "$B$18"
If Target.Value <> 0 Then Columns("J:J").EntireColumn.Hidden = False
If Target.Value = 0 Then Columns("J:J").EntireColumn.Hidden = True
End Select
End Sub
 
Dernière édition:

codeli

XLDnaute Nouveau
Re : Masquer plusieurs colonnes

Bonjour,
Staple 1600, désolé d'avoir mis du temps à répondre mais je reprends juste à l'instant sur mon ordi. J'ai testé ta seconde proposition dont je te remercie. Malheureusement ça ne fonctionne pas. Aucune colonne ne disparait.

Je t'envoie un fichier en espérant que ce soit ce que tu souhaites comme fichier exemple.
Merci.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Masquer plusieurs colonnes

Bonjour à tous


D’où l'intérêt du fichier exemple ;)
Code VBA à mettre dans le code le feuille concernée.
(clic-droit sur l'onglet puis Visualiser le code, c'est là qu'il faut coller le code)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B17,B18")) Is Nothing Then Exit Sub
Select Case Target.Address
Case Is = "$B$17"
If Target.Value * 100 <> 0 Then Columns("I:i").EntireColumn.Hidden = False
If Target.Value * 100 = 0 Then Columns("I:I").EntireColumn.Hidden = True
Case Is = "$B$18"
If Target.Value * 100 <> 0 Then Columns("J:J").EntireColumn.Hidden = False
If Target.Value * 100 = 0 Then Columns("J:J").EntireColumn.Hidden = True
End Select
End Sub

NB: Enregistrer le classeur en *.xls ou *.xlsm pas en *.xlsx sinon les macros ne sont pas conservées.
 

Staple1600

XLDnaute Barbatruc
Re : Masquer plusieurs colonnes

Re

Pour le fun, la même macro mais rédigée avec une autre syntaxe
(A priori les effets seront les mêmes)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B17,B18")) Is Nothing Then Exit Sub
Select Case Target.Address
Case Is = "$B$17"
Columns("I:I").EntireColumn.Hidden = Target.Value * 100 = 0
Case Is = "$B$18"
Columns("J:J").EntireColumn.Hidden = Target.Value * 100 = 0
End Select
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Masquer plusieurs colonnes

Re

Parfois on oublie les voies les plus simples
Cette version-ci doit aussi fonctionner
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B17,B18")) Is Nothing Then Exit Sub
Columns(Switch(Target.Address = "$B$17", "I:I", Target.Address = "$B$18", "J:J")).EntireColumn.Hidden = Target.Value * 100 = 0
End Sub

NB: On ne peut mettre qu'une seule version de Worksheet_Change dans le code de la feuille sinon erreur
Donc supprimer les autres versions, avant de tester celle-ci.
 

codeli

XLDnaute Nouveau
Re : Masquer plusieurs colonnes

1000 bravos car pour moi c'était l'Everest. Pour le fun j'ai testé les 3 macros qui fonctionnent à merveille. (juste le plaisir de voir la solution sous tous ses angles)
En effet la dernière macro est plus légère et plus simple. Je garde donc celle-ci qui me permettra en cas d'ajout de cellules et de colonnes de facilement la faire évoluer.
Encore un grand merci :)
 

Discussions similaires

Statistiques des forums

Discussions
312 371
Messages
2 087 700
Membres
103 645
dernier inscrit
rafh57