Exécution de Macro quand cellule change automatiquement

Bonjour à tous,

J'ai créé un code qui me permet d'afficher ou de masquer des colonnes quand des cellules de ces colonnes sont remplies ou pas.

Cela fonctionne très bien quand je remplis ou supprime les cellules à la main. Par contre ça ne fonctionne pas quand ces cellules sont remplies ou supprimées par des formules liées à un autre onglet. Comment puis-je adapter mon code pour que cela fonctionne dans les 2 cas?

Code:

Option Explicit
'Permet d'afficher uniquement les colonnes où il y a des informations
 Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim cel As Range
    For Each cel In Range("I5:M5,O5:S5,U5:Y5,AA5:AE5,AG5:AK5,AM5:AQ5,AS5:AW5,AY5:BC5,BE5:BI5,BK5:BO5,BQ5:BU5")
    If cel = "" Then
    cel.EntireColumn.Hidden = True
    End If
    Next
    For Each cel In Range("I5:M5,O5:S5,U5:Y5,AA5:AE5,AG5:AK5,AM5:AQ5,AS5:AW5,AY5:BC5,BE5:BI5,BK5:BO5,BQ5:BU5")
    If cel <> "" Then
    cel.EntireColumn.Hidden = False
    cel.EntireColumn.ColumnWidth = 12.5 'redimensionne les colonnes non masquées
    End If
    Next
    Application.ScreenUpdating = True
End Sub

Merci d'avance pour votre aide.

ça ne fonctionne pas quand ces cellules sont remplies ou supprimées par des formules liées à un autre onglet

Une macro événementielle ne réagit pas en effet au changement de valeur induit par un formule.

Pour cela, il faudrait tester le changement des valeurs de base constitutives de la formule.

Mais comme ces valeurs se trouvent sur une autre feuille, je pense que c'est préférable dans ton cas de se baser sur l'événement activate de ta feuille en testant toutes les cellules des colonnes.

Private Sub Worksheet_Activate()

End Sub

Merci pour ta réponse Steelson.

Il faut juste que je remplace Worksheet_Change(ByVal Target As Range) par Worksheet_Activate(ByVal Target As Range)?

Désolé je suis novice en Excel...

Ah non, il faut reprogrammer ...

As-tu un fichier excel simplifié ?

J'en ai créé 1 simplifié

3classeur1.xlsm (20.27 Ko)

Les colonnes qui doivent disparaitre et/ou apparaitre sont dans la feuille1, et les cellules de la feuille1 sont liées à la feuille2.

Dans l'exemple si des chiffres pour Fin Février V04 apparaissent dans la feuille2 alors la colonne doit apparaitre dans feuille1

et si on contraire si on enlève les chiffres pour Fin février V03 dans la feuille 2 alors la colonne correspondante dans feuille1 doit être masquée...

Pas sûr que je sois bien clair!

Option Explicit

Private Sub Worksheet_Activate()
Dim i%
For i = 3 To 7 ' colonnes C à G
    If Cells(5, i) = "" Then
        Cells(5, i).EntireColumn.Hidden = True
    Else
        Cells(5, i).EntireColumn.Hidden = False
    End If
Next
End Sub
2classeur1.xlsm (19.17 Ko)
Rechercher des sujets similaires à "execution macro quand change automatiquement"