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 :

N'afficher rien quand le champ en paramètre est vide. [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 253
    Points : 90
    Points
    90
    Par défaut N'afficher rien quand le champ en paramètre est vide.
    Bonjour,

    je me sers du code ci-dessous pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function conversion(charge As Long) As String
       Dim secondes As Long
       Dim minutes As Long
       Dim heures As Long
       secondes = charge Mod 60 
       charge = ((charge - secondes) / 60) 
       minutes = charge Mod 60 
       charge = (charge - minutes) / 60 
       heures = charge Mod 48
       conversion = (Format(heures, "00") & ":" & Format(minutes, "00") & ":" & format(secondes, "00")) 
    End Function


    convertir des entiers longs en heure:minute:seconde (HH:MM:SS)
    et cela se fait sans problème; seulement voilà mon champs charge contient quelques cases vides et
    je souhaite que ma fonction conversion renvoie un blanc (vide) lorsque c'est le cas.
    Quelqu'un aurait-il une solution pour moi ?

    Merci d'avance.


    Kedmard.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Je ferai comme cela

    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
    17
    18
    19
    Function conversion(charge As variant) As String
       dim result as string
     
       if not isnull(charge) then
            Dim secondes As Long
            Dim minutes As Long
            Dim heures As Long
            secondes = charge Mod 60 
            charge = ((charge - secondes) / 60) 
            minutes = charge Mod 60 
            charge = (charge - minutes) / 60 
            heures = charge Mod 48
            result = (Format(heures, "00") & ":" & Format(minutes, "00") & ":" & format(secondes, "00")) 
        else
            result=""
       end if
     
       conversion=result
    End Function
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 253
    Points : 90
    Points
    90
    Par défaut
    Bonsoir marot_r, merci pour ta réponse; j'ai testé ton code il pose juste un problème d'incompatibilité de type

    sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     secondes = charge Mod 60 
    je crois que le Modulo ne marche pas avec un "variant " .


    T'aurais pas une autre astuce?


    Merci

  4. #4
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    J'aurais mis cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function conversion(charge As Long) As String
       Dim secondes As Long
       Dim minutes As Long
       Dim heures As Long
       if isnull(charge) then exit function
       secondes = charge Mod 60 
       charge = ((charge - secondes) / 60) 
       minutes = charge Mod 60 
       charge = (charge - minutes) / 60 
       heures = charge Mod 48
       conversion = (Format(heures, "00") & ":" & Format(minutes, "00") & ":" & format(secondes, "00")) 
    End Function
    Ainsi le null reste null
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 253
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par kedmard Voir le message
    Bonsoir 78chris, marot_r

    Avec le code de 78chris j'obtiens des #erreur quand charge est vide (c'est aussi ce que j'obtiens avec mon code).
    Il doit bien avoir un moyen d'obtenir un vide ?

    je continue à chercher ...

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If nz(charge,0)=0 Then Exit Function
    Cordialement

    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  7. #7
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Il faudrait repréciser comment est utilisée dans la fonction : dans une requête, un formulaire ?

    Les champs sont null on contiennent quelque chose : chaîne vide, caractère spécial ?

    Si null, et devant rester null, il faut plutôt gérer cela au niveau de l'appel de la fonction.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bizare le Variant est un truc passe partout, il ne devrait pas poser de problème.

    Essaye

    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
    17
    18
    19
    20
    21
    Function conversion(prmCharge As variant) As String
       dim result as string
     
       if not isnull(prmCharge) then
            dim charge as long:charge=clng(prmCharge) 'Converti explicitement le variant en long integer
     
            Dim secondes As Long
            Dim minutes As Long
            Dim heures As Long
            secondes = charge Mod 60 
            charge = ((charge - secondes) / 60) 
            minutes = charge Mod 60 
            charge = (charge - minutes) / 60 
            heures = charge Mod 48
            result = (Format(heures, "00") & ":" & Format(minutes, "00") & ":" & format(secondes, "00")) 
        else
            result=""
       end if
     
       conversion=result
    End Function
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 253
    Points : 90
    Points
    90
    Par défaut
    Bonsoir à tous désolé de répondre si tard,

    Le dernier code marot_r marche sur certains champs mais lorsque j'applique ma fonction conversion sur le résultat de la fonction Delais ci-dessous j'ai un problème d'incompatibilté de type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Delais(ByVal dat1 As Variant, ByVal dat2 As Variant) As Variant
          If dat2 <> "" Then
             Delais = DateDiff("s", dat1, dat2)
          Else
             Delais = ""
          End If
        End Function

    Alors qu' en appliquant la fonction conversion (de marot_r) sur le résultat de la fonction Duree, j'obtiens bien le vide ("") quand Duree="" ( comme je le souhaitais).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function Duree(ByVal date1 As Variant, ByVal date2 As Variant, ByVal date3) As Variant
          If date1 <> "" Then
             Duree = DateDiff("s", date1, date2)
          Else
            If (date2 = "" And date3 <> "") Then
               Duree = DateDiff("s", date1, date3)
            Else
               If (date2 = "" And date3 = "") Then
                  Duree = ""
               End If
            End If
          End If
       End Function

    Il suffit donc de repérer pourquoi conversion marche dans l'une mais pas dans l'autre fonction.

    Si quelqu'un a une idée...



    cordialement,

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    J'essayerai ceci

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function conversion(prmCharge As variant) As String
       dim result as string
     
       if not isnull(prmCharge) then
          if prmCharge<>"" then
            dim charge as long:charge=clng(prmCharge) 'Converti explicitement le variant en long integer
     
            Dim secondes As Long
            Dim minutes As Long
            Dim heures As Long
            secondes = charge Mod 60 
            charge = ((charge - secondes) / 60) 
            minutes = charge Mod 60 
            charge = (charge - minutes) / 60 
            heures = charge Mod 48
            result = (Format(heures, "00") & ":" & Format(minutes, "00") & ":" & format(secondes, "00")) 
          else
            result=""
          end if
        else
            result=""
       end if
     
       conversion=result
    End Function
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 253
    Points : 90
    Points
    90
    Par défaut
    Bonjour à tous ça y est ça marche
    Merci à tous pour votre aide.


    Cordialement,

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

Discussions similaires

  1. [AC-2002] Afficher une Msgbox quand une zone de liste est vide
    Par wushu29 dans le forum VBA Access
    Réponses: 27
    Dernier message: 26/04/2010, 12h05
  2. [SQL] Utiliser un autre champ dans une table si le champ par défaut est vide
    Par Mawashigeri dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/01/2008, 13h31
  3. Réponses: 7
    Dernier message: 29/05/2007, 12h07
  4. Tester si un champ de formulaire est vide
    Par pekka77 dans le forum ASP
    Réponses: 3
    Dernier message: 28/06/2005, 16h18
  5. tester si un champ de bdd est vide
    Par pekka77 dans le forum ASP
    Réponses: 8
    Dernier message: 28/06/2005, 16h14

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