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

IHM Discussion :

Calcul horaire dans un état


Sujet :

IHM

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut Calcul horaire dans un état
    Bonjour,
    Je cherche à faire un total d'heures, dans un champ indépendant (dans un entête de groupe), au format heure, abrégé, à partir d'un champ qui est dans détail (même format)
    J'ai bien trouvé dans une autre discussion la formule suivante :
    Permet de trouver un nombre d'heures > 24 :
    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
    Public Function EnHeure(ParTemps As Double, Optional ParSecondesAffichees As Boolean = False)
      Dim VarJours As Long, VarHeures As Long, VarMinutes As Long, VarSecondes As Long
      VarJours = Int(ParTemps)
      ParTemps = (ParTemps - VarJours) * 86400 'nombre de secondes
      VarSecondes = ParTemps Mod 60
      ParTemps = ParTemps - VarSecondes
      VarMinutes = (ParTemps Mod 3600) / 60 ' Minutes
      ParTemps = ParTemps - VarMinutes * 60
      VarHeures = (ParTemps Mod 86400) / 3600 ' Heures
      VarHeures = VarHeures + VarJours * 24
      If IsMissing(ParSecondesAffichees) Or ParSecondesAffichees = True Then
        EnHeure = VarHeures & ":" & Format(VarMinutes, "00") & ":" & Format(VarSecondes, "00")
      Else
        EnHeure = VarHeures & ":" & Format(VarMinutes, "00")
      End If
    End Function
    Ma source contrôle ne permet pas d'accéder au vb.
    Où peut-on saisir cette formule?
    Merci d'avance
    Cordialement
    Christophe

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    Bonjour,

    tu colles cette fonction publique dans un module standard que tu enregistres.
    Après tu peux utiliser cette fonction par exemple directement dans une requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT enheure(sum(dureeH))  as TotalH
    FROM maTable;
    Bonne suite

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Re bonjour,

    J'ai un peu de mal à te suivre.
    Et mon champ indépendant dans mon état devient quoi? J'ai du mal à faire le lien entre les deux.
    Peux tu développer davantage, stp?
    Merci
    Chris

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    Dans ton état, où et comment utilises-tu ton chp indépendant ?

    Est-ce un chp en pied de page ? si oui , si dans détail tu as un control "Hrs",
    dans le pied, pour le chp indép, tu mets comme donnée source : =enheure(sum([Hrs]))


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Dans mon état, mon champ indépendant (situé en entête de groupe) contient déjà en source contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =somme([fin_créneau]-[début_créneau ])
    les deux champs [fin_créneau] et [début_créneau ] sont situés dans Détail.

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    alors essaie pour ton chp indép.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =enheure(somme([fin_créneau]-[début_créneau ]))

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Access me demande de lui rentrer la valeur du paramètre "en heure"
    Peut être une autre idée?

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    Alors, pour ton chp (monChp1 ) remets la donnée source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =somme([fin_créneau]-[début_créneau ])
    Ce résultat est un réel double qu'on va traduire en heures par code VBA.

    Tu gardes ce control ( monchp1) mais tu le rend invisible (via les Pptés)
    A coté, tu crées un chp indépendant (donc sans donnée source) appelé par exemple "monChpIndep"

    dans l'evenement "Sur activé" de l'état (Report_Activate() ), place la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [monChpIndep]= =enheure([monChp1] )
    Tu devrais alors obtenir le bon format souhaité

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Bonjour,
    On est en novembre, peut-être devrai-je enlever ma paire de moufles?
    J'ai saisi ce que tu m'as dit (je suppose qu'il s'agissait d'une procédure événementielle). Voici donc ce qui est affiché quand elle s'ouvre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report_Activate()
    [MonChpIndep] = =enheure([monChp1])
    End Sub
    Erreur de compilation : erreur de syntaxe.
    Je me suis dit (comme je ne suis pas un expert en vba), qu'il y avait peut être un = de trop ! hé, ben non, idem.
    Sais tu d'où vient mon erreur?

  10. #10
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    Sorry, gross erreur : mais il y a un = en trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report_Activate()
    [MonChpIndep] = enheure([monChp1])
    End Sub
    De plus, as-tu effectivement nommés tes contrôles avec les mêmes noms que dans mon exemple ou bien as-tu oublié de remplacer par tes noms (MonChpIndep et monChp1) ?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    Et bien, je viens de vérifier; malheureusement, tout est bon. J'ai gardé exactement les mêmes noms et j'ai déjà fait un essai en ayant retiré le = en trop.
    Quand je lance mon état, j'ai le message suivant :
    Erreur de compilation : Sub ou Function non définie.
    S'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report Activate ()
    [MonChpIndep]= enheure([monChp1])
    End Sub)
    J'ai un access 2000.
    Est-ce que cela peut t'éclairer?

  12. #12
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    on va y arriver.
    Je viens de faire un essai (acc 2000) comme prescrit au début et ça marche.

    1) as tu collé le code enHeure dans un module standard . Alors la fonction enHeure doit être trouvée

    2) tu mets en commentaires le code du sub (on ne l'utilise pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Report_Activate()
    ' [MonChpIndep] = enheure([monChp1])
    End Sub
    2) dans l'entete de ton groupe :
    tu n'as pas besoin de monChp1

    et en source de [MonChpIndep] tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =enheure(somme([fin_créneau]-[début_créneau ]))
    ceci suppose bien sur que tu as des controles [fin_créneau] et [début_créneau] (en format Date-heure) dans le détail du groupe

    et ça doit marcher

  13. #13
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    Si cela peut aider, voici un exemple en PJ

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Aube (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    CA MARCHE !!!! MERCI BCP
    C'était long mais ... c'était bon :
    J'ai bidouillé un peu les formules !!!!
    Et afin de pouvoir me coucher moins bête ce soir, je te pose le pb suivant qui m'a amené à bidouiller:
    tu as 3 champs à calculer (horaire ou autre, ça change rien :par ex
    le 1er : [début créneau horaire]
    le 2 :[fin créneau horaire]
    le 3ème :[différence entre deux] = [fin créneau]-[début créneau] : là ça marche !!
    maintenant tu veux dans un entête de groupe, faire la somme des différences :
    normalement ou logiquement (pour moi): =somme([différence entre les deux]) = ca marche pas (enfin chez moi !!!!)
    par contre si tu fais :
    =somme([fin créneau]-[début créneau]) et là oh miracle ça marche ... et parce que donc, pourquoi donc ?????? et là tant que tu bidouilles pas, tu peux chercher pdt des heures .... ce qui amène parfois à faire des formules de plusieurs km de long ....
    as tu une explication ???
    Merci ... et pour ton dépannage et pour ma nouvelle question

  15. #15
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 029
    Par défaut
    L'aide sur les groupes dans les états dit :
    que l'on peut appliquer des calculs en pied de groupes sur les données du groupe (moi je comprends les "données source" et par conséquent, au lieu d'indiquer la table comme source, il faut passer par une requête intermédiaire qui en plus des champs de la table, affiche le champ calculé : Diff:[fin créneau]-[début créneau] . Alors, tu exploite sans pb le champ Diff dans ton état.

    Bonne suite

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

Discussions similaires

  1. calcul cumul dans un état
    Par ronin.01 dans le forum IHM
    Réponses: 4
    Dernier message: 20/01/2011, 15h54
  2. Calcul conditionnel dans un état
    Par Hydatid dans le forum IHM
    Réponses: 7
    Dernier message: 24/03/2010, 23h40
  3. Réponses: 6
    Dernier message: 30/12/2007, 00h08
  4. calcul dans un état paramétré
    Par god0126 dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2006, 09h46
  5. Réponses: 3
    Dernier message: 20/09/2005, 21h07

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