Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 18h17   #1
Invité de passage
 
Homme Jérôme
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 7
Points : 4
Points : 4
Par défaut Comment obliger un utilisateur à remplir tous les champs d'un Userform

Bonjour à tous
Alors voilà, je ne suis pas un pro de l'informatique, je travaille dans les ressources humaines et je suis amené à développer des outils avec excel..
AUjourd'hui, j'ai crée un Userform et je souhaiterai qu'Excel vérifie que tous les champs (uniquement des textbox) sont renseignés avant de copier les valeurs dans la feuille excel et si tel n'est pas le cas, qu'un message apparaisse pour dire à l'utilisateur qu'il n'a pas tout rempli et qu'il doit recommencer (sans que les cases déjà remplies ne s'éffacent bien entendu...)
Voilà, je ne sais pas si ma demande est claire...
Merci pour votre aide
Gibé2201 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 18h25   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 885
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 885
Points : 7 151
Points : 7 151
Bonjour,

Une solution est de boucler sur les objets de la userform et de tester le TxtBox
Code :
1
2
3
4
5
6
7
8
9
10
Dim ctl As Control
 
For Each ctl In Me.Controls
    If TypeOf ctl Is MSForms.TextBox Then
        If ctl.Text = "" Then
            MsgBox "Saisie incomplète"
            Exit Sub
        End If
    End If
Next
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/08/2011, 18h49   #3
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Bonsoir aux 2 Jérôme,

Bienvenu à Jérôme1 sur ce Forum!

Tout d'abord, je te conseille de lire les 2 Tutoriels de Silkyroad sur le sujet.

Userforms 1

Userforms2

Ensuite, pour rebondir sur le code de notre ami Jérôme2, une propostion.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Btn_Valid_Click()
 
Dim ctrl As Control, ctrlerr As Control
Dim erreur As Boolean
 
For Each ctrl In Me.Controls
    erreur = False
    If TypeOf ctrl Is MSForms.TextBox And Len(ctrl) = 0 Then
            erreur = True
            Set ctrlerr = ctrl
            Exit For
    End If
Next ctrl
 
If erreur = True Then
    MsgBox "Vous n'avez pas rempli toutes les zones"
    ctrlerr.SetFocus
    Set ctrlerr = Nothing
Else
    Me.Hide
End If
 
End Sub
Le code, associé à un bouton, boucle sur tous les contrôles Textbox. Si l'un d'eux est vide, alors le focus le sélectionne.

Bonne soirée à tous.
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 19h19   #4
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 306
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 306
Points : 2 654
Points : 2 654
Bonsoir,
Pour ajouter une option aux réponses proposées par Jérôme et Marcel.
Tu pourrais par exemple faire une fonction booléenne en partant de la proposition de Jérôme et invoquer cette fonction après chaque update des textBox et aussi à l'ouverture de la UserForm.
Ainsi le bouton de validation n'aurait sa propriété Enable à True que lorsque tous les TextBox seront remplis.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub UserForm_Initialize()
  Me.cmdOK.Enabled = IsTxtBoxComplete()
End Sub
Private Sub TextBox1_AfterUpdate()
  Me.cmdOK.Enabled = IsTxtBoxComplete()
End Sub
Private Sub TextBox2_AfterUpdate()
  Me.cmdOK.Enabled = IsTxtBoxComplete()
End Sub
Function IsTxtBoxComplete() As Boolean
  IsTxtBoxComplete = True
  Dim ctl As Control
   For Each ctl In Me.Controls
    If TypeOf ctl Is MSForms.TextBox Then
        If Len(ctl) = 0 Then IsTxtBoxComplete = False: Exit Function
    End If
   Next
End Function
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 21h04   #5
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonsoir,

Pour faire simple et en faisant un copier/coller de la proc proposée par jfontaine, dans le QueryClose de la Form (il est possible de demander quel TextBox doit encore être renseigné avec un Select Case sur ctl.Name) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
 
    Dim ctl As Control
 
    For Each ctl In Me.Controls
        If TypeOf ctl Is MSForms.TextBox Then
            If ctl.Text = "" Then
                MsgBox "Saisie incomplète"
                Cancel = True
                Exit Sub
            End If
        End If
    Next
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 09h08   #6
Invité de passage
 
Homme Jérôme
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 7
Points : 4
Points : 4
Bonjour
Merci à tous pour vos réponses ,

Alors, j'ai essayé avec le code proposé par Marcel
Ca marche disons, presque à 100%
J'ai un pb avec la combinaison de 2 textbox (une demande le nom, l'autre le prénom). dés que les 2 sont remplies, j'ai un code d'erreur '450'...
Pouvez vous m'aider ?
Encore merci
Gibé2201 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 10h36   #7
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 885
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 885
Points : 7 151
Points : 7 151
Poste le code en spécifiant la ligne qui pose problème
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 10h37   #8
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut erreur 450

Bonjour à toi, Bonjour au Forum,

Pux-tu retourner l'intégralité du message d'erreur 450, et préciser sur quelle ligne de ton code s'arrête le débogueur (ligne surlignée en jaune).
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h02   #9
Invité de passage
 
