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
Supporter XLD
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+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @patricktoulon :),

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
A condition de ne jamais cacher Userform1 (par un .hide) dans les traitements :D. Taquin que je suis:p
 

Discussions similaires

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi