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

Microsoft 365 Macro qui masque 2 formes et les reaffichent

pat66

XLDnaute Impliqué
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

Merci
Bonne soirée
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • Pat.xlsm
    26.9 KB · Affichages: 6

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @pat66 , @sylvanu ,

Une autre manière de voir :
VB:
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
 

Pièces jointes

  • pat66 - cacher 1 puis 2 puis aucun- v1.xlsm
    147.4 KB · Affichages: 7
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une généralisation à n images.

Le code dans module1 :
VB:
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
 

Pièces jointes

  • pat66 - cacher 1 à n puis aucun- v2.xlsm
    242.4 KB · Affichages: 9

patricktoulon

XLDnaute Barbatruc
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
 

Pièces jointes

  • pat66 - cacher 1 à n puis aucun- v2.xlsm
    243.1 KB · Affichages: 7
Dernière édition:

Dranreb

XLDnaute Barbatruc
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
 

Discussions similaires

T
  • Résolu(e)
Microsoft 365 pb effacement macro
Réponses
8
Affichages
427
Themax
T
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…