Masquer/Afficher des Colonnes automatiquement

Bonjour à tous,

Je cherche à créer depuis quelques jours une macro pouvant Masquer/Afficher des colonnes sous conditions.

Après quelques recherche sur votre site, j'ai trouvé ceci :

Sub test()
'Macro Dan pour JP06 - 22/09/09
Dim cel As Range
For Each cel In Range("C69:AB69")
If cel = 0 Then
cel.EntireColumn.Hidden = True
Else: cel.EntireColumn.Hidden = False
End If
Next
End Sub

Ceci est un bon début, malheureusement je n'ai pas trouvé comment afficher les colonnes si une valeur devient différente de 0 dans la plage de données.

J'explique mon problème :

Les cellules de la plage de donnée ("C69:AB69") sont égales à la somme de valeur provenant d'autre feuilles.

J'aimerai que les colonnes se masque et s'affiche automatiquement lorsque je renseigne les autres feuilles sans actionner de boutons pour activer la macro.

Je pense que cela reviendrai à demander à la macro de recalculer dès qu'une nouvelle saisie est rentrée dans le classeur excel.

Je vous demande donc de me dire si c'est possible et comment y arriver.

En vous remerciant d'avance

Jérome.

Bonsoir

Jerome.xls a écrit :

Je pense que cela reviendrai à demander à la macro de recalculer dès qu'une nouvelle saisie est rentrée dans le classeur excel.

Tout à fait exact

Il faut travailler avec l'évènement Calculate : Possible car pas trop de colonnes à traiter

Dans ton cas, d'après ce que j'ai compris, c'est lors de la modification dans les autres pages, donc tu peux utiliser l'évènement Activate, les colonnes seraient masquées/démasquées lorsque tu reviendrais sur cette page

Choisis l'évènement que tu veux

Private Sub Worksheet_Activate()
'[surligner=#FFFF80]Private Sub Worksheet_Calculate()
'Macro Dan pour JP06 - 22/09/09
Dim cel As Range
  Application.ScreenUpdating = False
  For Each cel In Range("C69:AB69")
    If cel = 0 Then
      cel.EntireColumn.Hidden = True
    Else: cel.EntireColumn.Hidden = False
    End If
  Next
End Sub

Ce code est à placer dans le module de la feuille concernée

Bonsoir,

Merci à toi Banzai64, cette petite ligne permet effectivement de recalculer à chaque fois que l'on vient sur cette feuille.

C'est exactement ce qu'il me fallait.

Un autre problème survient évidemment... C'était trop beau pour être vrai.

J'ai un erreur de type 13 : "Incompatibilité de type".

Cela doit provenir des cellules contenant des valeurs en pourcentage.

Peut on dire au code que c'est en pourcentage ou même exclure ces cellules de la plage de donnée?

Ma plage de donnée est ("C69:AB69"), et les cellules en pourcentages sont D69, F69 et toutes les 2 colonnes apres.

Merci encore

Bonsoir

Il faudrait que tu envoies le fichier en faute car je n'arrive pas à reproduire le bug

Salut,

Si tu n'arrives pas à refaire le bug c'est que ca doit venir d'ailleurs alors...

Je t'ai joint mon fichier pour regarder de plus près.

Merci.

172jerome.xlsm (225.58 Ko)

Bonjour

Cela vient que dans tes cellules tu as une erreur

Deux solutions

la moins "élégante" on modifie la macro (mais la plus rapide)

Private Sub Worksheet_Activate()
'Macro Dan pour JP06 - 22/09/09
Dim cel As Variant

  On Error Resume Next
  For Each cel In Range("C69:AB69")
    If cel = 0 Then
      cel.EntireColumn.Hidden = True
    Else: cel.EntireColumn.Hidden = False
    End If
  Next
End Sub

Ou alors tu corriges les formules pour ne pas avoir l'erreur

Au lieu d'écrire (tu testes le dividende)

=SI(I69=0;0;I69/E$70)

tu écris (tu testes le diviseur)

=SI(E$70=0;0;I69/E$70)

A toi de voir

Bonjour,

En complément, une autre solution :

Private Sub Worksheet_Activate()
Dim Cel As Range
Application.ScreenUpdating = False
For Each Cel In Range("C69:AB69")
    If Not IsError(Cel) Then
        Cel.EntireColumn.Hidden = Cel = 0
    End If
Next Cel
End Sub

Nota : attention à la définition de la variable Cel (c'est une cellule, donc on peut la définir ainsi)

Bon W-E

Pour le problème d'erreur dans les cellules, j'ai préféré rectifier les formules. C'est plus "propre" pour la suite des évènements.

Je te remercie grandement banzai64 car j'ai même appliqué cette macro pour les lignes = 0. On y voit maintenant plus clair dans ce tableau...

Merci également à cousinhub pour avoir répondu à une question que j'allais poser ! (Es-tu medium ?)

Pour info,c'était pour le" Application.ScreenUpdating = False", c'est quand même plus agréable avec.

Merci à vous pour votre efficacité et votre réactivité. Je peux partir en weekend tranquillement maintenant.

J'hésiterai pas à revenir sur le forum pour d'autres soucis dans l'avenir.

A plus.

Jérome.

Bonjour

Cela vient que dans tes cellules tu as une erreur

Deux solutions

la moins "élégante" on modifie la macro (mais la plus rapide)

Private Sub Worksheet_Activate()
'Macro Dan pour JP06 - 22/09/09
Dim cel As Variant

  On Error Resume Next
  For Each cel In Range("C69:AB69")
    If cel = 0 Then
      cel.EntireColumn.Hidden = True
    Else: cel.EntireColumn.Hidden = False
    End If
  Next
End Sub

Bonjour,

Je me permet d intervenir sur ce post, Je cherchais une matrice qui pouvais me permettre de réaliser la même chose qui était demandé.

Seulement je voudrais optimiser la matrice à une plage de cellule plutôt que la colonne complète.

J ai essayé d apporter une modification en remplaçant la cellule par la plage en question mais ca me renvoie une erreur.

Genre en fonction de la plage a3 à v3, si une de ces cellules est vide, alors la colonne correspondante dans la plage a3 à v38 se masque automatiquement, sinon elle s afiche.

Merci par avance

Rechercher des sujets similaires à "masquer afficher colonnes automatiquement"