Cacher plusieurs colonnes sous condition

Bonjour tout le monde,

J'aurais besoin d'un petit coup de main. J'ai une feuille sur laquelle je voudrais cacher la colonne si la premiere cellule de la colonne contient "0".

J'ai reussi a faire quelque chose qui fonctionne treés bien:

Private Sub Worksheet_Change(ByVal Target As Range)

'If Range("D1") = 0 Then 'Si D1 = 0 alors
'Sheets("Impression").Columns("D:D").EntireColumn.Hidden = True
'Else
'Sheets("Impression").Columns("D:D").EntireColumn.Hidden = False
'End If

'If Range("E1") = 0 Then
'Sheets("Impression").Columns("E:E").EntireColumn.Hidden = True
'Else
'Sheets("Impression").Columns("E:E").EntireColumn.Hidden = False
'End If

'If Range("F1") = 0 Then
'Sheets("Impression").Columns("F:F").EntireColumn.Hidden = True
'Else
'Sheets("Impression").Columns("F:F").EntireColumn.Hidden = False
'End If
End sub

Mon problème est que je dois faire ceci pour toutes les colonnes de D à CO.

Y aurait il un moyen de faire ça sous forme de boucle, ou dois je me taper le code pour toutes les colonnes?

Je vous remercie d'avance pour votre aide et vos explication si possible.

Bonjour,

à tester

Private Sub Worksheet_Change(ByVal Target As Range)
for each C in range("D1:CO1")
      if c.value=0  then 
         Sheets("Impression").range(c.address).EntireColumn.Hidden = True 
      else 
        Sheets("Impression").range(c.address).EntireColumn.Hidden = True
      end if
next 
End sub
 

Bonjour,

Merci beaucoup pour ta reponse.

Les colonnes se cachent bien, mais le probleme c'est que toutes se cachent, qu'il y ai 0 ou une autre valeur.

Pour tout expliquer, ce que je voudrais, c'est que si la colonne B contient une valeur dans les cellules de B10 à B45000, elle reste apparante, sinon, cacher la colonne et ceci avec toutes les colonnes de D a CO.

Pour ce faire, j'ai mis dans toutes les premiere cellule de chaque colone la formule

=NBVAL(D10:D45000)

J'espere que je m'explique bien. Je n'ai pas mis le fichier car il est trop volumineux.

Peux tu encore m'aider?

Bonjour,

j'ai oublié de changer le 2ème true en false en recopiant la ligne et comme je n'avais pas testé ...

Private Sub Worksheet_Change(ByVal Target As Range)
for each C in range("D1:CO1")
      if c.value=0  then 
         Sheets("Impression").range(c.address).EntireColumn.Hidden = True 
      else 
        Sheets("Impression").range(c.address).EntireColumn.Hidden = false
      end if
next 
End sub

Ahh oui désolé, j'aurais du m'en rendre compte!!

Ca fonctionne trés bien. Un peu lent vu le nombre de colonne!! mais je ne pense pas qu'il y ai d'autres solution.

Je te remercie beaucoup pour ton aide.

Bonne continuation.


J'ai oublié de te demander une précision!

Je comprends pas le morceau de code :

if c.value=0

Si la valeur de la colonne = 0!! oui mais quel valeur?? il n'est pas preciser la 1ère cellule de la colonne??

pour la lenteur

tu peux ajouter

application.screenupdate=false au début et application.screen.update=true à la fin de la procédure

Private Sub Worksheet_Change(ByVal Target As Range)
application.screenupdate=false 
for each C in range("D1:CO1")
if c.value=0 then 
Sheets("Impression").range(c.address).EntireColumn.Hidden = True 
else 
Sheets("Impression").range(c.address).EntireColumn.Hidden = false
end if
next 
 application.screen.update=true
End sub

Oups, je viens de comprendre!

la première cellule est donné D1:CO1!!

Merci encore.

cos81 a écrit :

J'ai oublié de te demander une précision!

Je comprends pas le morceau de code :

if c.value=0

Si la valeur de la colonne = 0!! oui mais quel valeur?? il n'est pas preciser la 1ère cellule de la colonne??

bonjour

C fait référence aux cellules de la ligne 1 (range("D1:CO1") que la macro prend une à une

C. value est donc la valeur d'une cellule dans le range

C.address est l'adresse de cette cellule


Je vois que tu as trouvé toi-même l'explication !

Ca n'a pas marché, mais je sais pourquoi, c'est un code que j'avais déja utilisé!!

ce n'etais pas

application.screenupdate=false

mais

Application.ScreenUpdating = False

Mais ca n'a pas acceleré le proccessus.

C'est pas très grave.

Merci

re

au temps pour moi!

comme tu as inséré cette procédure dans l'évènement change

essaie en ajoutant un

application.enableevents=false 

au début

et

application.enableevents=true

à la fin

Je ne suis plus devant mon pc, je ferais le test demain matin!

Je te tiendrais au courant.

Merci

Bonjour h2so4,

Cette solution marche parfaitement!!

Merci encore pour tout!!

Bonne continuation.

Rechercher des sujets similaires à "cacher colonnes condition"