Erreur d'exécution '94' Utilisation incorrecte de Null

Résolu
olivierporcinet Messages postés 16 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 13 septembre 2024 - 13 sept. 2024 à 14:26
olivierporcinet Messages postés 16 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 13 septembre 2024 - 13 sept. 2024 à 14:59

Bonjour,

Voici mon code : 

Function calculAge(dateAnniv As Variant, dateM As Variant) As Variant
Dim nbMois As Integer
Dim nbJours As Integer

nbMois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))

If Day(dateM) < Day(dateAnniv) Then
nbJours = DateDiff("d", dateAnniv, DateSerial(Year(dateAnniv), Month(dateAnniv) + 1, 0)) + Day(dateM)
Else
nbJours = Day(dateM) - Day(dateAnniv)
End If

calculAge = LTrim(Str(nbMois \ 12)) & " ans " & LTrim(Str(nbMois Mod 12)) & " mois " & LTrim(Str(nbJours)) & " jours"

End Function

Problème : Erreur d'exécution '94 : Utilisation incorrecte de Null

nbMois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))

Mon champs est 

DDN

Il faut sûrement préciser que à l'ouverture d'un nouvel enregistrement, le champ peut être null....

J'ai essayé de modifier le code avec 

Nz

devant DateDiff mais rien ne fait.

Qui peut m'aider, merci.
 

A voir également:

4 réponses

Bruno83200_6929 Messages postés 185 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 17 septembre 2024 31
13 sept. 2024 à 14:51

Voici comment vous pouvez modifier votre fonction pour gérer les valeurs Null :

Function calculAge(dateAnniv As Variant, dateM As Variant) As Variant
    Dim nbMois As Integer
    Dim nbJours As Integer

    ' Vérifier si l'une des dates est Null
    If IsNull(dateAnniv) Or IsNull(dateM) Then
        calculAge = "Date(s) invalide(s)"
        Exit Function
    End If

    ' Calculer le nombre de mois
    nbMois = DateDiff("m", dateAnniv, dateM) + (Day(dateM) < Day(dateAnniv))

    ' Calculer le nombre de jours
    If Day(dateM) < Day(dateAnniv) Then
        nbJours = DateDiff("d", dateAnniv, DateSerial(Year(dateAnniv), Month(dateAnniv) + 1, 0)) + Day(dateM)
    Else
        nbJours = Day(dateM) - Day(dateAnniv)
    End If

    ' Construire la chaîne de résultat
    calculAge = LTrim(Str(nbMois \ 12)) & " ans " & LTrim(Str(nbMois Mod 12)) & " mois " & LTrim(Str(nbJours)) & " jours"
End Function

Gestion des valeurs Null :

La ligne If IsNull(dateAnniv) Or IsNull(dateM) Then permet de vérifier si l'une ou l'autre des dates est Null. Si c'est le cas, la fonction renvoie un message d'erreur personnalisé ("Date(s) invalide(s)") et quitte la fonction.


Continuer le calcul si les dates sont valides :

Si les dates sont valides, le reste du code fonctionne comme prévu.


Avec cette modification, votre code devrait gérer correctement les valeurs Null et ne plus générer d'erreurs lorsqu'un champ est vide.


1
olivierporcinet Messages postés 16 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 13 septembre 2024 1
13 sept. 2024 à 14:59

Un super grand merci, tout fonctionne.

Très bon week-end.

Olivier

1
Bruno83200_6929 Messages postés 185 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 17 septembre 2024 31
13 sept. 2024 à 14:34

Bonjour,

Le problème que vous rencontrez est lié à la gestion des valeurs Null. Lorsque vous essayez d'effectuer des opérations sur une valeur Null, cela génère une erreur d'exécution comme celle que vous rencontrez (Erreur d'exécution '94' : Utilisation incorrecte de Null).

Dans votre cas, vous devez vérifier explicitement si les variables dateAnniv et dateM contiennent une valeur avant d'exécuter la logique de calcul. Si l'une de ces valeurs est Null, vous devriez décider de la manière de gérer cette situation (par exemple, retourner une valeur par défaut, comme une chaîne vide ou un message d'erreur).


0
olivierporcinet Messages postés 16 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 13 septembre 2024 1
13 sept. 2024 à 14:38

Lorsque je veux faire un nouvel enregistrement, le champ est vide et attend une valeur.

L'idéal serait qu'il n'attende pas nécessairement de valeur; de ce fait, à mon avis, il n'y aurait plus d'erreur.

0
Bruno83200_6929 Messages postés 185 Date d'inscription jeudi 18 juin 2020 Statut Membre Dernière intervention 17 septembre 2024 31
13 sept. 2024 à 14:40

Exactement. Patientez, je vais vous adresser un bout de code en VBA pour vous donner un exemple.


0