Microsoft 365 Option selon le userform actif

A-Jelil

XLDnaute Nouveau
Bonjour / Bonsoir !
Je souhaite faire prendre option selon mon formulaire (entre plusieurs) qui est actif. Par exemple :
IF usf (actif) est usf1 Then
Fais ceci
ElseIf usf (actif) est usf2 then
Fais cela ,,
Et ...
Que devrais-je faire, s'il vous ?
 
Solution
Si tu tiens absolument à valoriser DIRECTEMENT la TextBox du UserForm qui a appelé le UserForm Calendrier et NE PAS UTILISER la solution triviale de passer par une variable globale d'échange (variable Date ou Objet cible) dont je t'ai indiqué le principe en post #12 et sous forme d'exemple en post #13, il faut passer par une solution NON GÉNÉRIQUE qui effectivement utilise l'objet bien SPÉCIFIQUE: UserFormX.TextBoxY.Value.

A supposer que tes 2 ou 3 ou N UserForms ne sont pas chargés en même temps, et donc qu'un seul UserForm à TextBox soit chargé, j'ai ça qui pourrait t'aider.
VB:
'--------------------------
'Test si UserForm est actif
'--------------------------
Public Function IsUserFormLoaded(UserFormName As String) As...

cp4

XLDnaute Barbatruc
Bonjour !
Mes excuses pour le retard considérable de ma réaction. Quant au code envoyé, je ne l'ai pas reçu.
Cordialement
Boujour,
Pourtant, je viens de récupérer les codes du message privé. C'est la petite enveloppe de l'image ci-dessous (se trouvant en haut à droit de la discussion).
1636533496392.png

Pas très clair! Mais à supposer que tu cliques sur un bouton.

Dans Module standard
VB:
Option Explicit
Option Compare Text
Public NomUsf
Sub essai_userform()
If NomUsf = "userform1" Then
'???? faire ce qu'on veut
MsgBox "userform1 actif"
ElseIf NomUsf = "userform2" Then
'???? faire ce qu'on veut
MsgBox "userform2 actif"
End If
End Sub


Dans Module UserForm, Code bouton

Code:
Option Explicit
Private Sub CommandButton1_Click()
NomUsf = ActiveControl.Parent.Name
Call essai_userform
End Sub

En espérant avoir compris ta demande.

Bonne journée.
 

A-Jelil

XLDnaute Nouveau
Merci pour la proactivité.
Je travaille sur un Userform Calendrier. Au click sur la date, je souhaite qu'un Textbox1 soit renseigné sur le userform actif (userform1 ou userform2, etc...). Voilà mon problème. J'espère avoir été clair.
Cordialement
 

cp4

XLDnaute Barbatruc
Merci pour la proactivité.
Je travaille sur un Userform Calendrier. Au click sur la date, je souhaite qu'un Textbox1 soit renseigné sur le userform actif (userform1 ou userform2, etc...). Voilà mon problème. J'espère avoir été clair.
Cordialement
Heu...! pas du tout clair. Surtout sans fichier.
Dans ces conditions, personnellement je suis incapable de t'aider.
Bonne continuation.
 

Dudu2

XLDnaute Barbatruc
Je travaille sur un Userform Calendrier. Au click sur la date, je souhaite qu'un Textbox1 soit renseigné sur le userform actif (userform1 ou userform2, etc...).
Pour lancer le UserFormCalendrier il faut bien le faire de quelque part.
Si c'est pour valoriser le UserForm1.TextBox1.Value ou le UserForm2.TextBox1.Value c'est qu'on part de ces Controls (double-clic ou clic) pour afficher le UserFormCalendrier et donc on sait donc quoi valoriser.

A moins que le UserForm Calendrier soit "suspendu dans l'air" en permanence ce qui est une approche plutôt étrange et exige que UserForm1, UserForm2 et UserFormCalendrier soient lancés en vbModeless pour pouvoir basculer de l'un vers l'autre. D'un point de vue ergonomique c'est aussi un peu le chaos.

Dans le 1er cas, ce n'est pas le code du UserFormCalendrier qui valorise directement le UserForm1.TextBox1.Value ou le UserForm2.TextBox1.Value .

Il faut passer par une variable globale dans un Module:
VB:
Public DateCalendrier as date
Dans le UserFormCalendrier:
Code:
DateCalendrier = <date choisie dans le calendier>
Unload Me
Dans le UserForm1 ou UserForm2:
Code:
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    UserFormCalendrier.Show
    Me.TextBox1.Value = DateCalendrier
End Sub
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Sur ce modèle avec plus d'options mais gardant ce principe de base pour valoriser la date dans une TextBox:
- Soit à partir d'une variable globale dans un Module destinée à contenir la date,
- Soit à partir d'une variable globale dans un Module destinée à contenir l'Objet cible à valoriser.
 

Pièces jointes

  • Calendrier sur une TextBox.xlsm
    47.5 KB · Affichages: 2

Dudu2

XLDnaute Barbatruc
Un autre méthode pour échanger des valeurs de variables entre des Modules et/ou des UserForms est d'utiliser le Dictionary. Mais là aussi il faut qu'il soit Public et créé dans un Module de manière à le rendre disponible au-delà de l'existence des UserForms.

Le Dictionary permet même de stocker des Objets sous réserve d'une petite manip assez particulière et si ça t'intéresse j'ai créé un code qui l'interface pour ce faire.
 

A-Jelil

XLDnaute Nouveau
Pour lancer le UserFormCalendrier il faut bien le faire de quelque part.
Si c'est pour valoriser le UserForm1.TextBox1.Value ou le UserForm2.TextBox1.Value c'est qu'on part de ces Controls (double-clic ou clic) pour afficher le UserFormCalendrier et donc on sait donc quoi valoriser.

A moins que le UserForm Calendrier soit "suspendu dans l'air" en permanence ce qui est une approche plutôt étrange et exige que UserForm1, UserForm2 et UserFormCalendrier soient lancés en vbModeless pour pouvoir basculer de l'un vers l'autre. D'un point de vue ergonomique c'est aussi un peu le chaos.

Dans le 1er cas, ce n'est pas le code du UserFormCalendrier qui valorise directement le UserForm1.TextBox1.Value ou le UserForm2.TextBox1.Value .

Il faut passer par une variable globale dans un Module:
VB:
Public DateCalendrier as date
Dans le UserFormCalendrier:
Code:
DateCalendrier = <date choisie dans le calendier>
Unload Me
Dans le UserForm1 ou UserForm2:
Code:
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    UserFormCalendrier.Show
    Me.TextBox1.Value = DateCalendrier
End Sub
Merci pour votre généreuse disponibilité.
J'explique davantage mon souci.
J'ai déjà un CALENDRIER sous forme de Userform qui se lance convenablement à partir du Textbox1_DblClick.
J'utilise naturellment le même CALENDRIER pour plusieurs USERFORM. Je souhaite pouvoir valoriser le Textbox du Userform actif.
Ce qu'il me faut, dans un Calendrier_Click, c'est plutôt quelque chose qui aboutit à:

UserFormACTIF.TextBox1.Value = Calendrier.value
Merci bien.
 

Discussions similaires

Réponses
21
Affichages
977

Statistiques des forums

Discussions
312 191
Messages
2 086 051
Membres
103 108
dernier inscrit
Captain NRJ