Microsoft 365 Afficher ou masquer formes si une cellule est vide

pat66

XLDnaute Impliqué
Bonjour le forum,

j'ai besoin de votre expertise et vous remercie de bien vouloir m'aider, voici mon problème :

Lorsque j'efface le contenu de R16, les formes restent toujours affichées, sauriez vous dire pourquoi, sachant que la première partie de la macro fonctionne bien ?

merci beaucoup

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$M$11" Then
    Application.EnableEvents = False
        If Target + Worksheets("Feuil1").[V9] < [D93] Then ' A adapter
          If MsgBox("Compte tenu de votre âge """ & Worksheets("Feuil1").[V9] & " ans"", la durée envisagée est inférieure à la durée de cotisations nécessaire pour atteindre l'âge de la retraite fixé à """ & ActiveSheet.[D93] & " ans"". " & "Souhaitez vous appliquer la durée minimale ? ", 292, "ESPOIRS") = 6 Then ' (" & [E94] & " ans)
          [M11] = [E94]
            Else
                Application.Undo
            End If
        End If
        Application.EnableEvents = True
    End If

'c'est cette partie qui ne fonctionne pas :

If ActiveSheet.Range("R16") = "" Then
 ActiveSheet.Shapes("Rectangle : coins arrondis 29").Visible = False
 ActiveSheet.Shapes("Rectangle : coins arrondis 56").Visible = False
 ActiveSheet.Shapes("Rectangle : coins arrondis 69").Visible = False
 ActiveSheet.Shapes("Ellipse 71").Visible = False
 ActiveSheet.Shapes("Ellipse 72").Visible = False
 ActiveSheet.Shapes("Ellipse 73").Visible = False
 Else
 ActiveSheet.Shapes("Ellipse 71").Visible = True
 ActiveSheet.Shapes("Ellipse 72").Visible = True
 ActiveSheet.Shapes("Ellipse 73").Visible = True
End If
 
Dernière édition:
Solution
Re,
Mais vous pouvez avoir un souci maintenant si vous sélectionnez plusieurs cellules.
Testez plutôt ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
    If Target.Address = "$M$11" Then
    Application.EnableEvents = False
        If Target + Worksheets("Feuil1").[V9] < [D93] Then ' A adapter
          If MsgBox("Compte tenu de votre âge """ & Worksheets("Feuil1").[V9] & " ans"", la durée envisagée est inférieure à la durée de cotisations nécessaire pour atteindre l'âge de la retraite fixé à """ & ActiveSheet.[D93] & " ans"". " & "Souhaitez vous appliquer la durée minimale ? ", 292, "ESPOIRS") = 6 Then ' (" & [E94] & " ans)
          [M11] = [E94]
            Else
                Application.Undo...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pat,
Sans fichier test difficile de se prononcer. Le code semble correct.
- Est ce que R16 n'est pas fusionnée avec d'autres cellules, ou encore effacez vous que R16 et non une plage, sinon ça ne marche pas.
- Etes vous sur de vos appellations de shapes. ?
Chez moins c'est "Rectangle à coins arrondis 1" et non "Rectangle : coins arrondis 1"
Si un shape n'est pas trouvé alors on a une erreur.
- Faites un essai en supprimant " If Target.Count > 1 Then Exit Sub" pour voir si ce n'est pas un souci de plage.

Testez cette PJ qui ressemble à votre code pour voir.
 

Pièces jointes

  • Classeur1.xlsm
    14 KB · Affichages: 2

pat66

XLDnaute Impliqué
re,

trop fort sylvanu,

R16 est bien fusionnée ainsi R16:T16 , en défusionnant cela fonctionne, mais franchement ca m'arrange pas si je dois modifiée mes colonnes, il y a t'il une solution sans défusionner ? , merci
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
R16 est bien fusionnée ainsi R16:T16 , en défusionnant cela fonctionne, mais franchement ca m'arrange pas si je dois modifiée mes colonnes, il y a t'il une solution sans défusionner ?
Le problème est que vous éliminez toute selection de cellules fusionnées :
VB:
If Target.Count > 1 Then Exit Sub
Donc supprimez cette ligne comme déjà évoquée au post #2 :
- Faites un essai en supprimant " If Target.Count > 1 Then Exit Sub" pour voir si ce n'est pas un souci de plage.
:)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Mais vous pouvez avoir un souci maintenant si vous sélectionnez plusieurs cellules.
Testez plutôt ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
    If Target.Address = "$M$11" Then
    Application.EnableEvents = False
        If Target + Worksheets("Feuil1").[V9] < [D93] Then ' A adapter
          If MsgBox("Compte tenu de votre âge """ & Worksheets("Feuil1").[V9] & " ans"", la durée envisagée est inférieure à la durée de cotisations nécessaire pour atteindre l'âge de la retraite fixé à """ & ActiveSheet.[D93] & " ans"". " & "Souhaitez vous appliquer la durée minimale ? ", 292, "ESPOIRS") = 6 Then ' (" & [E94] & " ans)
          [M11] = [E94]
            Else
                Application.Undo
            End If
        End If
        Application.EnableEvents = True
    End If
End If
If ActiveSheet.Range("R16") = "" Then
    ActiveSheet.Shapes("Rectangle : coins arrondis 29").Visible = False
    ActiveSheet.Shapes("Rectangle : coins arrondis 56").Visible = False
    ActiveSheet.Shapes("Rectangle : coins arrondis 69").Visible = False
    ActiveSheet.Shapes("Ellipse 71").Visible = False
    ActiveSheet.Shapes("Ellipse 72").Visible = False
    ActiveSheet.Shapes("Ellipse 73").Visible = False
Else
    ActiveSheet.Shapes("Ellipse 71").Visible = True
    ActiveSheet.Shapes("Ellipse 72").Visible = True
    ActiveSheet.Shapes("Ellipse 73").Visible = True
End If
End Sub
 
Dernière édition:

pat66

XLDnaute Impliqué
re,

vraiment balaise !!!! merci sylvanu

effectivement ce venait bien de :
Code:
If Target.Count > 1 Then Exit Sub
puisque R16 = R16:T16
Donc les 2 solutions fonctionnent dans mon cas avec ou sans
VB:
If Target.Count = 1 Then

merci à tous pour votre aide et en particulier à sylvanu qui a encore résolu mon problème

cdt
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 059
Messages
2 115 818
Membres
112 553
dernier inscrit
carlos33