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

Requêtes et SQL. Discussion :

Créer une requête union en VBa


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut Créer une requête union en VBa
    Bonjour à tous et à toutes,

    J'ai actuellement la requête suivante :

    Code sql : 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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    SELECT 1983 AS ANNEE, -Sum([R présence AG]!AG83) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1984 AS ANNEE, -Sum([R présence AG]!AG84) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1985 AS ANNEE, -Sum([R présence AG]!AG85) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1986 AS ANNEE, -Sum([R présence AG]!AG86) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1987 AS ANNEE, -Sum([R présence AG]!AG87) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1988 AS ANNEE, -Sum([R présence AG]!AG88) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1989 AS ANNEE, -Sum([R présence AG]!AG89) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1990 AS ANNEE, -Sum([R présence AG]!AG90) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1991 AS ANNEE, -Sum([R présence AG]!AG91) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1992 AS ANNEE, -Sum([R présence AG]!AG92) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1993 AS ANNEE, -Sum([R présence AG]!AG93) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1994 AS ANNEE, -Sum([R présence AG]!AG94) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1995 AS ANNEE, -Sum([R présence AG]!AG95) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1996 AS ANNEE, -Sum([R présence AG]!AG96) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1997 AS ANNEE, -Sum([R présence AG]!AG97) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1998 AS ANNEE, -Sum([R présence AG]!AG98) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 1999 AS ANNEE, -Sum([R présence AG]!AG99) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2000 AS ANNEE, -Sum([R présence AG]!AG00) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2001 AS ANNEE, -Sum([R présence AG]!AG01) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2002 AS ANNEE, -Sum([R présence AG]!AG02) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2003 AS ANNEE, -Sum([R présence AG]!AG03) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2004 AS ANNEE, -Sum([R présence AG]!AG04) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2005 AS ANNEE, -Sum([R présence AG]!AG05) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2006 AS ANNEE, -Sum([R présence AG]!AG06) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2007 AS ANNEE, -Sum([R présence AG]!AG07) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2008 AS ANNEE, -Sum([R présence AG]!AG08) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2009 AS ANNEE, -Sum([R présence AG]!AG09) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2010 AS ANNEE, -Sum([R présence AG]!AG10) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2011 AS ANNEE, -Sum([R présence AG]!AG11) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2012 AS ANNEE, -Sum([R présence AG]!AG12) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2013 AS ANNEE, -Sum([R présence AG]!AG13) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2014 AS ANNEE, -Sum([R présence AG]!AG14) AS Nombre FROM [R présence AG]
    UNION 
    SELECT 2015 AS ANNEE, -Sum([R présence AG]!AG15) AS Nombre FROM [R présence AG]
    UNION SELECT 2016 AS ANNEE, -Sum([R présence AG]!AG16) AS Nombre FROM [R présence AG];

    L'année prochaine il faudra rajouter
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UNION
    SELECT 2017 AS ANNEE, -Sum([R présence AG]!AG17) AS Nombre FROM [R présence AG]

    J'ai fait un essai pour créer, via un bouton dans un formulaire la requête R_essai_présences
    En m'inspirant de ce qui m'a été proposé pour un autre problème j'ai
    d'une part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Commande5_Click()
      If Me.txtNombreDepart > 0 Then
          Call presences(Me.txtNombreDepart)
          DoCmd.OpenQuery "R_essai_présences"
        Else
          MsgBox "Vous saisir une année de départ"
      End If
    End Sub
    où txtNombreDepart est la zone de texte où je saisis l'année

    Ci dessous le code, à titre exemple concernant les 2 premières anné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
    Public Sub presences(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
     
      sSql = "SELECT 1983 AS ANNEE, -Sum([R présence AG]!AG83) AS Nombre" _
            & "FROM [R présence AG]" _
            & "UNION" _
            & "SELECT 1984 AS ANNEE, -Sum([R présence AG]!AG84) AS Nombre" _
            & "FROM [R présence AG]"
     
      Set q = CurrentDb.QueryDefs("R_essai_présences")
      'q.SQL = sSql
     
    End Sub
    Comment pourrai-je automatiser tout cela ?
    C'est à dire je saisis par exemple 17 en tant que txtNombreDepart et je créé alors la requête union de 1983 à 2017 (comme tout au début de cette discussion.

    Merci de votre aide
    C15

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 265
    Points
    34 265
    Par défaut
    Salut,


    je partirais sur un code de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub presences(NumDebut As Integer)
      Dim sSql As String
      Dim q As QueryDef
     dim iAnnee As Integer
    For iAnnee = 1983 To 2000+NumDebut
      sSql = sSQL & " UNION SELECT " & iAnnee &" AS ANNEE, -Sum([R présence AG]!AG" & Right(Cstr(iAnnee,2)) & " AS Nombre" _
            & "FROM [R présence AG]" 
     Next iAnnee
      Set q = CurrentDb.QueryDefs("R_essai_présences")
      q.SQL = Mid(sSql,7)
     
    End Sub
    Mais peut-on avoir par exemple 97 en entree (pour 1997) ? (auquel cas on changer le code pour lui donner un cas avec 1900+ et un autre avec 2000+
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  3. #3
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    1 1983 est l'année de création de l'association concernée. En numdébut on aura l'année prochaine 17 (on ne saisit que 17) donc on se contentera de 2000+
    Cela me permet d'avoir le nombre d'adhérents présents par année.
    Pour info, dans ma requête R présence AG, j'ai des cases à cocher AG83 à AG16

    2 Par contre monsieur Access me signale une erreur de syntaxe (opérateur absent) pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSql = sSQL & " UNION SELECT " & iAnnee &" AS ANNEE, -Sum([R présence AG]!AG" & Right(Cstr(iAnnee,2)) & " AS Nombre" _
            & "FROM [R présence AG]"
    Pour info, dans une procédure liée à la gestion de données sous la forme Du12, Du13...
    on m'a proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[T Adhérents].Du" & Format(NumDebut, "00")
    est-ce que cela ne pourrait pas être adapté à la place de
    )

    et le débogueur bloque sur

    Merci de ton aide.
    A+
    c15

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 265
    Points
    34 265
    Par défaut
    On peut changer le format si tu le souhaites oui,

    sinon j'ai zappe l'espace entre Nombre et FROM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For iAnnee = 1983 To 2000 + NumDebut
      sSql = sSql & " UNION SELECT " & iAnnee & " AS ANNEE, -Sum([R présence AG]!AG" & Right(CStr(iAnnee), 2) & " AS Nombre" _
            & " FROM [R présence AG]"
     Next iAnnee
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour, Jean-Philippe et C15Nates,
    pour info, il manque la parenthèse fermante du -Sum(
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    J'ai essayé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSql = sSql & " UNION SELECT " & iAnnee & " AS ANNEE, -Sum([R présence AG]!AG" & Right(CStr(iAnnee), 2)) & " AS Nombre" _
            & " FROM [R présence AG]"
    Cela ne marche pas non plus
    erreur syntaxe requete union.pdf

    J'ai l'impression qu'il y a un problème de guillemet, mais peut-être me trompai-je

    Merci de votre aide
    A+
    C15Nantes

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 265
    Points
    34 265
    Par défaut
    Oui, notre ami l'ourson nous l'a d'ailleurs gentiment fait remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sSql = sSql & " UNION SELECT " & iAnnee & " AS ANNEE, -Sum([R présence AG]!AG" & Right(CStr(iAnnee), 2) & ") AS Nombre" _
            & " FROM [R présence AG]"
    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 :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    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

  8. #8
    Membre habitué Avatar de C15nantes
    Homme Profil pro
    retraité
    Inscrit en
    Février 2011
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2011
    Messages : 379
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    BINGO

    Cela correspond tout à fait à ce que je voulais obtenir

    J'avais mal placé la parenthèse et là j'ai encore du boulot car je m'y perds...beaucoup.

    Merci à tous les deux pour votre réactivité et votre efficacité.

    Ainsi, grâce à vous et à ceux qui m'ont aidé ces jours-ci, le passage d'une année à l'autre sera plus facile et moins sujet à erreurs.

    C15nantes

Discussions similaires

  1. [VBA] [5.1.8] Créer une requête BO (via Macro depuis Excel)
    Par Bretonnie dans le forum SDK
    Réponses: 6
    Dernier message: 08/04/2015, 18h20
  2. [AC-2003] Créer une requête sous vba access
    Par facteur dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/01/2013, 12h03
  3. [AC-2003] Créer une requête spécifique en vba
    Par saigon dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/04/2011, 14h24
  4. [AC-2003] Créer une Requête depuis VBA Access
    Par Goupo dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/02/2011, 00h08
  5. Tri d'une requête UNION
    Par MasterOfChakhaL dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/08/2004, 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