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 :

Tester la validité du contenu d'une TexBox en la quittant


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut Tester la validité du contenu d'une TexBox en la quittant
    Bonjour,

    après, grâce à votre aide, avoir fait de grands pas en avant dans mon projet, j'en suis arrivé à un stade où je tourne en rond et n'avance plus. D'où un appel ô secours !

    J'ai créé une UserForm unique pour la gestion d'une liste de matériel (ajout, modification, sélection et impression de la sélection).

    La saisie se fait par le biais de 8 TextBox.

    - TextBox1 : référence obligatoire en colonne A (l'existence de la référence est testée ici par un bouton)
    Si la référence existe déjà, les informations sont affichées et sinon une MsgBox propose la saisie des nouvelles données.

    - TextBox2 : pas obligatoire en colonne B

    - TextBox3 : référence obligatoire - lien hypertexte en colonne C
    - TextBox4 : référence obligatoire - lien hypertexte

    - TextBox5 : référence souhaitable - lien hypertexte en colonne D
    - TextBox6 : référence souhaitable - lien hypertexte

    - TextBox7 : référence souhaitable - lien hypertexte en colonne E
    - TextBox8 : référence souhaitable - lien hypertexte

    J'ai un problèmes de taille :
    J'aimerai tester la validité du contenu d'une TextBox lorsque je la quitte. Si le contenu n'est pas valable, il faut que l'utilsateur en soit averti et que le focus se retrouve sur le champs invalide. Jusque là, ça va.

    Voici mon bout de code pour ça, mais il ne marche pas. Le programme me retourne l'erreur "Nombre d'arguments incorrects ou affectation de propriété incorrecte" lorsqu'il pense qu'une TextBox est vide. Curieusement, lorsque je passe le curseur sur l'erreur, il m'indique bien la bonne valeur.

    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
      Private Sub cmdEnregistrer()
     
            ' Dernière ligne non vide
            Dim DernLigne As Long
            DernLigne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
     
            Rows(DernLigne).Select
     
            TextBox1.Enabled = True
     
            If MsgBox("Confirmez-vous l'ajout de ce matériel ?", vbYesNo, "Demande confirmation d'ajout") = vbYes Then
     
                ' Répertoire
                ActiveCell.Offset(1, 0) = TextBox1.Value
     
                ' Détail matériel
                ActiveCell.Offset(1, 1) = TextBox2.Value
     
                ' Lien fichier
                ActiveCell(2, 3).Select
     
                While TextBox3.Value = ""
                    If TextBox3.Value = "" Then
                        MsgBox "Cette information est obligatoire.", vbCritical, "Nom du fichier"
                        TextBox3.SetFocus
                        Exit Sub
                    Else
                        ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox3.Value
                    End If
                Wend
     
                While TextBox4.Value = ""
                    If TextBox4.Value = "" Then
                        MsgBox "Cette information est obligatoire.", vbCritical, "Lien du fichier"
                        TextBox4.SetFocus
                        Exit Sub
                    Else
                        ActiveSheet.Hyperlinks.Add Anchor:=selection, Address:=TextBox4.Value
                    End If
                Wend
     
                ' Lien Auteur
                 ActiveCell(1, 2).Select
     
                If TextBox5.Value = "" Then
                    TextBox5.Value = "Inconnu"
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox5.Value
                    Exit Sub
                Else
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox5.Value
                End If
     
                If TextBox6.Value = "" Then
                    TextBox6.Value = "Inconnu"
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox6.Value
                    Exit Sub
                Else
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, Address:=TextBox6.Value
                End If
     
                ' Lien Site
                ActiveCell(1, 2).Select
     
                If TextBox7.Value = "" Then
                    TextBox7.Value = "Inconnu"
                    TextBox8.SetFocus
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox7.Value
                    Exit Sub
                Else
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox7.Value
                End If
     
                If TextBox8.Value = "" Then
                    TextBox8.Value = "Inconnu"
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox8.Value
                    Exit Sub
                Else
                    ActiveSheet.Hyperlinks.Add Anchor:=selection, Address:=TextBox8.Value
                End If
     
            Else
                Exit Sub
     
            End If
     
            MsgBox "Le nouveau matériel a été enregistré avec succès. Si des champs n'ont pa pu être renseignés, vous pourrez le faire ultérieurement avec le bouton 'Modifier'"
     
        TextBox1.SetFocus
        TextBox1.Value = ""
        TextBox2.Value = ""
        TextBox3.Value = ""
        TextBox4.Value = ""
        TextBox5.Value = ""
        TextBox6.Value = ""
        TextBox7.Value = ""
        TextBox8.Value = ""
     
     
    End Sub
    Merci d'avance de me montrer le chemin pour sortit de cette ornière.

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    À quel endroit plante ton code ?

    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                While TextBox3.Value = ""
                    If TextBox3.Value = "" Then
                        MsgBox "Cette information est obligatoire.", vbCritical, "Nom du fichier"
                        TextBox3.SetFocus
                        Exit Sub
                    Else
                        ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox3.Value
                    End If
                Wend
    Je ne vois pas l'utilité du While

    Pour ta validation, il serait préférable de valider toutes les données avant de faire quoique ce soit.

    Et évite les Select Selection et autres du genre...
    MPi²

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,

    j'ai oublié de dire que je suis débutant en VBA. Je n'y connais que pouic. Je glane des idées par-ci par-là et j'essaye de monter quelque chose qui marche.

    À quel endroit plante ton code ?
    C'est assez difficile à dire, mais intuitivement, je dirais que c'est lors du test du TextBox7, l'erreur me renvoie au test du TextBox5, ligne TextToDisplay. D'où ma question du test de validité lorsque l'on quitte un TextBox.

    Pour ta validation, il serait préférable de valider toutes les données avant de faire quoique ce soit.
    C'est bien ce que tente de faire cette procédure.

    Je ne vois pas l'utilité du While
    Ben, avec le If tout seul, ça ne marchait pas. Il testait le TextBox suivant.

    Et évite les Select Selection et autres du genre...
    Moi je veux bien, mais je remplace par quoi ?

    Merci de t'occuper de mon problème. Je suis toujours étonné de votre réactivité. C'est vraiment super.

    Cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Si tu tiens à valider à la sortie des textbox, cette méthode pourrait faire l'affaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBox1 = "" Then  'conditions de validation
            MsgBox "La donnée doit être valide"
            Cancel = True  'le focus demeure sur le textbox
        End If
    End Sub
    Par contre, si tu écris des hyperliens tant que certains textbox sont valides et que le dernier n'est pas valide et que l'utilisateur ferme le UserFoorm, tes hyperliens sont déjà inscrits... C'est pourquoi je privilégierais la validation de tous les contrôles avant de faire quoique ce soit....
    MPi²

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Par contre, si tu écris des hyperliens tant que certains textbox sont valides et que le dernier n'est pas valide et que l'utilisateur ferme le UserFoorm, tes hyperliens sont déjà inscrits... C'est pourquoi je privilégierais la validation de tous les contrôles avant de faire quoique ce soit....
    Donc comme je l'ai prévu avec ma procédure ? Le hic, est que si le TextBox qui concerne un lien hypertexte est vide, le programme plante. Mon problème, en fait, se trouve dans la gestion des liens hypertexte. Je crois avoir asimilé la méthode, mais je ne comprends pas pourquoi un vide ou null fait planter la routine.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Quand tu écris ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                While TextBox3.Value = ""
                    If TextBox3.Value = "" Then
                        MsgBox "Cette information est obligatoire.", vbCritical, "Nom du fichier"
                        TextBox3.SetFocus
                        Exit Sub
                    Else
                        ActiveSheet.Hyperlinks.Add Anchor:=selection, TextToDisplay:=TextBox3.Value
                    End If
                Wend
    Le While boucle continuellement tant qu'il n'y a rien d'inscrit.

    Le mieux est de tout valider les textbox et lorsque tout est conforme, tu passes aux liens hypertext.
    MPi²

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Le While boucle continuellement tant qu'il n'y a rien d'inscrit.
    Le If tout court marche aussi lorsque je teste d'abord tout.

    Le mieux est de tout valider les textbox et lorsque tout est conforme, tu passes aux liens hypertext.
    Un peu fatigué le gars hier soir. Je comprenais les paroles, mais impossible de les mettre en musique. La lumière est apparue en me levant ce matin.

    Du coup j'ai modifié aussi la partie "Modification des données" en empêchant la modification de l'élément-clé.

    Un grand merci pour ton aide précieuse.

    Cordialement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/10/2009, 15h01
  2. [XL-2007] tester le type de contenu d'une cellule
    Par grping dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2009, 11h32
  3. Dans un "userform", vérification du contenu d'une "textbox" en la quittant
    Par Harry Covair dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2008, 09h24
  4. tester le type de contenu d'une chaine
    Par thechris33 dans le forum VB.NET
    Réponses: 7
    Dernier message: 11/06/2008, 22h11
  5. [VBA-Excel]Tester le format du contenu d'une textbox
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/11/2006, 15h47

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