Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Microsoft 365Macro qui masque 2 formes et les reaffichent
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 !
Bonsoir le forum,
Est il possible qu'une macro exécute cette procédure
1er clic, on masque la forme 1
2ème clic, on masque forme2
3 clic, on reaffiche les 2 formes
Bonsoir Pat, Mapomme,
Un essai en PJ avec cette macro très facilement modifiable/adaptable à votre fichier :
VB:
Sub ClicClac()
With ActiveSheet
If .Shapes("Image 1").Visible = -1 And .Shapes("Image 2").Visible = -1 Then
.Shapes("Image 1").Visible = -1
.Shapes("Image 2").Visible = 0
ElseIf .Shapes("Image 1").Visible = -1 And .Shapes("Image 2").Visible = 0 Then
.Shapes("Image 1").Visible = 0
.Shapes("Image 2").Visible = -1
ElseIf .Shapes("Image 1").Visible = 0 And .Shapes("Image 2").Visible = -1 Then
.Shapes("Image 1").Visible = -1
.Shapes("Image 2").Visible = -1
End If
End With
End Sub
Sub Clique()
Dim etat
With ActiveSheet
etat = -.Shapes("image 1").Visible - .Shapes("image 2").Visible
Select Case etat
Case 0: .Shapes("image 1").Visible = True: .Shapes("image 2").Visible = True
Case 1: .Shapes("image 1").Visible = False: .Shapes("image 2").Visible = False
Case 2: .Shapes("image 1").Visible = False: .Shapes("image 2").Visible = True
End Select
End With
End Sub
Sub Suivant()
Const mesImages = "bateau;tresor;ancre;tetemort;jacquot" 'liste ordonnée des images
Dim s, i&
s = Split(mesImages, ";")
With ActiveSheet
For i = 0 To UBound(s)
If .Shapes(s(i)).Visible = True Then .Shapes(s(i)).Visible = False: Exit For
Next i
If i = UBound(s) + 1 Then For i = 0 To UBound(s): .Shapes(s(i)).Visible = True: Next
End With
End Sub
bonsoir bonsoir @mapomme
1° la même en travaille avec la collection Ad hoc
ce qui rend les chose plus faciles
VB:
Sub clique2()
Dim MesImages, I&
Set MesImages = ActiveSheet.Shapes.Range(Array("bateau", "tresor", "ancre", "tetemort", "jacquot")) 'collection shapes.range des images
For I = 1 To MesImages.Count + 1
If I > MesImages.Count Then MesImages.Visible = True: Exit For
If MesImages(I).Visible = True Then MesImages(I).Visible = False: Exit For
Next I
End Sub
une variante qui va eteindre a chaque clique la suivante tout en réaffichant le precédente
toujours avec la collection ad hoc
VB:
Sub clique3()
Static x As Long
Dim MesImages
Set MesImages = ActiveSheet.Shapes.Range(Array("bateau", "tresor", "ancre", "tetemort", "jacquot")) 'collection shapes.range des images
x = x + 1: If x = MesImages.Count + 1 Then x = 0
MesImages.Visible = True
If x > 0 Then MesImages(x).Visible = False
End Sub
et une version 4 on fait sauter la boucle avec le static
VB:
Sub clique4()
Static x As Long
Dim MesImages
Set MesImages = ActiveSheet.Shapes.Range(Array("bateau", "tresor", "ancre", "tetemort", "jacquot")) 'collection shapes.range des images
x = x + 1
If x > MesImages.Count Then MesImages.Visible = True: x = 0: Exit Sub
MesImages(x).Visible = False
End Sub
Bonjour.
La version qui passe par toutes les combinaisons :
VB:
Sub clique4()
Dim Shp As Shape, DernVis As Boolean
For Each Shp In ActiveSheet.Shapes.Range(Array("bateau", "tresor", "ancre", "tetemort", "jacquot"))
DernVis = Shp.Visible
Shp.Visible = Not DernVis
If DernVis Then Exit Sub
Next Shp
End Sub
- 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