Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Obliger un utilisateur à remplir le UserForm

16 réponses
Avatar
melou_qc
Bonjour =E0 tous!

Je commence tout de suite par vous dire un GROS MERCI. Je viens
r=E9guli=E8rement chercher de l'information dans ces groupes mais cette
fois, je ne trouve pas.

Voici mon probl=E8me :
J'ai cr=E9=E9 un UserForm1 qui contient des TextBox, ComboBox et des
OptionButton (dans un Frame). L'utilisateur rempli mon formulaire et
les donn=E9es sont inscrites dans diff=E9rentes case de ma feuille. Jusque
l=E0, je suis OK.

Avec un bouton, lorsque l'utilisateur a termin=E9 de remplir le
formulaire, je souhaite m'assurer que toutes les informations ont bien
=E9t=E9 entr=E9es. Pour les TextBox et les ComboBox je crois que c'est OK..=
.
du moins =E7a fonctionne. Cependant, pour les OptionButton je n'ai
aucune id=E9e...

De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui doit
=EAtre rempli uniquement si la r=E9ponse de ma ComboBox est "Autre".
J'imagine qu'il y aura une exception pour cette v=E9rification...

Voici le code que j'ai jusqu'=E0 pr=E9sent pour ma validation (que j'ai
r=E9ussi =E0 =E9crire avec les diff=E9rents groupes) :

Private Sub CommandButton2_Click()
If Controls("Textbox1") =3D "" Then
MsgBox "Vous devez ABSOLUMENT indiquer le nom de la personne!",
vbExclamation, _
"ERREUR ... un nom S.V.P."
Controls("Textbox1").SetFocus
Exit Sub
End If
[f31] =3D UserForm1.TextBox1
****
If Controls("ComboBox1") =3D "" Then
MsgBox "Vous devez ABSOLUMENT indiquer le secteur!", vbExclamation, _
"ERREUR ... un secteur S.V.P."
Controls("ComboBox1").SetFocus
Exit Sub
End If
[j49] =3D UserForm1.ComboBox1
***
End Sub


Merci =E0 l'avance pour votre aide.
Melou

10 réponses

1 2
Avatar
LSteph
Bonsoir,

C'est déjà un grand bien que tu souhaites mettre un contrôle de saisie
sur un userform destiné à cet usage, alors que c'est autant une évidence
que souvent laissé pour compte.

Il me semble pouvoir déjà t'apporter une idée pour ceci:
> De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui doit
> être rempli uniquement si la réponse de ma ComboBox est "Autre".

Dans ton initialize mets le textbox.visible à False
et dans le Change du Combo conditionne le True à "Autre"

@+

--
lSteph

melou_qc a écrit :
Bonjour à tous!

Je commence tout de suite par vous dire un GROS MERCI. Je viens
régulièrement chercher de l'information dans ces groupes mais cette
fois, je ne trouve pas.

Voici mon problème :
J'ai créé un UserForm1 qui contient des TextBox, ComboBox et des
OptionButton (dans un Frame). L'utilisateur rempli mon formulaire et
les données sont inscrites dans différentes case de ma feuille. Jusque
là, je suis OK.

Avec un bouton, lorsque l'utilisateur a terminé de remplir le
formulaire, je souhaite m'assurer que toutes les informations ont bien
été entrées. Pour les TextBox et les ComboBox je crois que c'est OK...
du moins ça fonctionne. Cependant, pour les OptionButton je n'ai
aucune idée...

De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui doit
être rempli uniquement si la réponse de ma ComboBox est "Autre".
J'imagine qu'il y aura une exception pour cette vérification...

Voici le code que j'ai jusqu'à présent pour ma validation (que j'ai
réussi à écrire avec les différents groupes) :

