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 :

Test sur textbox checkbox et doublon [XL-2007]


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 Test sur textbox checkbox et doublon
    Bonjour au forum,

    Voilà, j'ai 2problèmes dans mon suserform
    - le premier concerne textbox et case à cocher
    lorsque l'userform s'affiche verifie que la TextBox18 soit remplie, si oui la checkbox est cochée si non alors logique c'est l'inverse et TextBox18 encadrée en rouge. Ce que j'écris dans UserForm_Initialize()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Me.TextBox18 = "" Then
    CheckBox1 = False
    Me.TextBox18 .BorderColor = RGB(255, 0, 0)
    If Me.TextBox18 <> "" Then
    Else: CheckBox1 = True
    End If
    End If
    Le problème, c'est que ça reste cocher même si TextBox18 est remplie, comment faire ?

    - le deuxième problème est le controle de doublon
    Je saisie dans mon formulaire (qui s'ouvre depuis un bouton d'un autre formulaire)
    le nom puis le nom de l'entreprise etc., si TxtNom ou TxtEntreprise existe, il affiche un message sinon je peux continuer à remplir le reste du formulaire. Ca marche en partie
    Le code de l'userform pour etre plus claire.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Option Explicit
     
    Private Sub TxtNom_Change()
    If TxtNom = "" Then VérifExistence
    'End If
    End Sub
     
    Private Sub TxtEntreprise_Change()
    If TxtEntreprise= "" Then VérifExistence
    'End If
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim r, Y As Long
    Dim ob As Control
    If TextBox18  = "" Then
    MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
    Me.TextBox18 .BorderColor = vbRed 'RGB(255, 0, 0)
    TextBox18 .SetFocus
    Exit Sub
    End If
    For Each ob In Me.Controls
    If ob.Tag > "" Then
    Select Case Val(ob.Tag)
    Case 16, 17, 1
    Feuil9.Cells(gg, Val(ob.Tag)) = Val(ob)
    'Case 16
    'If ob.Value = True Then Feuil9.Cells(gg, Val(ob.Tag)) = 1 Else Feuil9.Cells(gg, Val(ob.Tag)) = 0
    Case 31, 23
    If IsDate(ob) = True Then Feuil9.Cells(gg, Val(ob.Tag)) = CDate(ob) Else Feuil9.Cells(gg, Val(ob.Tag)) = ""
    Case Else
    Feuil9.Cells(gg, Val(ob.Tag)) = ob
    End Select
    End If
    Next
    dico1
    dep.client.Clear
    If dep.TextBox9 = "" Then
    For r = 2 To finf9
    dep.client.AddItem Feuil9.Cells(r, 1) & " " & Feuil9.Cells(r, 3) & " (" & Feuil9.Cells(r, 4) & ")"
    dep.client.List(r - 2, 1) = r
    Next
    dep.client = gg
    Else
    For r = 2 To finf9
    If UCase(Mid(Feuil9.Cells(r, 3), 1, Len(dep.TextBox9))) = UCase(dep.TextBox9) Then
    dep.client.AddItem Feuil9.Cells(r, 1) & " " & Feuil9.Cells(r, 3) & " (" & Feuil9.Cells(r, 4) & ")"
    dep.client.List(Y, 1) = r
    Y = Y + 1
    End If
    Next
    End If
    Unload Me
    End Sub
     
    Private Sub UserForm_activate()
    Dim ob As Control
    For Each ob In Me.Controls
    If ob.Tag > "" Then
    Select Case Val(ob.Tag)
    Case 16, 17
    ob = Format(Feuil9.Cells(gg, Val(ob.Tag)), "0.00")
    ob = Replace(ob, ",", ".")
    Case Else
    ob = Feuil9.Cells(gg, Val(ob.Tag))
    End Select
    End If
    Next
    If nom = "" Then nom = WorksheetFunction.Max(Feuil9.Range("a:a")) + 1
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim aa
    plus
    aa = Feuil18.Range("a2:a" & Feuil18.Range("a6500").End(xlUp).Row)
    ComboBox1.List = aa
    aa = Feuil18.Range("b2:b" & Feuil18.Range("b6500").End(xlUp).Row)
    ComboBox2.List = aa
    aa = Feuil18.Range("c2:c" & Feuil18.Range("c6500").End(xlUp).Row)
    ComboBox3.List = aa
    'aa = Feuil18.Range("d2:d" & Feuil18.Range("d6500").End(xlUp).Row)
    'ComboBox4.List = aa
    aa = Feuil18.Range("e2:e" & Feuil18.Range("e6500").End(xlUp).Row)
    ComboBox5.List = aa
    aa = Feuil18.Range("g2:g" & Feuil18.Range("g6500").End(xlUp).Row)
    ComboBox6.List = aa
    aa = Feuil18.Range("h2:h" & Feuil18.Range("h6500").End(xlUp).Row)
    ComboBox7.List = aa
    aa = Feuil18.Range("i2:i" & Feuil18.Range("i6500").End(xlUp).Row)
    ComboBox8.List = aa
    aa = Feuil18.Range("f2:f" & Feuil18.Range("f6500").End(xlUp).Row)
    ComboBox9.List = aa
    aa = Feuil18.Range("k2:k" & Feuil18.Range("k6500").End(xlUp).Row)
    ComboBox10.List = aa
    aa = Feuil18.Range("j2:j" & Feuil18.Range("j6500").End(xlUp).Row)
    ComboBox11.List = aa
     
    If Me.TextBox18 = "" Then
    CheckBox1 = False
    Me.TextBox18 .BorderColor = vbRed 'RGB(255, 0, 0)
    If Me.TextBox18 <> "" Then
    Else: CheckBox1 = True
    End If
    End If
    End Sub
     
    Private Sub VérifExistence()
     Dim TV() As Variant, L As Long
     TV = Feuil9.[C:D].Value
     L = 1
     Do: L = L + 1
        If TV(L, 1) = "" And TV(L, 2) = "" Then Exit Sub
        If TV(L, 1) = TxtNom  And TV(L, 2) = TxtEntreprise Then Exit Do
        Loop
     MsgBox TxtNom  & " " & TxtEntreprise & " existe déjà"
     End Sub
    Qu'est-ce qui ne vas pas ?

    Merci Stephanie

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    1. Tu testes si le textbox est rempli à l'intérieur du test où le textbox est vide. Mets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Me.TextBox18 = "" Then
        CheckBox1 = False
        Me.TextBox18 .BorderColor = RGB(255, 0, 0)
    Else
        CheckBox1 = True
        Me.TextBox18 .BorderColor =
    End If
    en indiquant la couleur d'origine du textbox.

    2. Est-ce que tu peux expliquer ce qui marche et ce qui ne marche pas ?

  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 Daniel C et le forum

    Daniel C, j'ai essayé votre code mais hélas rien ne se passe. Dès que j'ouvre l'userform, la textbox devrait être encadrer en rouge car il n'y a rien d'inscrit dans cette dernière.

    Pourquoi ?

    Je vais voir après pour les reste, je vais avancer petit à petit.

    Stephanie

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    Dès que j'ouvre l'userform, la textbox devrait être encadrée....
    as-tu recopié la proposition de Daniel dans ton code "Private Sub UserForm_Initialize()" ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Apparemment, on ne peut pas mettre d'autre couleur que les couleurs pisseuses que tu peux voir dans les propriétés du textbox.

  6. #6
    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 casefayere, au forum

    J'ai bien modifié ce que Daniel.C m'a mis dans la partie initialisation de l'userform. Dans le 1er post en seconde partie, j'ai le code complet de mon userform, il y a quelque chose qui coince !

    Savez-vous en regardant dans ce code et prenant en compte la modification ?

    Merci

    Stephanie

  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 Daniel.C, asefayere et le forum

    C'est bon, j'ai fait autrement pour mon problème de checkbox en faisant une lisaison (VRAI/FAUX) avec une cellule.

    Maintenant, j'ai un autre problème. A la validation du formulaire, je controle que 2TextBox soient rempli si non alors le focus se positionne sur la celle qui n'est pas rempli et encadre en rouge. Le focus fonctionne mais pas l'encadrement !

    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
    Private Sub CommandButton1_Click()
    ....
    ....
    If nom = "" Then
    MsgBox "Merci de compléter le nom du nouveau client !"
    Me.nom.BorderColor = RGB(255, 0, 0)
    nom.SetFocus
    ElseIf Me.TextBox18 = "" Then
    MsgBox "Merci de compléter la date de création du nouveau client !"
    Me.TextBox18.BorderColor = RGB(255, 0, 0)
    TextBox18.SetFocus
    Exit Sub
    ....
    ....
    End sub
    Que se passe t-il ?

    Stephanie

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour stephadm,

    et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ......
    If nom = "" Then
      MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
      Me.nom.BorderColor = RGB(255, 0, 0) 'je n'ai pas vérifié
      nom.SetFocus: Exit Sub
    End If
    If Me.TextBox18 = "" Then
      MsgBox "Merci de compléter la date de création du nouveau client avant de saisir les autres données !"
      Me.TextBox18.BorderColor = RGB(255, 0, 0) 'je n'ai pas vérifié
      TextBox18.SetFocus: Exit Sub
    End If
    .......

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour à tous,

    A tout hasard, as-tu vérifié la propriété BorderStyle de tes TextBox ?

    Cordialement.

  10. #10
    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 gFZT82, Daniel.C, asefayere et le forum

    Je ne comprends pas

    A tout hasard, as-tu vérifié la propriété BorderStyle de tes TextBox ?
    Que faut-il vérifier ?

    J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If nom= "" Then
    MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
    Me.nom.BorderColor = RGB(255, 0, 0)
    nom.SetFocus
    Exit Sub
    pareil, ça ne fonctionne toujours pas en ce qui concerne l'encadrement en rouge.

    Merci pour le coup de main

    Stephanie

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    essayes comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If nom= "" Then
    MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
    Me.nom.Borderstyle = 1
    Me.nom.BorderColor = RGB(255, 0, 0)
    nom.SetFocus
    Exit Sub
    PS : As-tu vérifié cette remarque de gFZT82 ?
    A tout hasard, as-tu vérifié la propriété BorderStyle de tes TextBox ?

  12. #12
    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 Casefayere, gFZT82, Daniel.C et le forum

    Merci, ça fonctionne bien. C'était tout bête, il fallait y penser !

    Est-ce que on peux simplifier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If nom= "" Then
    MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
    Me.nom.Borderstyle = 1
    Me.nom.BackColor = RGB(241, 221, 220)
    Me.nom.BorderColor = RGB(255, 0, 0)
    nom.SetFocus
    Exit Sub
    Stephanie

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Personnellement, je ne vois pas, à part intégrer un With :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If nom = "" Then
      MsgBox "Merci de compléter le nom du nouveau client avant de saisir les autres données !"
      With Me.nom
        .Borderstyle = 1: .BackColor = RGB(241, 221, 220): .BorderColor = RGB(255, 0, 0)
        .SetFocus
      End With
    End If

  14. #14
    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 Casefayere, gFZT82, Daniel.C et le forum

    Ok, ça fonctionne. Merci tout particulièrement à Casefayere, gFZT82, Daniel.C car grace à vous
    - j'ai progressé et
    - de plus vous m'avez dépannés.

    Au plaisir de vous relire dans des furur posts.

    Stephanie

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

Discussions similaires

  1. [XL-2010] Test sur un checkbox (Controle de formulaire) dans une feuille Excel
    Par labase dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/06/2014, 18h37
  2. [Débutant] Test sur textbox
    Par Ahmed-info dans le forum C#
    Réponses: 1
    Dernier message: 19/04/2014, 08h36
  3. test sur une checkbox dans une feuille non active
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/08/2009, 22h29
  4. [A-03] Test sur des dates dans des textBox
    Par moilou2 dans le forum IHM
    Réponses: 3
    Dernier message: 27/10/2008, 13h39
  5. CheckBox+Actualisation sur Textbox
    Par dahu17 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 19/04/2007, 15h37

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