Microsoft 365 Macro qui permet d'afficher ou pas des Shapes

pat66

XLDnaute Impliqué
Bonsoir le forum,

Je souhaite afficher ou pas des shapes sur la feuille 1 selon que certaines cellules de la feuille 2 sont remplies ou pas

Exemple :
Au clic sur une forme de la feuille1
Si sur la feuille2 une des cellules de D12 à F12 et de D13 à F13 est vide, alors les shapes 1, 2, 3 de la feuille1 ne s'affichent pas, mais si toutes les cellules sont remplies alors les shapes 1,2,3 de la feuille1 s'affichent

un grand merci pour votre aide
 
Solution
Re

@pat66
Toujours sur le même principe mais en ciblant 3 shapes spécifiques
Code:
Private Sub Worksheet_Activate()
Dim a, i%
a = Array("shp_1", "shp_2", "shp_3")
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
For i = 0 To 2
Worksheets(1).Shapes(a(i)).Visible = IIf(test > 0 And test <= 6, False, True)
Next
End Sub
NB: Ici les 3 formes sont nommées shp_1, shp_2 et shp_3

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Une piste à étudier
(deux feuilles dans un classeur)
Dans la feuille 1, ce code VBA
Code:
Private Sub Worksheet_Activate()
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
If test <= 6 Then
DrawingObjects.Visible = False
End If
End Sub
C'est un chouia radical ;) mais test OK chez moi.
Les shapes de la feuille 1 seront masquées quand on active la feuille 1
 

pat66

XLDnaute Impliqué
Bonjour le fil

Une piste à étudier
(deux feuilles dans un classeur)
Dans la feuille 1, ce code VBA
Code:
Private Sub Worksheet_Activate()
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
If test <= 6 Then
DrawingObjects.Visible = False
End If
End Sub
C'est un chouia radical ;) mais test OK chez moi.
Les shapes de la feuille 1 seront masquées quand on active la feuille 1
Bonsoir Staple1600

je ne souhaite masquer que les shapes 1,2, 3 et pas les autres, merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re, bonsoir Staple,
Ne manque t-il pas un Else, car si les shapes sont masquées, vous ne les rendez pas visibles.
VB:
Private Sub Worksheet_Activate()
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
If test <= 6 Then
DrawingObjects.Visible = False
Else
DrawingObjects.Visible = True
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@pat66
Toujours sur le même principe mais en ciblant 3 shapes spécifiques
Code:
Private Sub Worksheet_Activate()
Dim a, i%
a = Array("shp_1", "shp_2", "shp_3")
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
For i = 0 To 2
Worksheets(1).Shapes(a(i)).Visible = IIf(test > 0 And test <= 6, False, True)
Next
End Sub
NB: Ici les 3 formes sont nommées shp_1, shp_2 et shp_3
 

pat66

XLDnaute Impliqué
bonjour le fil,

la solution de Staple qui cible nominativement les shapes est parfaite pour résoudre mon problème, je peux ainsi l'adapter assez facilement si dans d'autres circonstances je dois renommer les shapes

je vous remercie tous pour votre aide, mon problème est résolu
 

Discussions similaires

Statistiques des forums

Discussions
313 274
Messages
2 096 754
Membres
106 739
dernier inscrit
jcdu16