Private Sub CommandButton2_Click()
If Controls("Textbox1") = "" Then
MsgBox "Vous devez ABSOLUMENT indiquer le nom de la personne!",
vbExclamation, _
"ERREUR ... un nom S.V.P."
Controls("Textbox1").SetFocus
Exit Sub
End If
[f31] = UserForm1.TextBox1
****
If Controls("ComboBox1") = "" Then
MsgBox "Vous devez ABSOLUMENT indiquer le secteur!", vbExclamation, _
"ERREUR ... un secteur S.V.P."
Controls("ComboBox1").SetFocus
Exit Sub
End If
[j49] = UserForm1.ComboBox1
***
End Sub


Merci à l'avance pour votre aide.
Melou


Avatar
dunkelzahn
Hello,

Je fais également un classeur où beaucoup de choses passent par des
userforms ou des automatismes par programmation VBA. Comme, le code
VBA et les userforms peuvent être désactivées par des otions de
sécurité, j'ai eu l'idée de créer une page blanche spéciale avec un
texte qui est affichée par défaut puis enregistrée au moment de la
fermeture. Cette fenêtre cache les autres feuilles présentes. A
l'ouverture du classeur, si le VBA est activé, cette feuille est
cachée et les autres réactivées. Si ca peut t'aider dans ton systèm e
melou_qc...

On 4 août, 22:31, LSteph wrote:
Bonsoir,

C'est déjà un grand bien que tu souhaites mettre un contrôle de sai sie
sur un userform destiné à cet usage, alors que c'est autant une évi dence
que souvent laissé pour compte.

Il me semble pouvoir déjà t'apporter une idée pour ceci:
 > De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui do it
 > être rempli uniquement si la réponse de ma ComboBox est "Autre".

Dans ton initialize mets le textbox.visible à False
et dans le Change du Combo conditionne le True à "Autre"

@+

--
lSteph

melou_qc a écrit :



> Bonjour à tous!

> Je commence tout de suite par vous dire un GROS MERCI. Je viens
> régulièrement chercher de l'information dans ces groupes mais cette
> fois, je ne trouve pas.

> Voici mon problème :
> J'ai créé un UserForm1 qui contient des TextBox, ComboBox et des
> OptionButton (dans un Frame). L'utilisateur rempli mon formulaire et
> les données sont inscrites dans différentes case de ma feuille. Jus que
> là, je suis OK.

> Avec un bouton, lorsque l'utilisateur a terminé de remplir le
> formulaire, je souhaite m'assurer que toutes les informations ont bien
> été entrées. Pour les TextBox et les ComboBox je crois que c'est OK...
> du moins ça fonctionne. Cependant, pour les OptionButton je n'ai
> aucune idée...

> De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui doit
> être rempli uniquement si la réponse de ma ComboBox est "Autre".
> J'imagine qu'il y aura une exception pour cette vérification...

> Voici le code que j'ai jusqu'à présent pour ma validation (que j'ai
> réussi à écrire avec les différents groupes) :

> Private Sub CommandButton2_Click()
> If Controls("Textbox1") = "" Then
> MsgBox "Vous devez ABSOLUMENT indiquer le nom de la personne!",
> vbExclamation, _
> "ERREUR ... un nom S.V.P."
> Controls("Textbox1").SetFocus
> Exit Sub
> End If
> [f31] = UserForm1.TextBox1
> ****
> If Controls("ComboBox1") = "" Then
> MsgBox "Vous devez ABSOLUMENT indiquer le secteur!", vbExclamation, _
> "ERREUR ... un secteur S.V.P."
> Controls("ComboBox1").SetFocus
> Exit Sub
> End If
> [j49] = UserForm1.ComboBox1
> ***
> End Sub

> Merci à l'avance pour votre aide.
> Melou- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
lSteph
Bonjour,

Une idée certes qui ne concerne pas directement le contrôle de
validation
mais qui s'avère utile de longue date, voici en référence:

http://www.excelabo.net/excel/macroslancer.php#forcermacros

;-)

--
lSteph


On 5 août, 10:48, dunkelzahn wrote:
Hello,

