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 :

12 mois glissants, bloquer les données de la 1ere année


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut 12 mois glissants, bloquer les données de la 1ere année
    Bonjour,

    Suite à une aide que j'ai eu dernièrement avec ce forum, je reviens pour demander de l'aide encore

    J'ai une table ''Dashboard'' ou je fais la somme des heures travaillées des 12 derniers mois (HT_12_Mois_Glissants) avec une Function Public que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Compare Database
    Option Explicit
     
    Public Function Sum12lastMonths(ByVal dt1 As Date) As Long
        Dim dt2 As Date
        dt2 = DateAdd("yyyy", -1, dt1)
     
                      Sum12lastMonths = Nz(DSum("Heures_travaillees", "Dashboard", _
                                   "Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#" _
                                   & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#"), 0)
     
    End Function
    Ce que j'aimerais avec cette fonction c'est qu'elle ne change pas les heures travaillées de la première année de ma table.

    J'ai essayé avec if Dt2 >="01/01/2018" then ... mais ça ne fonctionne pas
    j'ai essayé aussi avec les critères de ma requête mais là non plus ça ne fonctionne pas

    je n'arrive pas à bloquer le calcul, elle change aussi mes données de l'année 2017

    Si une personne peut m'aider ça serait très apprécié

    Merci

    Nom : 17-02-2020 1-59-40 PM.jpg
Affichages : 250
Taille : 105,1 Ko

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 035
    Points : 24 610
    Points
    24 610
    Par défaut
    Bonjour,

    Peut-être que faire que filtrer d'après Periode serait plus indiqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#"  & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#) AND year(Periode)>2018"
    Attention aux parenthèses ajoutées !

    Cordialement,

  3. #3
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    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 : 2 917
    Points : 4 821
    Points
    4 821
    Par défaut
    Bonjour,

    Selon ce que je comprends, essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function Sum12lastMonths(ByVal dt1 As Date) As Long
        Dim dt2 As Date
    if format( dt1 , "yyyymmdd") > "20180101" then
        dt2 = DateAdd("yyyy", -1, dt1)
    else
      dt2 =#01/01/2017#
    end if
     
                      Sum12lastMonths = Nz(DSum("Heures_travaillees", "Dashboard", _
                                   "Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#" _
                                   & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#"), 0)
     
    End Function
    Cdlt

  4. #4
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par loufab Voir le message
    Bonjour,

    Peut-être que faire que filtrer d'après Periode serait plus indiqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#"  & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#) AND year(Periode)>2018"
    Attention aux parenthèses ajoutées !

    Cordialement,

    Salut Loufab,

    avec ton bout de code quand je filtre ca revient au même que quand je rentre un critère dans ma requête, ca me calcul la somme a partir de 2018
    Voici le bout de code que j'ai rentré :
    "(Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#" & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#) AND year(Periode)>=2018"))
    et le résultat en image :

    Nom : 18-02-2020 8-33-25 AM.jpg
Affichages : 302
Taille : 72,1 Ko

  5. #5
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,

    Selon ce que je comprends, essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function Sum12lastMonths(ByVal dt1 As Date) As Long
        Dim dt2 As Date
    if format( dt1 , "yyyymmdd") > "20180101" then
        dt2 = DateAdd("yyyy", -1, dt1)
    else
      dt2 =#01/01/2017#
    end if
     
                      Sum12lastMonths = Nz(DSum("Heures_travaillees", "Dashboard", _
                                   "Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#" _
                                   & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#"), 0)
     
    End Function
    Cdlt
    salut Micniv,

    quand je rentre ta fonction if, l'année 2017 est quand même calculer alors que je veux pas qu'elle change.
    Avant Mise à jour :
    Nom : 18-02-2020 9-22-06 AM.jpg
Affichages : 244
Taille : 76,6 Ko

    Apres Mise à jour :

    Nom : 18-02-2020 9-22-50 AM.jpg
Affichages : 248
Taille : 81,6 Ko

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    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 : 2 917
    Points : 4 821
    Points
    4 821
    Par défaut
    je n'avais pas compris.
    la fonction ne doit opérer que pour Période > 01/01/2018
    Donc c'est à toi de lancer la requete d'UPDATE pour Période > 01/01/2018 !

    Cdlt

  7. #7
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par micniv Voir le message
    je n'avais pas compris.
    la fonction ne doit opérer que pour Période > 01/01/2018
    Donc c'est à toi de lancer la requete d'UPDATE pour Période > 01/01/2018 !

    Cdlt

    Exact, mais quand je met dans critère > 01/01/2018 ca me calcul quand meme l'année 2017 aussi....
    voilà ma requete

    Nom : 18-02-2020 11-47-01 AM.jpg
Affichages : 217
Taille : 54,4 Ko

  8. #8
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut Alternative
    J'ai changé mon approche pour bloquer mon année 2017 avec ce code :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Option Compare Database
    Option Explicit
     
    Public Function Sum12lastMonths(ByVal dt1 As Date) As Long
        Dim dt2 As Date
     
    If Format(dt1, "yyyymmdd") > "20171201" Then
        dt2 = DateAdd("m", -12, dt1)
            Else
                If dt1 = "01/01/2017" Then
                Sum12lastMonths = 258855
                 End If
                If dt1 = "01/02/2017" Then
                 Sum12lastMonths = 267480
                End If
                If dt1 = "01/03/2017" Then
                 Sum12lastMonths = 278644
                End If
                If dt1 = "01/04/2017" Then
                 Sum12lastMonths = 285576
                End If
                If dt1 = "01/05/2017" Then
                 Sum12lastMonths = 297740
                End If
                If dt1 = "01/06/2017" Then
                 Sum12lastMonths = 308460
                End If
                If dt1 = "01/07/2017" Then
                 Sum12lastMonths = 320374
                End If
                If dt1 = "01/08/2017" Then
                 Sum12lastMonths = 331590
                End If
                If dt1 = "01/09/2017" Then
                 Sum12lastMonths = 340906
                End If
                If dt1 = "01/10/2017" Then
                 Sum12lastMonths = 354159
                End If
                If dt1 = "01/11/2017" Then
                 Sum12lastMonths = 365380
                End If
                If dt1 = "01/12/2017" Then
                 Sum12lastMonths = 372116
                End If
     
              Exit Function
            End If
     
                      Sum12lastMonths = Nz(DSum("Heures_travaillees", "Dashboard", _
                                   "Periode <= #" & Format(dt1 - 1, "mm/dd/yyyy") & "#" _
                                   & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#"), 0)
     
     
    End Function

    parcontre mon problème maintenant c'est que ma SUM (Sum12lastMonths) est une ligne trop basse par rapport à ma période.
    Toutes mes sommes sont une ligne plus basse et je sais pas comment remonter mon résultat des HT_12_Mois_Glissants dans ma table.

    Est ce qu'il existe un moyen simple ?

    Merci

  9. #9
    Membre à l'essai
    Homme Profil pro
    Méthode outils et support utilisateur
    Inscrit en
    Mars 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Méthode outils et support utilisateur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2018
    Messages : 31
    Points : 15
    Points
    15
    Par défaut 12 mois glissants, bloquer les données de la 1ere année, solution trouvé
    C'est bon j'ai trouvé la solution finalement, j'ai enlevé le -1 au Format (dt1, "mm/dd/yyyy") et j'ai réduis mon dt2 à 11 mois donc mon code final est :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Option Compare Database
    Option Explicit
     
    Public Function Sum12lastMonths(ByVal dt1 As Date) As Long
        Dim dt2 As Date
    If Format(dt1, "yyyymmdd") > "20171201" Then
        dt2 = DateAdd("m", -11, dt1)
            Else
                If dt1 = "01/01/2017" Then
                Sum12lastMonths = 258855
                 End If
                If dt1 = "01/02/2017" Then
                 Sum12lastMonths = 267480
                End If
                If dt1 = "01/03/2017" Then
                 Sum12lastMonths = 278644
                End If
                If dt1 = "01/04/2017" Then
                 Sum12lastMonths = 285576
                End If
                If dt1 = "01/05/2017" Then
                 Sum12lastMonths = 297740
                End If
                If dt1 = "01/06/2017" Then
                 Sum12lastMonths = 308460
                End If
                If dt1 = "01/07/2017" Then
                 Sum12lastMonths = 320374
                End If
                If dt1 = "01/08/2017" Then
                 Sum12lastMonths = 331590
                End If
                If dt1 = "01/09/2017" Then
                 Sum12lastMonths = 340906
                End If
                If dt1 = "01/10/2017" Then
                 Sum12lastMonths = 354159
                End If
                If dt1 = "01/11/2017" Then
                 Sum12lastMonths = 365380
                End If
                If dt1 = "01/12/2017" Then
                 Sum12lastMonths = 372116
                End If
     
              Exit Function
            End If
     
                      Sum12lastMonths = Nz(DSum("Heures_travaillees", "Dashboard", _
                                   "Periode <= #" & Format(dt1, "mm/dd/yyyy") & "#" _
                                   & " AND Periode >= #" & Format(dt2, "mm/dd/yyyy") & "#"), 0)
     
     
    End Function
    Si ça peut aider du monde

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

Discussions similaires

  1. [AC-2007] Aidez moi pour lier les données
    Par jamila12 dans le forum Access
    Réponses: 10
    Dernier message: 05/02/2018, 18h39
  2. [AC-2003] Bloquer les données avec code vba
    Par demichoux dans le forum VBA Access
    Réponses: 12
    Dernier message: 01/03/2011, 16h05
  3. [XL-2007] comparer les données reçues sur un mois et completer les données manquantes par une macro.
    Par wisemanvsfatboy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/11/2010, 17h16
  4. Réponses: 5
    Dernier message: 22/12/2006, 22h16
  5. Filtre sur les données des 3 derniers mois?
    Par Arkalys dans le forum Access
    Réponses: 2
    Dernier message: 21/10/2005, 09h02

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