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

Modélisation Discussion :

Calcul sur des temps de fonctionnement


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut Calcul sur des temps de fonctionnement
    Bonsoir
    J'ai besoin d'additionner ou de soustraire des temps de fonctionnement machines exprimés en H/mm (Ex 2180h45 + 165h50). Jusqu'à maintenant je passais par Excel, où c'est vraiment simple, mais avec Access ça se complique....
    J'ai récupéré un Module que l'on m'a donné :
    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 AddHrs(Hr1, Hr2)
                    Dim H1, H2, AdH, Hmn As Single
                    Dim Check As Boolean
                    Check = IsNull(AdH)
                       If Check = True Then AddHrs = ""
                       If Chech = False Then
                        H1 = (5 / 3 * Hr1) - (2 / 3 * Int(Hr1))
                        H2 = (5 / 3 * Hr2) - (2 / 3 * Int(Hr2))
                        AdH = H1 + H2
                        Hmn = (3 / 5 * AdH) + (2 / 5 * Int(AdH))
                AddHrs = Format(Hmn, "00.00")
                End If
        End Function
     
        Function DtHrs(Ghrs, Phrs)
    Dim Gh, Ph, Delta, Hmn As Single
                    Gh = (5 / 3 * Ghrs) - (2 / 3 * Int(Ghrs))
                    Ph = (5 / 3 * Phrs) - (2 / 3 * Int(Phrs))
                    Delta = Gh - Ph
                    If Delta = "" Then DtHrs = ""
                    If Delta <> "" Then
                           Hmn = (3 / 5 * Delta) + (2 / 5 * Int(Delta))
                              DtHrs = Format(Hmn, "00.00")
          End If
    End Function
    Ce module fonctionne très bien, mais seul inconvénient, il ne supporte pas les champs vides, or les tables avec lesquelles je travail en sont truffées ! Donc ça plante tous les 5 minutes.
    Je voudrais faire les calculs dans mes requêtes.
    Quelqu'un aurait il la formule magique ??

  2. #2
    Membre expérimenté Avatar de Gabout
    Homme Profil pro
    Utilisateur autodidacte
    Inscrit en
    Mai 2006
    Messages
    1 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Utilisateur autodidacte

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 404
    Points : 1 683
    Points
    1 683
    Par défaut
    Bonjour,

    Juste une remarque au passage
    Dim H1, H2, AdH, Hmn As Single
    cela te donne 3 Variant et 1 Single, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim H1 As Single, H2 As Single, AdH As Single, Hmn As Single
    Gabout
    Gabout

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Pas de formule magique mais on peut remplacer les Null par 0 dans les deux fonctions.
    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
    26
    27
    28
    29
    Function AddHrs(Hr1, Hr2)
    Dim H1, H2, AdH, Hmn As Single
    Dim Check As Boolean
        If IsNull(Hr1) Then Hr1=0
        If IsNull(Hr2) Then Hr2=0
        Check = IsNull(AdH)
        If Check = True Then AddHrs = ""
        If Chech = False Then
           H1 = (5 / 3 * Hr1) - (2 / 3 * Int(Hr1))
           H2 = (5 / 3 * Hr2) - (2 / 3 * Int(Hr2))
           AdH = H1 + H2
           Hmn = (3 / 5 * AdH) + (2 / 5 * Int(AdH))
           AddHrs = Format(Hmn, "00.00")
        End If
    End Function
     
    Function DtHrs(Ghrs, Phrs)
    Dim Gh, Ph, Delta, Hmn As Single
        If IsNull(Ghrs) Then Ghrs=0
        If IsNull(Phrs) Then Phrs=0
        Gh = (5 / 3 * Ghrs) - (2 / 3 * Int(Ghrs))
        Ph = (5 / 3 * Phrs) - (2 / 3 * Int(Phrs))
        Delta = Gh - Ph
        If Delta = "" Then DtHrs = ""
        If Delta <> "" Then
           Hmn = (3 / 5 * Delta) + (2 / 5 * Int(Delta))
           DtHrs = Format(Hmn, "00.00")
        End If
    End Function
    Petite question :
    Les deux fonctions renvoient une donnée de type texte.
    Quel est le type de donnée des champs dans la ou les tables ? Réel simple ?

    A+

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Remplacer les null par des 0 serait pour moi LA solution !!
    Mes champs dans les tables sont des réel doubles

  5. #5
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Voila les fonctions modifiées :
    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
    26
    Function AddHrs(Hr1, Hr2)
    Dim H1 As Single, H2 As Single, AdH As Single, Hmn As Single
        If IsNull(Hr1) Then Hr1 = 0
        If IsNull(Hr2) Then Hr2 = 0
        Hr1 = CSng(Hr1)
        Hr2 = CSng(Hr2)
        H1 = (5 / 3 * Hr1) - (2 / 3 * Int(Hr1))
        H2 = (5 / 3 * Hr2) - (2 / 3 * Int(Hr2))
        AdH = H1 + H2
        Hmn = (3 / 5 * AdH) + (2 / 5 * Int(AdH))
        AddHrs = Format(Hmn, "00.00")
    End Function
     
    Function DtHrs(Ghrs, Phrs)
    Dim Gh As Single, Ph As Single, Delta, Hmn As Single
        If IsNull(Ghrs) Then Ghrs = 0
        If IsNull(Phrs) Then Phrs = 0
        Ghrs = CSng(Ghrs)
        Phrs = CSng(Phrs)
        Gh = (5 / 3 * Ghrs) - (2 / 3 * Int(Ghrs))
        Ph = (5 / 3 * Phrs) - (2 / 3 * Int(Phrs))
        If Gh >= Ph Then Delta = Gh - Ph Else Delta = Ph - Gh
        Hmn = (3 / 5 * Delta) + (2 / 5 * Int(Delta))
        If Gh >= Ph Then Hmn = -Hmn
        DtHrs = Format(Hmn, "00.00")
    End Function
    J'ai laissé la fonction de formatage qui fait que les fonctions renvoient du texte.
    Je suppose que c'est pour des besoins esthétiques (afficher 12,50 pour 12H50mn au lieu de 12,5).

    A+

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    La dernière version de tes fonctions ne fonctionne pas correctement dans ma base (les résultats sont presque le double de la normale dans une addition)
    Par contre ta première version fonctionne très bien et effectivement plus de plantage sur les champs Null !!!
    Te casses pas la tête pour la deuxième version, je suis déjà plus que satisfait.
    Grand Merci !!

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut Somme de temps de fonctionnement
    Bonsoir
    Me revoila avec mes histoires d'heures... Dites moi si j'abuse !
    Maintenant que mon premier problème a été brillamment résolu, je voudrais faire une somme de ces temps de fonctionnement pour avoir les heures total d'un mois (ex : 165h30+ 23h47+1054h55+...etc) la liste contient environ une soixantaine de valeurs. Je soupçonne que le mieux est d'écrire cela dans un module mais j'ai un peu peur de me lancer, je pense que la fonction sum doit -être utilisée, mais mes compétences s'arrête là

  8. #8
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Je suppose que tu veux faire ta somme dans une requête.
    Il faut d'abord convertir tes nombres hh.mn en nombres décimaux.
    Faire la somme de ces nombres convertis.
    Enfin convertir le résultat de la somme en nombre hh.mn
    Code vb : 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
    Function ConvHmnDec(ValHmn)
    ' Nombre Heure.Minutes --> Nombre décimal
    Dim Result As Single
    If IsNull(ValHmn) Then ValHmn = 0
    Result = (5 / 3 * ValHmn) - (2 / 3 * Int(ValHmn))
    ConvHmnDec = Result
    End Function
     
    Function ConvDecHmn(ValDec)
    ' Nombre décimal --> Nombre Heure.Minutes
    Dim Result As Single
    If IsNull(ValDec) Then ValDec = 0
    Result = (3 / 5 * ValDec) + (2 / 5 * Int(ValDec))
    ConvDecHmn = Result
    ' ou
    'ConvDecHmn = Format(Result, "00.00")
    End Function
    Exemple de requête sur une table Table1 ayant pour champs Duree(Double) et Dt(Date)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ConvDecHmn(Sum(ConvHmnDec([Table1].[Duree]))) AS TotDuree
    FROM Table1
    WHERE ((Year(Table.Dt)=2008) AND (Month(Table.Dt)=2)) ;
    A+

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Nickel ! Ça marche aussi
    Ça donne vraiment envie de s'y mettre plus sérieusement (à la programmation)
    Puisque je suis sur une bonne série, une question que je n'arrive pas à résoudre simplement depuis longtemps :
    Comment renseigner une table à partir d'un champs calculé dans une requête ou dans un formulaire ?
    Par exemple la somme des temps de fonctionnement que tu m'a fait calculer dans une requête, est-il possible d'aller mettre le résultat automatiquement dans un table pour le stocker afin qu'il ne disparaisse pas le mois d'après, écrasé par le nouveau ?
    Encore un grand merci !!

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Je pense qu'une requête de type Ajout devrait répondre à ton besoin.

    Tu peux faire une requête Ajout ayant pour source ta requête de calcul de durée cumulée sur une période.

    Tu peux aussi partir de ta requête de calcul de durée cumulée, et la transformer en requête Ajout.

    Depuis un champ calculé dans un formlaire il peut y avoir plusieurs façons.
    Ça va dépendre du contexte.
    Si la table à alimenter est la source du formulaire, on peut copier le contrôle calculé dans un champ de la table source du formulaire avec du code VB.
    Si la table à alimenter n'a aucun lien avec le formulaire, on peut créer une requête ajout récupérant des données affichées par le formulaire.
    Un bouton pourra alors exécuter la requête Ajout (code VB ou macro Access)

    A+

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63

    Informations forums :
    Inscription : Octobre 2004
    Messages : 34
    Points : 15
    Points
    15
    Par défaut
    Je ne m'étais jamais servi des requêtes ajout, effectivement bien pratique.
    Parfait, merci encore et surement à bientôt

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

Discussions similaires

  1. deux calculs sur des echelles de temps differentes mais liees.
    Par antoinemignon dans le forum Simulink
    Réponses: 1
    Dernier message: 27/05/2010, 13h38
  2. Réponses: 12
    Dernier message: 02/01/2006, 22h13
  3. calcul sur des heures
    Par pascale86 dans le forum Access
    Réponses: 5
    Dernier message: 22/12/2005, 16h22
  4. calcul sur des cases à cocher
    Par karidrou dans le forum Access
    Réponses: 3
    Dernier message: 06/12/2005, 11h40
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

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