Je fais également un classeur où beaucoup de choses passent par des
userforms ou des automatismes par programmation VBA. Comme, le code
VBA et les userforms peuvent être désactivées par des otions de
sécurité, j'ai eu l'idée de créer une page blanche spéciale ave c un
texte qui est affichée par défaut puis enregistrée au moment de la
fermeture. Cette fenêtre cache les autres feuilles présentes. A
l'ouverture du classeur, si le VBA est activé, cette feuille est
cachée et les autres réactivées. Si ca peut t'aider dans ton syst ème
melou_qc...

On 4 août, 22:31, LSteph wrote:

> Bonsoir,

> C'est déjà un grand bien que tu souhaites mettre un contrôle de s aisie
> sur un userform destiné à cet usage, alors que c'est autant une é vidence
> que souvent laissé pour compte.

> Il me semble pouvoir déjà t'apporter une idée pour ceci:
> > De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui do it
> > être rempli uniquement si la réponse de ma ComboBox est "Autre".

> Dans ton initialize mets le textbox.visible à False
> et dans le Change du Combo conditionne le True à "Autre"

> @+

> --
> lSteph

> melou_qc a écrit :

> > Bonjour à tous!

> > Je commence tout de suite par vous dire un GROS MERCI. Je viens
> > régulièrement chercher de l'information dans ces groupes mais cet te
> > fois, je ne trouve pas.

> > Voici mon problème :
> > J'ai créé un UserForm1 qui contient des TextBox, ComboBox et des
> > OptionButton (dans un Frame). L'utilisateur rempli mon formulaire et
> > les données sont inscrites dans différentes case de ma feuille. J usque
> > là, je suis OK.

> > Avec un bouton, lorsque l'utilisateur a terminé de remplir le
> > formulaire, je souhaite m'assurer que toutes les informations ont bie n
> > été entrées. Pour les TextBox et les ComboBox je crois que c'es t OK...
> > du moins ça fonctionne. Cependant, pour les OptionButton je n'ai
> > aucune idée...

> > De plus, juste pour mettre un peu de piquant, j'ai un TextBox qui doi t
> > être rempli uniquement si la réponse de ma ComboBox est "Autre".
> > J'imagine qu'il y aura une exception pour cette vérification...

> > Voici le code que j'ai jusqu'à présent pour ma validation (que j' ai
> > réussi à écrire avec les différents groupes) :

> > Private Sub CommandButton2_Click()
> > If Controls("Textbox1") = "" Then
> > MsgBox "Vous devez ABSOLUMENT indiquer le nom de la personne!",
> > vbExclamation, _
> > "ERREUR ... un nom S.V.P."
> > Controls("Textbox1").SetFocus
> > Exit Sub
> > End If
> > [f31] = UserForm1.TextBox1
> > ****
> > If Controls("ComboBox1") = "" Then
> > MsgBox "Vous devez ABSOLUMENT indiquer le secteur!", vbExclamation, _
> > "ERREUR ... un secteur S.V.P."
> > Controls("ComboBox1").SetFocus
> > Exit Sub
> > End If
> > [j49] = UserForm1.ComboBox1
> > ***
> > End Sub

> > Merci à l'avance pour votre aide.
> > Melou- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -


Avatar
melou_qc
Merci à tous pour vos idées mais malheureusement, ça ne répond pas à
mon besoin. Je veux empêcher l'utilisateur de continuer la procédure
tant qu'il n'aura pas rempli toute les informations.

Pour ce qui est de manqué un textbox pour l'afficher en temps et lieu,
ça pourrait être tout de même intéressant. Je ne sais cependant pas
comment faire. Serait-il possible de me donner un peu plus d'info
S.V.P.?

Merci encore et je continue de chercher...
Avatar
lSteph
Bonjour,

Ci après un exemple de code, mais on peut aussi faire
en fonction de ton classeur tu peux aller le poser là http://cjoint.com
et nous redonner le lien ici.

