IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment obliger un utilisateur à remplir tous les champs d'un Userform


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    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

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Une solution est de boucler sur les objets de la userform et de tester le TxtBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

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


  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    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

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Poste le code en spécifiant la ligne qui pose problème
    Jérôme

  8. #8
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    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

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

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


  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    [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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    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

  11. #11
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeOf ctrl Is MSForms.TextBox And ctrl.Text = "" Then

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

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


  12. #12
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    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...)

  13. #13
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut If enchaînés
    Salut,

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

    Modifie ainsi (à adapter)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

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


  14. #14
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Points : 8
    Points
    8
    Par défaut

    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment obliger un utilisateur à remplir tous les champs d'un Userform
    Par puledad1 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/09/2011, 16h20
  2. [WD-2003] Obligation de remplir tous les champs
    Par halfernet dans le forum Word
    Réponses: 8
    Dernier message: 28/07/2011, 15h19
  3. [1.x] Comment activer le trim pour tous les champs
    Par lr dans le forum Symfony
    Réponses: 4
    Dernier message: 21/01/2010, 12h42
  4. Remplir tous les champs d'un formulaire
    Par SPH1X dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2008, 18h24
  5. Réponses: 7
    Dernier message: 17/05/2006, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo