Microsoft 365 Afficher ou masquer formes si une cellule est vide

  • Initiateur de la discussion Initiateur de la discussion pat66
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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...
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

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:
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.
🙂
 
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour