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

VBA Access Discussion :

Incompatibilité de type sur variable dans Datediff


Sujet :

VBA Access

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut Incompatibilité de type sur variable dans Datediff
    Bonjour à tous,

    Voici le code me permettant de calculer en minutes la différence de date entre 2 champs date et deux champs horaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function DureeMinutes()
     
    Dim NbMinutes As Long
     
    NbMinutes = Nz(DateDiff("n", Format(Me.RVDate, "dd/mm/yyyy") & " " & Me.RVHeure, Format(Me.DateFinRDV, "dd/mm/yyyy") & " " & Me.HeureFinRDV), 0)
     
    Me.RVDurée = NbMinutes
    MsgBox NbMinutes
    End Function
    Lorqu'un des champs est vide, ce qui est probable la fonction s'arrête avec mention à une incompatibilité de type...

    Les champs sont correctement formatés et l'erreur n'apparait que lorsque l'un deux est nul (ce qui est volontairement autorisé).

    J'ai essayé de placer des Nz et de passer en Variant, String et Integer la variable, rien n'y fait...

    Que se passe t'il d'après vous ?

    (la fonction marche parfaitement si il n'y a pas de valeur nulle dans aucun des champs )...

    Merci d'avance

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 258
    Par défaut prob datediif
    Fais plutot le calcul uniquement si tes champs date ne sont pas vide 1 truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if nz(date1) & nz(date2) then
    nbminutes=datediff....
    end if
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    merci pour ta réponse, mais ça ne marche toujours pas, pourtant tous les champs sont corrects, avec le bon format et renvoient les bonnes données dans la fenêtre de code... J'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function DureeMinutes()
     
    Dim NbMinutes As Long
     
    If Nz(Format(Me.RVDate, "dd/mm/yyyy") & " " & Me.RVHeure) And Nz(Format(Me.DateFinRDV, "dd/mm/yyyy") & " " & Me.HeureFinRDV) Then
     
    NbMinutes = DateDiff("n", Format(Me.RVDate, "dd/mm/yyyy") & " " & Me.RVHeure, Format(Me.DateFinRDV, "dd/mm/yyyy") & " " & Me.HeureFinRDV)
     
    Me.RVDurée = NbMinutes
    End If
     
    Debug.Print NbMinutes
     
    End Function

  4. #4
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 887
    Par défaut
    Bonjour clickandgo,
    Je crois que la meilleure manière de faire est de gérer les nulls avant l'appel de ta fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not IsNull(me.RVDate) And Not IsNull(Me.DateFinRDV) Then
    DureeMinutes
    End if
    Si les champs à tester sont RVDate et DateFinRDV.

    Bonne journée

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Bon, j'ai trouvé une partie du problème, il s'agissait de la valeur par défaut des champs heures qui était mis à "00:00:00", curieusement cela produisait une erreur, je ne sais pas comment de ce fait entrer une valeur par défaut pour 0h00m00s !

Discussions similaires

  1. [AC-2010] [VBA] Incompatibilité de type sur openform
    Par Virgile59 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/09/2010, 12h33
  2. Incompatibilité de type sur un test de valeurs de cellules
    Par jacques64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/08/2008, 23h39
  3. incompatibilite de type sur critere de requete
    Par Invité dans le forum VBA Access
    Réponses: 13
    Dernier message: 08/07/2008, 11h28
  4. verification du type de variable dans un champ
    Par Myfred dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2007, 11h15
  5. Réponses: 8
    Dernier message: 20/02/2006, 15h28

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