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 :

Somme de champs par semaine


Sujet :

VBA Access

  1. #1
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut Somme de champs par semaine
    Bonjour à tous !

    J'essaie de mettre en place une fonction qui me permets de calculer la somme d'heures par semaine dans un état.

    Voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function FDateUs(vDate As Date) As String
     
        FDateUs = "#" & Format(vDate, "mm/dd/yyyy") & "#"
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function DebutSemaine(ByVal Ho_jourscontrat As Date) As Date
     
        Dim i As Integer
     
        i = Weekday(Ho_jourscontrat, vbMonday)
        DebutSemaine = DateAdd("d", -i + 1, Ho_jourscontrat)
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function NbHeuresSemaine(ByVal Ho_jourscontrat As Date) As Long
     
       Dim d1 As Date, d2 As Date
     
       d1 = DebutSemaine(Ho_jourscontrat)
       d2 = d1 + 6
     
       NbHeuresSemaine = Nz(DSum("Ho_heures", "FeuillePresence", "Ho_jourscontrat between " & FDateUs(d1) & " and " & FDateUs(d2)), 0)
     
    End Function
    J'utilise dans mon champ somme semaine le calcul suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NbHeuresSemaine([Ho_heures])
    Pensant obtenir le resultat de la somme des champs Ho_heures pour chaque semaine du lundi au dimanche mais à la place je n'obtiens aucun résultat :
    Nom : Capture.PNG
Affichages : 223
Taille : 15,1 Ko

    Sauriez-vous d'où cela peut-il provenir ?

    Merci d'avance,

    Sardaucar

  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
    Bonjour,

    Pour jouer avec les semaines, la solution que je trouve le plus simple est d'utiliser format([TonChampdate], "yyyyww", vbMonday, vbFirstJan1) qui te donne l'année et le numéro de la semaine dans l'année (entre 1 et 53). Dans une requête an français il faudra mettre Format([TonChampdate]; "aaaaee"; 2; 1).

    Après il ne reste plus qu'à faire une requête de regroupement sur ce champ et la somme du champ que tu veux cumuler.

    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
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Effectivement la formule marche très bien dans une requête et me donne exactement le résultat voulu .

    Par contre je ne vois pas comment l'incorporer à mon état, car je ne peux pas regrouper mes données par semaines vu que je dois quand même les afficher par mois !

    Eventuellement un SomDom dans le champ total semaine avec comme critère une plage égale ?

  4. #4
    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
    Si tu fais Format([TonChampdate]; "aaaammee"; 2; 1) je pense que cela devrait résoudre ton problème, en présentant par annéé/mois/semaine.

    Sinon Format est une fonction qui peut être appellé partout y compris dans les fonctions de domaine comme SomDom.

    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.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2012
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 219
    Points : 94
    Points
    94
    Par défaut
    Merci à tous pour vos réponses qui m'ont mises sur la voie. Papy-Turbo m'a aidé à finaliser et nous avons opté pour une fonction dans l'état dont je mets le code pour les curieux et intéressés.

    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 TotalHebdo(saisonnier As Long, jourscontrat As Date) As Variant
     
    Dim FirstDay As Date
     
    'Ici total hebdo correspond à la fonction qui est rentrée dans le champ devant contenir la somme par semaine
     
    If Weekday(jourscontrat, vbMonday) = 7 Then ' affiche le résultat uniquement pour les dimanches
     
        FirstDay = DateSerial(Year(jourscontrat), Month(jourscontrat), 1) 'détermine le premier jour du mois
                                                                          'si ce n'est pas un dimanche, le prendre à la place du dimanche
            'Somme des 7 derniers jours avant Ho_jourscontrat
            TotalHebdo = DSum("Ho_heures", "FeuillePresence", _
                                            " fk_saisonnier = " & saisonnier & _
                                            " and Ho_jourscontrat >= #" & Format(FirstDay, "mm/dd/yyyy") & "# " & _
                                            " and Ho_jourscontrat <= #" & Format(jourscontrat, "mm/dd/yyyy") & "# ")
     
            If TotalHebdo = 0 Then TotalHebdo = Null 'permet de ne rien afficher en cas d'absence d'heures
        Else
            TotalHebdo = Null ' n'affiche rien si c'est un dimanche
        End If
    End Function

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

Discussions similaires

  1. Calcul moyenne d'un champ par semaine
    Par kedmard dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 16/01/2012, 06h57
  2. Somme des champs commencant par le même mot
    Par kemsy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/10/2008, 18h47
  3. Somme de champs commençant par
    Par Jérémy VAUTIER dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/02/2008, 22h46
  4. faire une somme par semaine et par client
    Par zer35 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 12/10/2007, 14h26
  5. rave report (somme des champs par pages)
    Par mozcity dans le forum Composants VCL
    Réponses: 3
    Dernier message: 17/03/2006, 21h51

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