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

  • Initiateur de la discussion Initiateur de la discussion ericm1960
  • Date de début Date de début

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 !

E

ericm1960

Guest
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
 
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

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+
 
Et bien un grand merci à tous les 2. Je me retrouve avec 2 méthodes simples qui fonctionnent super bien. Je vais utiliser le code de mapomme qui m'a répondu en premier.

Eric
 
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
 
Bonjour @patricktoulon 🙂,

A condition de ne jamais cacher Userform1 (par un .hide) dans les traitements 😀. Taquin que je suis😛
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

P
Réponses
1
Affichages
1 K
P
K
Réponses
2
Affichages
2 K
kwameviagbo
K
D
Réponses
3
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…