Private Sub Annuler_Click()
Unload Me
End Sub

Private Sub ComboBox1_Change()

'ici on conditionne l'apparition du textbox
TextBox1.Visible = ComboBox1.ListIndex > -1

TextBox2.Value = ComboBox1
TextBox3.Value = Feuil2.Range("b3", Feuil2.[b65536].End(3)) _
.Cells(ComboBox1.ListIndex + 1)
End Sub



Private Sub UserForm_Initialize()
Feuil1.Activate
With Feuil2
ComboBox1.RowSource = Feuil2.Name & "!" & .Range("a3", .
[b65536].End(3)).Address
End With
'au départ on cache le textbox
TextBox1.Visible = False
End Sub

Private Sub Validation_Click()
Dim last As Long, NumLot As Long
last = [a65536].End(xlUp)(2).Row

If Len(ComboBox1) = 0 Then
MsgBox "saisie incomplète"
ComboBox1.SetFocus: Exit Sub
End If
On Error Resume Next
NumLot = CLng(TextBox1)
On Error GoTo 0
If NumLot = 0 Then
MsgBox "saisie non conforme N° Lot "
TextBox1.SetFocus: Exit Sub
End If

Cells(last, 1) = TextBox2
Cells(last, 2) = TextBox3
Cells(last, 3) = NumLot
Unload Me: Call TriTable
End Sub

'lSteph

On 5 août, 15:02, melou_qc wrote:
Merci à tous pour vos idées mais malheureusement, ça ne répond pa s à
mon besoin. Je veux empêcher l'utilisateur de continuer la procédure
tant qu'il n'aura pas rempli toute les informations.

Pour ce qui est de manqué un textbox pour l'afficher en temps et lieu,
ça pourrait être tout de même intéressant. Je ne sais cependant p as
comment faire. Serait-il possible de me donner un peu plus d'info
S.V.P.?

Merci encore et je continue de chercher...


Avatar
melou_qc
Bonjour,

OUFFF! tout un code! À première lecture, je n'y comprends pas grand
chose. Je vais prendre le temps de bien relire et me concentrer.

Pour ce qui est de publier mon classeur, je ne peux malheureusement
pas le faire. Il s'agit d'une outil clinique en projet de recherche
pour validation et de toute façon, il dépase le 500 ko limite.

Peut-être quelques précisions sur mon classeur...
TextBox11 dépend du ComboBox3 --> Si la réponse dans ComboBox3 est
"Autre" je veux que l'utilisateur "précise" dans le TextBox11
Idem pour TextBox12 avec le ComboBox4

Merci!
Avatar
lSteph
... voici un mini exemple qui reprend le principe que tu évoques

http://cjoint.com/?ifrlniDuh8

en voici le code pour ceux qui suivent
;-)

