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 :

Control si textbox vide [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut Control si textbox vide
    bonjour au forum,

    Je souhaite effectué le control sur des TextBox, si l'une d'elles est vide un message s'affiche et donne le nom du label concerné puis focus et coloration de la TextBox en question. J'arrive a faire une partie mais dans l'état actuel, les deux TextBox sont colorées

    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
    For Each ctl In Me.Controls
        If TypeOf ctl Is MSForms.TextBox Then
            If ctl.Text = "" Then
    'Message disant que Validité est vide
                MsgBox "Saisie incomplète"
                    With TxtBoxValidite
                    .BorderStyle = 1: .BackColor = RGB(241, 221, 220): .BorderColor = RGB(255, 0, 0)
                    .SetFocus
                    End With
                    With TxtBoxCategorie
                    .BorderStyle = 1: .BackColor = RGB(241, 221, 220): .BorderColor = RGB(255, 0, 0)
                    .SetFocus
                    End With
                Exit Sub
            End If
        End If
    Next
    Pouvez-vous m'aider svp?

    Merci

    Stephanie

  2. #2
    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,

    Remplace par ceci :
    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
     
    Dim Ctl As Control
     
    For Each Ctl In Me.Controls
     
        If TypeOf Ctl Is MSForms.TextBox Then
     
            If Ctl.Text = "" Then
     
                'Message disant que Validité est vide
                MsgBox "Saisie incomplète !"
     
                With Ctl
     
                    .BorderStyle = 1
                    .BackColor = RGB(241, 221, 220)
                    .BorderColor = RGB(255, 0, 0)
                    .SetFocus
     
                End With
     
                Exit Sub
     
            Else
     
                'si le contrôle est rempli le remettre comme
                'tu veux qu'il soit...
                With Ctl
     
    '                .BorderStyle = 1
    '                .BackColor = RGB(241, 221, 220)
    '                .BorderColor = RGB(255, 0, 0)
    '                .SetFocus
     
                End With
     
            End If
     
        End If
     
    Next Ctl
    Hervé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour Hervé et au forum

    Votre solution fonctionne bien mais je suis confronté à un autre problème que je n'avais pas remarqué.

    Je fais un premier test en oubliant de remplir TxtBoxCategorie, le message s'affiche puis un second test en oubliant cette fois ci TxtBoxValidite, je constate que dans la liste en feuille3, 2 lignes ont été créée
    Colonne K et L
    - vide et 12
    - légume et vide

    Ce que je souhaite obtenir
    Colonne K et L
    légume 12

    Voici le code
    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
    Dim ctl As Control
    Lign = Sheets("Listes").[K65000].End(xlUp).Row + 1
     
    For Each ctl In Me.Controls
        If TypeOf ctl Is MSForms.TextBox Then
            If ctl.Text = "" Then
                'Message disant que Validité est vide
                MsgBox "Saisie incomplète !"
                With ctl
                    .BorderStyle = 1
                    .BackColor = RGB(241, 221, 220)
                    .BorderColor = RGB(255, 0, 0)
                    .SetFocus
                End With
                Lign = Sheets("Listes").[K65000].End(xlUp).Row + 1
                Sheets("Listes").Cells(Lign, 11) = TxtBoxCategorie
                Sheets("Listes").Cells(Lign, 12) = TxtBoxValidite
                Exit Sub
            Else
                With ctl
                End With
            End If
        End If
    Next ctl
    D'où vient le problème ?

    Merci

    Stephanie

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Essaies comme ceci (n'écris sur la feuille que si tous les textbox sont 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim Ctl As Control
    Dim Lign As Long
    Dim Flag As Boolean
     
    Lign = Worksheets("Listes").[K65000].End(xlUp).Row + 1
     
    For Each Ctl In Me.Controls
        If TypeOf Ctl Is MSForms.TextBox Then
            If Ctl.Text = "" Then
                'Message disant que Validité est vide
                MsgBox "Saisie incomplète !"
                With Ctl
                    .BorderStyle = 1
                    .BackColor = RGB(241, 221, 220)
                    .BorderColor = RGB(255, 0, 0)
                    .SetFocus
                End With
                Flag = True
                Exit For
            End If
        End If
    Next Ctl
     
    If Not Flag Then
        With Worksheets("Listes")
            Lign = .Cells(.Rows.Count, "K").End(xlUp).Row + 1
            .Cells(Lign, 11) = TxtBoxCategorie
            .Cells(Lign, 12) = TxtBoxValidite
        End With
    End If
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour Hervé, Mercatog et au forum

    Ca fonctionne, mais la fenetre se ferme en validant Message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Saisie incomplète !"
    La fenêtre se ferme.

    J'ai enlevé aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lign = Worksheets("Listes").[K65000].End(xlUp).Row + 1
    ca fait doublon avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With Worksheets("Listes")
            Lign = .Cells(.Rows.Count, "K").End(xlUp).Row + 1
            .Cells(Lign, 11) = TxtBoxCategorie
            .Cells(Lign, 12) = TxtBoxValidite
        End With
    Le problème vient surement deen fin de macro car si je l'enlève le code de Mercatog fonctionne.

    Comment faire pour intégrer la fermeture de l'UserForm à la fin de saisie complète de la fenêtre ?

    Merci

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Comme ceci?
    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
    Dim Ctl As Control
    Dim Lign As Long
    Dim Flag As Boolean
     
    For Each Ctl In Me.Controls
        If TypeOf Ctl Is MSForms.TextBox Then
            If Ctl.Text = "" Then
                'Message disant que Validité est vide
                MsgBox "Saisie incomplète !"
                With Ctl
                    .BorderStyle = 1
                    .BackColor = RGB(241, 221, 220)
                    .BorderColor = RGB(255, 0, 0)
                    .SetFocus
                End With
                Flag = True
                Exit For
            End If
        End If
    Next Ctl
     
    If Not Flag Then
        With Worksheets("Listes")
            Lign = .Cells(.Rows.Count, "K").End(xlUp).Row + 1
            .Cells(Lign, 11) = TxtBoxCategorie
            .Cells(Lign, 12) = TxtBoxValidite
        End With
        Unload Me
    End If
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    Bonjour Hervé, Mercatog, et au forum,

    Vous m'avez devancé, j'ai trouvé aussi la solution.

    Merci à vous.

    Stephanie

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

Discussions similaires

  1. Controler des textBox dans des thread
    Par ramaro dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/04/2008, 14h21
  2. CustomValidator inopérant quand TextBox vide
    Par cyrano_de_bergerac dans le forum C#
    Réponses: 1
    Dernier message: 14/01/2008, 13h48
  3. controler le Textbox numérique
    Par bissdu91 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 28/07/2007, 15h10
  4. controle dans textBox
    Par afrodje dans le forum VB.NET
    Réponses: 13
    Dernier message: 14/03/2007, 09h07
  5. Réponses: 18
    Dernier message: 29/01/2007, 16h13

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