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 :

Group By Format([DATE]) VBA - SQL


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut Group By Format([DATE]) VBA - SQL
    Bonjour,

    Je suis en train de bosser sur un formulaire Access qui vient taper dans une BD.

    J'ai deux zones de liste représentant des Portefeuilles et des marchés, et deux zones de texte avec les dates. Tout cela me permet de "filtrer" les infos que je veux et de les afficher dans un sous-formulaire.

    Mon problème : dans le sous-formulaire j'ai un champ [Date Opération], qui contient des dates journalières.

    Je souhaiterais, via un Groupe d'option, regrouper ces dates par jour, ou semaine, ou mois, ou année. (au choix, donc 4 options)

    En SQL j'utilise Format([Date Opération];"mmm-yy") pour regrouper par mois.

    Comment est-ce que je dois retranscrire ça en VBA?

    Voici une partie de mon 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
    'On retourne les valeurs filtrées
        strSQL = "SELECT Portefeuille, Marché, [Ss - Jacent], [SommedeNb Opé], [SommedeNombre de lot], [Date Opération]" _
        & "FROM [Recap Deals] WHERE (Portefeuille Like '" & vZoneListe1 & "*' and Marché like '" & vZoneListe2 & "*')"
        'On affecte le filtre au Sous Formulaire SF_Recap
     
     
    'Sur Date Début
    If TxtDateDébut <> "" Then
        strSQLDateDébut = " AND ([Date Opération]>=" & DateAuFormatUS(Me.TxtDateDébut) & ")"
    End If
     
    'Sur Date Fin
    If TxtDateFin <> "" Then
        If TxtDateFin >= TxtDateDébut Then
            If strSQLDateDébut <> "" Then
                strSQLDateFin = " AND ([Date Opération]<=" & DateAuFormatUS(Me.TxtDateFin) & ")"
            Else
                strSQLDateFin = " WHERE ([Date Opération]<=" & DateAuFormatUS(Me.TxtDateFin) & ")"
            End If
        Else
        MsgBox ("La Date de fin ne peut pas être inférieur à la date de début")
        Me.TxtDateFin.Value = Me.TxtDateDébut.Value
        End If
    End If
     
     
    'Sur Groupe d'Option Time Periode
    If Me.ChoixTimePeriod = 1 Then
    strSQLTimePeriod = " "
     
    ElseIf Me.ChoixTimePeriod = 2 Then
    strSQLTimePeriod = "GROUP BY "
     
    ElseIf Me.ChoixTimePeriod = 3 Then
    strSQLTimePeriod = "GROUP BY format([Date Opération],'mmm-yy')"
     
    ElseIf Me.ChoixTimePeriod = 4 Then
    strSQLTimePeriod = "GROUP BY format([Date Opération],'yyyy')"
    End If
     
    strSQL = strSQL & strSQLTimePeriod & strSQLDateDébut & strSQLDateFin
     
    Me.SF_Recap.Form.RecordSource = strSQL
    Merci par avance pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 041
    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 041
    Par défaut
    un début :
    par année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "  ...WHERE  year([Date Opération]) =" & year(Me.TxtDateDébut))
    par mois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     " ... WHERE  month([Date Opération]) =" & month(Me.TxtDateDébut))
    par jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     " ... WHERE  format([Date Opération], 'yymmdd') ='" & format(Me.TxtDateDébut, "yymmdd")  & "'"
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut
    Bonjour!

    Merci pour vos conseils.

    Malheureusement j'ai une erreur de syntaxe (Opérateur Absent) dans mon expression.

    J'ai changé pour la forme les If...Else par un Select Case comme suit:

    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
        'On retourne les valeurs filtrées
        strSQL = "SELECT Portefeuille, Marché, [Ss - Jacent], [SommedeNb Opé], [SommedeNombre de lot], [Date Opération]" _
        & "FROM [Recap Deals]" _
        & " WHERE (Portefeuille Like '" & vZoneListe1 & "%' " _
        & " And Marché like '" & vZoneListe2 & "%')"
     
     
    'Sur le Groupe d'option Time Period
    Select Case Me.ChoixTimePeriod
     
    Case Is = 1 'regroupement par jour / Date
    strSQLTimePeriod = " WHERE format([Date Opération], 'yymmdd') ='" & Format(Me.TxtDateDébut, "yymmdd") & "'"
     
    Case Is = 2 'regroupement par mois
    strSQLTimePeriod = " WHERE month([Date Opération]) =" & Month(Me.TxtDateDébut)
     
    Case Else 'regroupement par année
    strSQLTimePeriod = " WHERE year([Date Opération]) =" & Year(Me.TxtDateDébut)
     
    End Select
     
    'Sur Date Début
    If TxtDateDébut <> "" Then
        strSQLDateDébut = " AND ([Date Opération]>=" & DateAuFormatUS(Me.TxtDateDébut) & ")"
        'Else
        'strSQLDateDébut = " WHERE ([Date Opération]>=" & DateAuFormatUS(Me.TxtDateDébut) & ")"
    End If
     
     
    'Sur Date Fin
    If TxtDateFin <> "" Then
        If TxtDateFin >= TxtDateDébut Then
            If strSQLDateDébut <> "" Then
                strSQLDateFin = " AND ([Date Opération]<=" & DateAuFormatUS(Me.TxtDateFin) & ")"
            Else
                strSQLDateFin = " WHERE ([Date Opération]<=" & DateAuFormatUS(Me.TxtDateFin) & ")"
            End If
        Else
        MsgBox ("La Date de fin ne peut pas être inférieure à la date de début")
        Me.TxtDateFin.Value = Me.TxtDateDébut.Value
        End If
    End If
     
    'Rassemblement des variables pour constituer le SQL
    strSQL = strSQL & strSQLTimePeriod & strSQLDateDébut & strSQLDateFin
     
    Me.SF_Recap.Form.RecordSource = strSQL
    J'ai essayé de changer les WHERE par GROUP BY mais on me dit que j'ai essayé "d'exécuter une requête ne comprenant pas l'expression spécifiée 'Portefeuille' comme une partie de la fonction d'agrégat"

    Je pense que dans les deux cas il me manque un caractère quelque part?

    Merci encore!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    salut,
    un espace manque avant le FROM
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 15
    Par défaut
    J'avais noté aussi mais ca ne change rien.

    Je pense que le problème est dans mon Select Case car lorsque je n'en tiens pas compte, c'est à dire que j'ai le SQL suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    strSQL = strSQL & strSQLDateDébut & strSQLDateFin
     
    au lieu de 
     
    strSQL = strSQL & strSQLTimePeriod & strSQLDateDébut & strSQLDateFin
    le code marche, et le sous-formulaire affiche bien les résultats.

    Merci en tout cas!
    bastien

Discussions similaires

  1. [XL-2003] format date et sql
    Par munity dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 29/10/2009, 12h32
  2. Format Date sur sql server 2000
    Par randriamanana dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 29/01/2008, 09h01
  3. Pb de Format date en sql
    Par Bombar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/01/2008, 10h55
  4. Format date en SQL et ACCESS
    Par mic352 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/04/2007, 21h18
  5. [SQL]Format date en SQL
    Par mic352 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/04/2007, 10h26

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