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

Access Discussion :

Champ Vide traité par On Error en VBA mais retour de #Erreur lorsque la fonction est utilisée par une requête. [AC-2000]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Champ Vide traité par On Error en VBA mais retour de #Erreur lorsque la fonction est utilisée par une requête.
    Bonjour à tous.

    J'ai crée une fonction Age() qui renvoi une information dans tous les cas lorsque je test par la fenêtre Execution du VB de Access :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Age(Optional dtNaissance As String = "01/01/2015") As String
    On Error GoTo Age_Err   
        Dim intAge As Integer 
           intAge = DateDiff("yyyy", [dtNaissance], Now()) + _
                 Int(Format(Now(), "mmdd") < Format([dtNaissance], "mmdd"))             
           Age = intAge
    Exit Function
    Age_Err:    
        Age = "Non renseigné"              
    End Function
    J'utilise cette fonction dans une requête qui va chercher la date de naissance dans une colonne "DATNAISS". Si l'enregistrement est vide j'ai un #Erreur comme résultat.

    Voici l'extrait SQL de la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Age([DATNAISS]) AS Ages

    J'aimerais que la réponse soit "Non renseigné" si DATNAISS est vide.

    Merci pour vos réponses.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    je suis bien loin d'être un expert, mais ne faudrait-il pas simplement mettre un "Exit Function" après ton "Age = "Non renseigné" " ?

    J'ai fait la même fonction que toi mais en affichant un message box et sa a plutôt bien marcher (sauf que moi ma fonction ne retourne pas de valeur).

    Donc si le Exit Function ne marche pas je ne peut pas plus t'aider.

    Anto

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Bonjour Anto

    Je te remercie mais ça ne marche pas mieux. Je rappelle que dans la fenêtre exécution ça fonctionne même avec un appel Age() ou Age("") mais que si j'utilise cette fonction dans une requête, j'ai une erreur lorsque DATNAISS est vide.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    A ma connaissance, ta fonction est "à priori" bonne sauf que l'erreur n'est pas levée lors de l'exécution, mais dès l'appel de ton argument qui est vide (Null ou ""). Or vu que le type de l'argument est String, le type Null ne fait rien.
    Si on le veut vraiment, je dirais qu'il faut modifier le type de l'argument en Variant pour qu'il accepte les valeurs Null et faire un test pour retourner le résultat "Non renseigné".
    Un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function Age(dtNaissance As Variant) As String
    On Error GoTo Age_Err
        Dim intAge As Integer
        If IsNull(dtNaissance) Or dtNaissance = "" Then
            Age = "Non renseigné"
        Else
           intAge = DateDiff("yyyy", [dtNaissance], Now()) + _
                 Int(Format(Now(), "mmdd") < Format([dtNaissance], "mmdd"))
           Age = intAge
        End If
    Exit Function
    Age_Err:
        Age = "Non renseigné"
    End Function
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Et voila, Nickel, ça marche.
    Je vais essayer de retenir la leçon mais pour l'instant j'ai du mal à goûter la subtilité. En faisant un Age() je pensais avoir testé le Null ....

    Merci pour ton aide, je note "RESOLU"

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

Discussions similaires

  1. [VBA-E]ouvrir un fichier dont le nom est determiné par sa date de création
    Par olivertwist dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/04/2007, 17h29
  2. Réponses: 8
    Dernier message: 04/04/2007, 15h29
  3. Réponses: 1
    Dernier message: 16/11/2006, 14h01
  4. [SQL] Comment utiliser dans une requête une variable passée par URL
    Par foffa dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 12h27
  5. "la webcam est utilisée par une autre application!" ah bon???
    Par cortex024 dans le forum Périphériques
    Réponses: 2
    Dernier message: 04/05/2006, 12h13

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