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

Résolu

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.
 

4 réponses

  1. 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).


    1. 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.

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


    1. 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. Un super grand merci, tout fonctionne.

        Très bon week-end.

        Olivier