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 :

Vérifier le remplissage de CERTAINS TextBoxs [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut Vérifier le remplissage de CERTAINS TextBoxs
    Bonsoir le forum

    En règle générale, je désire souvent m'assurer que tous les TextBoxs d'un UserForm soient remplis. J'utilise, pour ce faire, le code suivant, pour (dans l'exemple) les 5 TextBoxs :
    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
    Sub VérifRemplissage()
        Dim i As Byte
        For i = 1 To 5
      If Controls("TextBox" & i).Value = "" Then
                     CommandButton1.Enabled = False  
                Exit Sub
            End If
        Next i
        CommandButton1.Enabled = True
    End Sub
    Private Sub TextBox1_change()
        VérifRemplissage
    End Sub
    Private Sub TextBox2_change()
    VérifRemplissage
    End Sub
    Private Sub TextBox3_change()
    VérifRemplissage
    End Sub
    Private Sub TextBox4_change()
    VérifRemplissage
    End Sub
    Private Sub TextBox5_change()
    VérifRemplissage
    End Sub
    Ma question :
    1/ Puis-je m'assurer que si les TextBoxs 1, 3 & 5 ne sont pas "vides" alors CommandButton1.Enabled = True et si oui, comment "le dire" dans la boucle (For i = 1 to 5) ??
    Merci de vos contributions et bonne fin de week-end.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Si j'ai bien compris, vous voulez interdire toute action sur le bouton "CommandButton1" si toutes les textbox ne sont pas remplies.
    Donc, il faut tester les textbox uniquement lorsque l'on clique sur le bouton, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
        For i = 1 To 5
            If Controls("TextBox" & i).Value = "" Then Exit Sub
        Next i
        'sinon si toutes les textBox sont remplies, exécution de la suite du programme
    End Sub
    Si l'une des textBox est vide le programme ne s'exécutera pas, dans le cas contraire il s'exécutera.

    Si vous voulez ne vérifier que les textbox 1,3 et 5 alors mettez ceci
    Cdlt

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Bonjour,

    Une solution possible avec ce code :

    Les contrôles TextBox qui doivent être remplis prennent une couleur de fond jaune s'ils ne sont pas remplis (Nb : le rouge = Rgb(255,0,0)).
    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
     
    Sub Verif_Remplissage()
     
    Dim ListeControles As Variant
    Dim I As Integer
    Dim ControleTextBox As String
     
        ControleTextBox = ""
        ListeControles = Array(1, 3, 5)
        With UserForm1 ' A adapter
             For I = LBound(ListeControles) To UBound(ListeControles)
                 With .Controls("TextBox" & ListeControles(I))
                      .BackColor = RGB(255, 255, 255)
                      If .Value = "" Then
                         .BackColor = RGB(255, 255, 0)
                         ControleTextBox = ControleTextBox & "TextBox" & ListeControles(I) & Chr(10)
                      End If
                 End With
             Next I
        End With
     
        If ControleTextBox <> "" Then
           MsgBox ControleTextBox, vbCritical, "Absence de valeur pour le ou les TextBox dans Userform1"
        End If
     
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonjour le forum
    Bonjour ARTURO83 , bonjour Eric KERGRESSE

    Tout d'abord, de votre rapidité
    @ARTURO : J'aurais du prendre plus de temps à formuler ma question en expliquant que mon souhait est, une fois l'utilisateur doit remplir les TextBoxs 1, 3 & 5 tandis que sur un autre programme, ce sera les 2, 3 & 5 ou1 , 4 & 5. Je désirerais que tous les cas de figure soient envisageables AFIN que le bouton soit actif. Merci encore.
    @ Eric KERGRESSE : Vous avez Excellemment cerné mon souhait en plaçant le ARRAY. J'y avais pensé mais débute dans le VBA alors ....j'ai de nombreuses voire très nombreuses lacunes. Toutefois, le programme ne fonctionne pas comme je le veux car le MSG apparaît dès le remplissage de la première Box en m'indiquant que les suivantes (contenues dans l'ARRAY) sont à renseigner ce qui peut être fastidieux s'il y a en a beaucoup. De plus, j'ai tenté de placer mes instructions "CommandButtton.Enabled = false (si un malin revenait en arrière et supprimait le contenu d'un TextBox) puis true en fin de programme" mais en vain. Dès que la 1ère TextBox est renseignée, mon bouton est actif...
    Je vais néanmoins, avec mes maigres connaissances, voir tout cela ce soir car je dois d'absenter.
    P.S : Serait il possible d'avoir une petite explication sur LBound & UBound. Merci

    Encore merci à tous les deux et bon dimanche.
    @+ Ericcool02

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Dans mon userform, cette procédure est associée à un CommandButton dédié à la vérification, il n'y a donc pas d'arrêt à la première saisie.

  6. #6
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Oui, vous avez raison, j'étais resté dans ma bulle avec pour objectif, le remplissage de mes TextBoxs qui active le CommandButton. Je sais que cela n'est pas de mise mais j'ai joint un fichier
    qui résume ce que je désire faire à savoir que le Bouton soit actif si certains TextBoxs sont renseignés. J'espère avoir été clair dans ma demande.
    Fichiers attachés Fichiers attachés

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Quelle est la justification des différents cas (1,2, 4).... indiqués ? Est ce que ces cas peuvent être identifiés au départ ?

  8. #8
    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
    Bonjour,

    Ma question :
    1/ Puis-je m'assurer que si les TextBoxs 1, 3 & 5 ne sont pas "vides" alors CommandButton1.Enabled = True
    De cette façon par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CommandButton1.Enabled = TextBox1.Text <> "" And TextBox3.Text <> "" And TextBox5.Text <> ""
    Code à mettre en dehors de la boucle de contrôle avant ou après cette dernière !

  9. #9
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Re le forum
    Re le fil
    Bonjour Theze

    @Theze. Merci pour ta réponse que j'utilisais auparavant mais je veux passer par une boucles ET un ARRAY ou CASE (mais je ne sais pas faire) pour éviter d'encombrer mon code.

    @ Eric KERGRESSE.
    Quelle est la justification des différents cas (1,2, 4).... indiqués ? Est ce que ces cas peuvent être identifiés au départ ?
    Dans le présent cas, je n'ai pas de projet j'ai placé 5 TextBoxs mais il peut y en avoir beaucoup plus et je ne sais, au jour d'aujourd'hui, quels seront les TextBoxs à considérer. Donc dans l'idéal, ce serait de pouvoir, le jour "J", placer les TextBoxs X, Y Z (voire plus) à renseigner impérativement pour accéder au Bouton du USF, dans un ARRAY ou dans un CASE. J'espère avoir été clair

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    J'espère avoir été clair
    Non. J'imaginais plutôt qu'on pouvait avoir N cas identifiés (présents dans une combobox) et qu'en choisissant le cas, seuls les Textbox concernés étaient remplis.

  11. #11
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Les TextBoxs seront identifiés au moment de la création du pogramme. Exemple :- Aujourd'hui programme avec bouton actif si TextBoxs Civilité - Nom - Prénom renseignés soit TextBoxs 1 2 & 3 (dans l'ARRAY je place lesdits TextBoxs) - Demain prog avec bouton actif si TextBoxs Nom - Prénom - Adresse renseignés soit TextBoxs 2, 3 & 4
    - 17/09 prog avec bouton actif si TexBoxs Nom - Adresse et Téléphone soit TextBoxs 2, 4 & 5
    Etc ... Mon problème est que je connais la ou les méthodes par boucle pour obliger l'utilisateur de remplir TOUS les TextBoxs d'un UserForm qui se suivent (TextBox 1 à 5 par ex) mais pas celle où les TextBoxs ont un placement dans le UserForm non hiérarchisé (1, 2, 5, 7 et 11 par ex).
    Bon dimanche - Je dois m'absenter - Je repasse ce soir - Merci de votre compréhension

  12. #12
    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
    Il y a dans ce cas, une façon très simple à mon sens, c'est d'utiliser la propriété Tag des TextBox. Il suffit que cette dernière ne soit pas vide pour les TextBox qui doivent impérativement être renseignés et de contrôler si ils ne sont pas vides :
    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
    39
    40
    41
     
    Private Sub UserForm_Initialize()
     
        'peuvent être définies en mode création ou comme ici, sur l'ouverture de la Form !
        TextBox1.Tag = "A contrôler"
        TextBox3.Tag = "A contrôler"
        TextBox5.Tag = "A contrôler"
        'etc...
     
    End Sub
     
    'ici, pour les test sur Clic du formulaire
    Private Sub UserForm_Click()
     
        Dim Ctrl As Control
        Dim Max As Integer
        Dim NB As Integer
     
        For Each Ctrl In Me.Controls
     
            If TypeName(Ctrl) = "TextBox" Then
     
                'si le Tazg n'est pas vide, c'est un TextBox qui doit être contôlé
                If Ctrl.Tag <> "" Then
     
                    'calcule le nombre de TextBox qui doivent être contrôlés
                    Max = Max + 1
     
                    'si pas vide, incrémente
                    If Ctrl.Object.Text <> "" Then NB = NB + 1
     
                End If
     
            End If
     
        Next Ctrl
     
        'si tous les TextBox devant être renseignés l'ont étés (NB = Max), le bouton sera actif
        CommandButton1.Enabled = (NB = Max)
     
    End Sub

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Je pense que vous devriez modifier la conception de votre boite de dialogue. Visiblement, votre Userform est en lien avec une table de clients qui se compose a minima de leur adresse.
    Pour faire ce que vous souhaitez réaliser, j'aurais une listBox chargée de la table client avec les différents champs dont je dois m'assurer qu'ils sont remplis. En cliquant sur une ligne de la ListBox, je chargerais le client en question dans les différents Textbox correspondant aux champs de la ListBox. Donc le nombre de champs est fini. Le bouton Validation permettrait de ne contrôler que les champs absolument obligatoires dans une adresse.

  14. #14
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonsoir le forum
    Bonsoir le fil

    @ Theze : Yes, je l'avais oublié cette propriété "Tag". Je pense que je vais partir la dessus. Grand Merci à vous.
    @ Eric KERGRESSE : L'exemple que j'ai donné est purement fictif. Je ne travaille sur aucune base de données. Je suis débutant VBa et comme j'ai fait "le tour" des macros dont le but est : "Comment obliger l'utilisateur à renseigner tous les TextBoxs qui se suivent (Tx1 - Tx2 - Tx3 - Tx4 - Tx5 (for i=1 to 5) pour que le CommandButton.Enabled = true", je me suis dit ET SI dans un programme, l'utilisateur doit renseigner que 2,3,4,5... TextBoxs qui ne se suivent pas arithmétiquement .... Qu'elle est la solution à part
    CommandButton1.Enabled = TextBox1.Text <> "" And TextBox3.Text <> "" And TextBox5.Text <> ""
    - Utiliser un ARRAY ou un CASE ??????
    Je vais quand même étudier votre code initial avec le ARRAY et peut-être trouverais-je ?? Un jour ??? une solution ??? Encore grand Merci à vous de vous être "penché" (attention de ne pas tomber) sur mon problème.

    Bonne soirée à toutes & à tous
    @+ Ericcool02

  15. #15
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonjour le forum
    Bonjour le fil

    J'ai passé une bonne partie de la nuit à essayer les différents solutions proposées, à les mixer, en vain car le débutant que je suis n'y parvient pas.
    @Theze : N'y a t'il pas possibilité de passer directement par les TextBox_Change en lieu et place de UserForm-Click (Il faut cliquer sur l'USF après avoir saisi le dernier TextBox pour avoir le Button actif).
    @ Eric KERGRESSE. Ne pouvez-vous pas reprendre l'idée du départ (avec les ARRAY) et l'adapter à mon programme initial #1 en disant CommandButton.Enabled = True si TextBoxs 1, 3, 5 ou 1,2, 5....) sont renseignés ? Ou en faisant une boucle For i = 1, 3, 5 ou 1,2, 5 ou ....
    Merci à vous

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Bonjour,

    Question : Une fois votre CommandButton activé, que faites-vous ?

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ericcool02 Voir le message
    Autre façon de poser ma question précédente : Theze, que je salue, vous a proposé d'identifier les contrôles à saisie obligatoire en remplissant leur tag.
    A partir de quoi, identifiez-vous vos différents cas ?

  18. #18
    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
    Bonjour à vous, Bonjour le Forum,

    Theze, Eric,

    Si je peux me permettre entre 2 posts.

    Une autre voie consisterait à créer une fonction booléenne au sein du code de formulaire.

    Le bouton de validation contrôlerait cette fonction.
    Tant qu'elle n'est pas vraie, le formulaire reste affiché.

    OU BIEN

    Piloter le formulaire à distance, depuis un module standard en déclarant une variable au sein de celui-ci à portée Public.
    Tant que la variable ne répond pas au critère choisi, le formulaire se réaffiche.

    Et, si l'on souhaite aller plus loin, envisager une propriété duformulaire prédéfinie (Property Get)

    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.


  19. #19
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonjour. Comme précisé dans le post #14, l'exemple est purement fictif. Je ne travaille sur rien actuellement. L'exemple basique : 1 USF - 5 Textboxs (T1,T2,T3,T4 & T5) - 1 CommandButton. J'oublie de renseigner un des TextBox, j'appuie sur le Bouton ==> Message "Attention T2 non renseigné, par exemple. Ça, je sais faire.
    Ce que je souhaiterais savoir faire (par curiosité , je n'ai pas encore eu à le faire mais au cas où...) à partir du même modèle mais avec le Bouton non actif (propriété Enabled = False). Si parmi les 5 TextBoxs, un des 3 TextBoxs (que j'aurais indiqué dès le départ - Ex : T1, T3 & T4) est vide, le bouton reste inactif dans le cas contraire (Les 3 TextBoxs désignés sont renseignés), le bouton devient actif. Je prend l'exemple T1,T3 & T4 mais le choix aurait pu être différent. De même, je prends un exemple avec 5 TextBoxs mais il peut y en avoir 20 (ou plus). La boucle serait du genre (fictif) For i = 1 to T1, T3 & T4 ou comme vous l'aviez fait dès le départ avec un ARRAY.

    J'ai omis de préciser dans mon post initial (#1) que le CommandButton avait sa propriété à False dès l'activation.

  20. #20
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Re le fil
    Bonjour MarcelG

    Le fichier de Theze est bien mais il oblige à l'issue de la dernière saisie à cliquer sur le formulaire. J'aurais préféré que le processus se déclenche lors de la saisie effective du dernier TextBox.
    Bonjour et merci MarcelG de votre participation. Je n'ai pas tout saisi dans votre post. Cela est d'un niveau technique que je ne possède malheureusement pas. Je bidouille les exemples que je peux glaner çà et là et c'est tout.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Toutes versions] Conditions "Si Saisie de Certaines Textbox" dans une page
    Par KOUZINE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/05/2012, 18h11
  2. Réponses: 6
    Dernier message: 27/09/2011, 22h57
  3. Remplissage de plusieurs textbox
    Par bobinette33 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/08/2010, 15h25
  4. Réponses: 6
    Dernier message: 07/06/2006, 12h41
  5. [C#]remplissage d'un textbox apres fermeture popup
    Par julio84 dans le forum ASP.NET
    Réponses: 9
    Dernier message: 11/05/2005, 13h44

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