'''''dans le code du Userform
Private Sub Annuler_Click()
Unload Me

End Sub

Private Sub ComboBox1_Change()

TextBox1 = ""
TextBox1.Visible = ComboBox1.ListIndex = 3
End Sub
Private Sub ComboBox2_Change()

TextBox2 = ""
TextBox2.Visible = ComboBox2.ListIndex = 3
End Sub

Private Sub UserForm_Initialize()
TextBox1.Visible = False
TextBox2.Visible = False
End Sub

Private Sub Valider_Click()
If ComboBox1.ListIndex < 0 Then _
ComboBox1.SetFocus: MsgBox "Incomplet": Exit Sub
If TextBox1.Visible = True And Len(TextBox1) = 0 Then _
TextBox1.SetFocus: MsgBox "Précisez": Exit Sub
If ComboBox2.ListIndex < 0 Then _
ComboBox2.SetFocus: MsgBox "Incomplet": Exit Sub
If TextBox2.Visible = True And Len(TextBox1) = 0 Then _
TextBox2.SetFocus: MsgBox "Précisez": Exit Sub
With [a65536].End(xlUp)(2)
.Value = ComboBox1
.Offset(0, 1) = TextBox1
.Offset(0, 2) = ComboBox2
.Offset(0, 3) = TextBox2
.Offset(0, 4) = Format(Now, "yyyy-mm-dd hh:nn:ss")
End With

End Sub

Private Sub UserForm_Terminate()
[f1].Activate
End Sub


On 5 août, 16:01, melou_qc wrote:
Bonjour,

OUFFF! tout un code! À première lecture, je n'y comprends pas grand
chose. Je vais prendre le temps de bien relire et me concentrer.

Pour ce qui est de publier mon classeur, je ne peux malheureusement
pas le faire. Il s'agit d'une outil clinique en projet de recherche
pour validation et de toute façon, il dépase le 500 ko limite.

Peut-être quelques précisions sur mon classeur...
TextBox11 dépend du ComboBox3 --> Si la réponse dans ComboBox3 est
"Autre" je veux que l'utilisateur "précise" dans le TextBox11
Idem pour TextBox12 avec le ComboBox4

Merci!



en
Avatar
lSteph
(explication j'ai utilisé la propriété rowsource des combobox (Fenê=
tre
propriétés) elle fait ref à G2:g5
tu noteras que le Listindex à 3 correspond à la 4ème valeur de la
liste qui correspond à "autre"
Private Sub ComboBox1_Change()

TextBox1 = "" 'on efface en cas de changement
TextBox1.Visible = ComboBox1.ListIndex = 3 'on affiche si c'est 3 don=


c autre
End Sub




Ensuite dans la validation on ne controle le textbox que s'il est
toujours visible
Private Sub Valider_Click()
If ComboBox1.ListIndex < 0 Then _
ComboBox1.SetFocus: MsgBox "Incomplet": Exit Sub
If TextBox1.Visible = True And Len(TextBox1) = 0 Then _
TextBox1.SetFocus: MsgBox "Précisez": Exit Sub


Avatar
Francois L
lSteph a écrit :

Bonjour,

Si, y'en a qui suivent...


Plutôt que :
If TextBox2.Visible = True And Len(TextBox1) = 0 Then _

Ce ne serait pas
If TextBox2.Visible = True And Len(TextBox2) = 0 Then _

--
François L


... voici un mini exemple qui reprend le principe que tu évoques

http://cjoint.com/?ifrlniDuh8

en voici le code pour ceux qui suivent
;-)

'''''dans le code du Userform
Private Sub Annuler_Click()
Unload Me

End Sub

Private Sub ComboBox1_Change()

TextBox1 = ""
TextBox1.Visible = ComboBox1.ListIndex = 3
End Sub
Private Sub ComboBox2_Change()

TextBox2 = ""
TextBox2.Visible = ComboBox2.ListIndex = 3
End Sub

Private Sub UserForm_Initialize()
TextBox1.Visible = False
TextBox2.Visible = False
End Sub

Private Sub Valider_Click()
If ComboBox1.ListIndex < 0 Then _
ComboBox1.SetFocus: MsgBox "Incomplet": Exit Sub
If TextBox1.Visible = True And Len(TextBox1) = 0 Then _
TextBox1.SetFocus: MsgBox "Précisez": Exit Sub
If ComboBox2.ListIndex < 0 Then _
ComboBox2.SetFocus: MsgBox "Incomplet": Exit Sub
If TextBox2.Visible = True And Len(TextBox1) = 0 Then _
TextBox2.SetFocus: MsgBox "Précisez": Exit Sub
With [a65536].End(xlUp)(2)
.Value = ComboBox1
.Offset(0, 1) = TextBox1
.Offset(0, 2) = ComboBox2
.Offset(0, 3) = TextBox2
.Offset(0, 4) = Format(Now, "yyyy-mm-dd hh:nn:ss")
End With

End Sub

Private Sub UserForm_Terminate()
[f1].Activate
End Sub


On 5 août, 16:01, melou_qc wrote:
Bonjour,

OUFFF! tout un code! À première lecture, je n'y comprends pas grand
chose. Je vais prendre le temps de bien relire et me concentrer.

Pour ce qui est de publier mon classeur, je ne peux malheureusement
pas le faire. Il s'agit d'une outil clinique en projet de recherche
pour validation et de toute façon, il dépase le 500 ko limite.

Peut-être quelques précisions sur mon classeur...
TextBox11 dépend du ComboBox3 --> Si la réponse dans ComboBox3 est
"Autre" je veux que l'utilisateur "précise" dans le TextBox11
Idem pour TextBox12 avec le ComboBox4

Merci!



en


Avatar
lSteph
:o)) Il yen a bien au moins UN !
..et c'est un L
...oupsss
Je remet ma tenue de shadock et je repompe...
..donc ainsi: http://cjoint.com/?ifrL1v65m0


Merci!

--
LSteph
(...de toutes façons j'ai les noms)

On 5 août, 17:22, Francois L
wrote:
lSteph a crit :

Bonjour,

Si, y'en a qui suivent...

Plut t que :
If TextBox2.Visible = True And Len(TextBox1) = 0 Then _

Ce ne serait pas
If TextBox2.Visible = True And Len(TextBox2) = 0 Then _

--
Fran ois L

> ... voici un mini exemple qui reprend le principe que tu voques

>http://cjoint.com/?ifrlniDuh8

> en voici le code pour ceux qui suivent
> ;-)

> '''''dans le code du Userform
> Private Sub Annuler_Click()
> Unload Me

> End Sub

> Private Sub ComboBox1_Change()

> TextBox1 = ""
> TextBox1.Visible = ComboBox1.ListIndex = 3
> End Sub
> Private Sub ComboBox2_Change()

> TextBox2 = ""
> TextBox2.Visible = ComboBox2.ListIndex = 3
> End Sub

> Private Sub UserForm_Initialize()
> TextBox1.Visible = False
> TextBox2.Visible = False
> End Sub

> Private Sub Valider_Click()
> If ComboBox1.ListIndex < 0 Then _
> ComboBox1.SetFocus: MsgBox "Incomplet": Exit Sub
> If TextBox1.Visible = True And Len(TextBox1) = 0 Then _
> TextBox1.SetFocus: MsgBox "Pr cisez": Exit Sub
> If ComboBox2.ListIndex < 0 Then _
> ComboBox2.SetFocus: MsgBox "Incomplet": Exit Sub
> If TextBox2.Visible = True And Len(TextBox1) = 0 Then _
> TextBox2.SetFocus: MsgBox "Pr cisez": Exit Sub
> With [a65536].End(xlUp)(2)
> .Value = ComboBox1
> .Offset(0, 1) = TextBox1
> .Offset(0, 2) = ComboBox2
> .Offset(0, 3) = TextBox2
> .Offset(0, 4) = Format(Now, "yyyy-mm-dd hh:nn:ss")
> End With

> End Sub

> Private Sub UserForm_Terminate()
> [f1].Activate
> End Sub

> On 5 ao t, 16:01, melou_qc wrote:
>> Bonjour,

>> OUFFF! tout un code! premi re lecture, je n'y comprends pas grand
>> chose. Je vais prendre le temps de bien relire et me concentrer.

>> Pour ce qui est de publier mon classeur, je ne peux malheureusement
>> pas le faire. Il s'agit d'une outil clinique en projet de recherche
>> pour validation et de toute fa on, il d pase le 500 ko limite.

>> Peut- tre quelques pr cisions sur mon classeur...
>> TextBox11 d pend du ComboBox3 --> Si la r ponse dans ComboBox3 est
>> "Autre" je veux que l'utilisateur "pr cise" dans le TextBox11
>> Idem pour TextBox12 avec le ComboBox4

>> Merci!

> en


1 2