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 générer une erreur suite à une mauvaise saisie


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2009
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Comment générer une erreur suite à une mauvaise saisie
    Bonjour,

    Je suis tout jeune développeur en vba et j'ai besoin d'un peu d'aide. Par contre, je peux pas fournir maintenant le code sur lequel je travaille, puisque je développe sur le PC de mon lieu de mon stage et j'ai pas pensé à copier mon travail... (what a looser ;-))

    Je demande à mon utilisateur d'entrer une date en paramètre. J'ai envie d'imposer que celle-ci soit de format JJ/MM/AAAA et que, si ce n'est pas le cas, mon "On Error Go to" soit appelé. Je définis ma variable de mon InputBox en date. Pourtant, si je rentre un chiffre sans /, vb traduit la variable en date (genre 13/03/1905 !). Comment faire pour lui faire retourner une erreur là dessus ?

    Merci de m'aider si vous avez des idées

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 910
    Points
    55 910
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Une date étant un nombre, il est normal que si tu saisis un nombre dans la plage des nombres évalués comme des dates, tu puisses le stocker dans une variable typée Date...

    A mon avis, tu dois donc typer ta variable en Texte, puis la convertir en date et:
    - soit gérer l'erreur via la gestion d'erreur
    - soit gérer l'erreur par code

    Personnellement, j'aime bien créer des petites fonctions simples à tester.

    Voici une fonction qui permet de saisir une date et qui renvoie soit la date si la saisie est valide, soit 0 si la saisie n'est pas valide.

    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
    Function DateSaisie() As Date
        Dim MaDateTexte As String
        Dim MaDate As Date
     
        On Error GoTo Fin
     
        MaDateTexte = InputBox("Veuillez saisir une date au format jj/mm/aaaa")
        MaDate = DateSerial(Right(MaDateTexte, 4), Mid(MaDateTexte, 4, 2), Left(MaDateTexte, 2))
     
    Fin:
        If Err <> 0 Then
            DateSaisie = 0
            Else
            DateSaisie = MaDate
        End If
    End Function
    Au sein d'une procédure, il suffit de tester la valeur renvoyée par la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub TestDate()
        If DateSaisie() = 0 Then
            MsgBox "Mauvaise date"
            Else
            MsgBox "Bonne date"
        End If
    End Sub
    L'intérêt de travailler avec une fonction est que tu peux utiliser des paramètres optionnels pour tester la date saisie à l'intérieur d'une plage de dates.
    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
    Function DateSaisie(Optional LimiteInferieure As Date, Optional LimiteSuperieure As Date) As Date
        Dim MaDateTexte As String
        Dim MaDate As Date
     
        On Error GoTo Fin
     
        MaDateTexte = InputBox("Veuillez saisir une date au format jj/mm/aaaa")
        MaDate = DateSerial(Right(MaDateTexte, 4), Mid(MaDateTexte, 4, 2), Left(MaDateTexte, 2))
        If MaDate < LimiteInferieure Or MaDate > LimiteSuperieure Then MaDate = 0
    Fin:
        If Err <> 0 Then
            DateSaisie = 0
            Else
            DateSaisie = MaDate
        End If
    End Function
    et stocker ainsi ta fonction dans "ta boite à fonctions" pour réutilisation dans d'autres projets.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    ou tu évites ton Goto et procèdes ainsi (par exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim madate As String, erreur As Boolean
      erreur = True
      Do While erreur
        madate = InputBox("Veuillez saisir une date au format jj/mm/aaaa")
        If IsDate(madate) And madate Like "##/##/####" And Val(Mid(madate, 4, 2)) <= 12 Then erreur = False
        If erreur Then MsgBox "erreur de saisie" ' ce n'est à mon avis pas nécessaire, mais bon ...
      Loop
    edit :

    que l'on peut aussi écrire ainsi, bien sûr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim madate As String, erreur As Boolean
      erreur = True
      Do While erreur
        madate = InputBox("Veuillez saisir une date au format jj/mm/aaaa")
        erreur = Not (IsDate(madate) And madate Like "##/##/####" And Val(Mid(madate, 4, 2)) <= 12)
        If erreur Then MsgBox "erreur de saisie" ' ce n'est à mon avis pas nécessaire, mais bon ...
      Loop
    Et rien ne t'empêche d'en faire une fonction, si tu veux, y compris en lui passant un filtre prédéfini comme paramètre, si tu veux ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/03/2013, 13h00
  2. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 07h35
  3. Réponses: 4
    Dernier message: 30/09/2009, 14h37
  4. Réponses: 5
    Dernier message: 12/10/2008, 13h41
  5. Réponses: 1
    Dernier message: 04/04/2008, 12h14

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