Homme Jérôme
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 7
Points : 4
Points : 4
[IMG]file:///C:/DOCUME%7E1/s8712110/LOCALS%7E1/Temp/moz-screenshot.png[/IMG][IMG]file:///C:/DOCUME%7E1/s8712110/LOCALS%7E1/Temp/moz-screenshot-1.png[/IMG][IMG]file:///C:/DOCUME%7E1/s8712110/LOCALS%7E1/Temp/moz-screenshot-2.png[/IMG]Voici le code complet (désolé je ne sais pas comment faire comme vous...)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Private Sub CommandButton1_Click()

Dim ctrl As Control, ctrlerr As Control
Dim erreur As Boolean

For Each ctrl In Me.Controls
    erreur = False
   If TypeOf ctrl Is MSForms.TextBox And Len(ctrl) = 0 Then
        erreur = True
        Set ctrlerr = ctrl
        Exit For
    End If
Next ctrl
If erreur = True Then
variable = MsgBox("Vous devez remplir toutes les zones", vbCritical)
ctrlerr.SetFocus
Else
    
'Prend le contenu de la boite de dialogue et remplit la première partie du formulaire
Worksheets("Identification-Bilan Année").Range("D9").Value = nomsalarie.Value
Worksheets("Identification-Bilan Année").Range("D10").Value = prenomsalarie.Value
Worksheets("Identification-Bilan Année").Range("D11").Value = matricule.Value
Worksheets("Identification-Bilan Année").Range("D12").Value = age.Value
Worksheets("Identification-Bilan Année").Range("D13").Value = fonction.Value
Worksheets("Identification-Bilan Année").Range("D14").Value = CDate(datefonction.Value)
Worksheets("Identification-Bilan Année").Range("D15").Value = service.Value
Worksheets("Identification-Bilan Année").Range("D20").Value = nomsup.Value
Worksheets("Identification-Bilan Année").Range("D21").Value = prenomsup.Value
Worksheets("Identification-Bilan Année").Range("D22").Value = fonctionsup.Value
Worksheets("Identification-Bilan Année").Range("D23").Value = service.Value
Worksheets("Identification-Bilan Année").Range("D3").Value = periodeeaa.Value
Worksheets("Identification-Bilan Année").Range("D4").Value = CDate(dateeaaprecedent.Value)
Worksheets("Base R&D").Range("AA5").Value = matricule.Value

Unload EAA
Worksheets("Identification-Bilan Année").Activate
End If
End Sub
Le débogueur s'arrête sur la ligne que j'ai mis en Rouge et en gras
l'erreur 450 est : nombre d'argument incorrect ou affectation de propriété incorrecte.
L'erreur se déclenche dés que la textbox nomsalarie et la textbox prenomsalarie sont remplies...
Gibé2201 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h07   #10
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 885
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 885
Points : 7 151
Points : 7 151
Si c'est la longueur de la valeur qui tu veux tester c'est

Si tu veux savoir s'il y a eu une saisie (le code ci-dessous est plus approprié)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h08   #11
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Salut,

Pour utiliser les balises de codes, il te suffit de surligner ton code VBA et de cliquer sur le bouton # de ta boîte de message.

Etonnant. Sur mon poste (Excel 2003), le code fonctionne.

Peux-tu essayer avec cette modification.

Code :
If TypeOf ctrl Is MSForms.TextBox And ctrl.Text = "" Then
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h22   #12
Invité de passage
 
Homme Jérôme
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 7
Points : 4
Points : 4
Merci pour vos retours...
Ca tourne au casse tête... en faisant les modifs indiquées j'ai un code erreur 438 (c'est toujours la même ligne de code qui est surlignée)...est ce que ça peut venir des textbox (l'erreur ne se déclenche que quand ces 2 là sont remplies, pas si seulement l'une des 2 est remplie...)
Gibé2201 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h35   #13
Membre Expert
 
Avatar de MarcelG
 
Homme Marcel GALANO
Développeur informatique
Inscription : juillet 2009
Messages : 644
Détails du profil
Informations personnelles :
Nom : Homme Marcel GALANO
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2009
Messages : 644
Points : 1 255
Points : 1 255
Par défaut If enchaînés

Salut,

Je pense qu'il s'agit de la gestion des conditions.

Modifie ainsi (à adapter)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub CommandButton1_Click()
 
Dim ctrl As Control, ctrlerr As Control
Dim erreur As Boolean
 
For Each ctrl In Me.Controls
    erreur = False
    If TypeOf ctrl Is MSForms.TextBox Then
            If ctrl.Text = "" Then
                    erreur = True
                    Set ctrlerr = ctrl
                    Exit For
            End If
    End If
Next ctrl
 
If erreur = True Then
    MsgBox "Vous n'avez pas rempli toutes les zones"
    ctrlerr.SetFocus
    Set ctrlerr = Nothing
Else
    Me.Hide
End If
 
End Sub
__________________

Bien Cordialement.

Marcel

Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


MarcelG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 11h49   #14
Invité de passage
 
Homme Jérôme
Inscription : août 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 7
Points : 4
Points : 4

Ca y'est ça marche !!
Mille merci
Sans doute à bientôt, j'ai plein de projets qui feront appel à des macros, j'aurai certainement besoin d'un coup de main
Encore merci
Gibé2201 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h08.


 
 
 
 
Partenaires

Hébergement Web