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

XL 2013 Ouvrir ou fermer un formulaire en cliquant sur une shape

ericm1960

XLDnaute Nouveau
Bonjour,

Je parviens à ouvrir un formulaire en cliquant sur ma forme, mais je souhaite que, si le formulaire est déjà ouvert, un autre clic sur la forme ferme le formulaire. Quelqu'un peut-il m'aider ?
VB:
'Clic sur T0
Sub ShapeT0Click()
    Dim Tbl As ListObject
    Dim TabDept() As Variant
    Dim ShapeName As String
    Dim PIC As String
    Dim ShapeT0 As String
    Dim i As Integer
   
    'Chargement des tableaux en mémoire
    Set Tbl = Range("TableauT0").Parent.ListObjects("TableauT0")
    TabDept = Tbl.DataBodyRange.Value
   
    ShapeName = Application.Caller
    Sheets("Tableau T0").Range("I25") = ShapeName
    'Parcours du tableau des PIC
    For i = 1 To UBound(TabDept, 1)
        ShapeT0 = TabDept(i, 8)
        If ShapeT0 = ShapeName Then Exit For
    Next i
 
    If i <= UBound(TabDept) Then
                 Load USF_T0
                  USF_T0.Show
     
    Else
        MsgBox "Erreur: la Shape <" & ShapeName & "> ne correspond pas à une T0 !"
    End If
End Sub

En vous remerciant par avance
ERic
 

mapomme

XLDnaute Barbatruc
Bonjour @ericm1960,

Voir fichier joint ?

Code de l'Userform1 :
VB:
Private Sub UserForm_Initialize()
   Ouvert = True
End Sub

Private Sub UserForm_Terminate()
   Ouvert = False
End Sub

Code dans module1 :
VB:
Public Ouvert As Boolean

Sub USF()
   If Ouvert Then Unload UserForm1 Else UserForm1.Show vbModeless
End Sub
 

Pièces jointes

  • ericm1960- Ouvrir-fermer USF- v1.xlsm
    18.4 KB · Affichages: 21

job75

XLDnaute Barbatruc
Bonjour ericm1960,
Remplacez le dernier test If/End If par :
VB:
    If i <= UBound(TabDept) Then
        For i = 0 To UserForms.Count - 1
            If UserForms(i).Name = "USF_T0" Then Unload USF_T0: Exit Sub
        Next
        USF_T0.Show 0 'non modal
    Else
        MsgBox "Erreur: la Shape <" & ShapeName & "> ne correspond pas à une T0 !"
    End If
A+
 

patricktoulon

XLDnaute Barbatruc
Bonjour
perso je vire tout ce qui est variable "ouvert" dans module et userform
et la macro de la shape tout simplement
VB:
Sub USF()
   If UserForm1.Visible Then Unload UserForm1 Else UserForm1.Show 0
End Sub
 

Discussions similaires

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