Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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é
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
Bonjour @pat66

@pat66
J'ai bien compris
D'ou les mots employés dans mon message
une piste
à étudier

Donc il suffit en suite d'adapter , non ?

@sylvanu
J'attendais le fichier fourni par le demandeur avant d'aller plus loin

PS: j'avais ceci sous le coude
Sub itoPresto()
ActiveSheet.DrawingObjects.Visible = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@sylvanu
Toujours en mode : faisons des test dans VBE
Code:
Private Sub Worksheet_Activate()
test = Application.CountBlank(Sheets(2).Range("D12:F13"))
DrawingObjects.Visible = IIf(test > 0 And test < 6, False, True)
End Sub
Semble permettre de s'affranchir du If/Else/End if
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…