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 :

Resultat d'une requete union parametrée sous Excel [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut Resultat d'une requete union parametrée sous Excel
    Bonjour
    Je ne sais pas si je suis dans le bon forum donc désolé d'avance si ma question pollue ce forum..

    Je résume mon problème.
    J'ai crée une requête union qui fonction très bien sous Access.
    On me demande de pourvoir accéder à cette requête par le biais d'Excel.
    Je sais comment créer des requête simple sous Query. Mais dans ce cas précis, ma requête est une requête imbriqué de plusieurs requête union avec un paramètre date debut et fin.
    Et lorsque j'essaie d'extraire le résulat de ma requête sous Query, j'ai un message d'erreur...

    [Microsoft] [Pilote ODBC Microsoft Access] trop peu de paramètres. 4 attendu
    je suis bloqué:

    Voici ma requête sous Access
    Merci D'avance de votre aide

    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    PARAMETERS debut DateTime, fin DateTime;
     
    SELECT tbl.Displayname AS injection, Sum(tbl.c1) AS keyboard, Sum(tbl.c2) AS HHScanner, Sum(tbl.c3) AS Scanner, Sum(tbl.c4) AS Stray, Sum(tbl.c5) AS Fragile, Sum(tbl.c6) AS Cylindrical, Sum(tbl.c7) AS OverSize, Sum(c1)+Sum(c2)+Sum(c3)+Sum(c4)+Sum(c5)+Sum(c6)+Sum(c7) AS TOTAL, tbl.DEBUT AS DEBUT, tbl.FIN AS FIN, ((Sum([c1])+Sum([c2])+Sum([c3])+Sum([c4])+Sum([c5])+Sum([c6])+Sum([c7]))/(DateDiff("n",[DEBUT],[FIN]))*60) AS Colis_Heure
     
    FROM (
    SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, Sum(CounterValue) AS c6, 0 as c7,  DEBUT,  FIN
    FROM dbo_vwPartCountsHistory as ch INNER JOIN dbo_vwParts AS p ON ch.PartId = p.ID
    WHERE ((  (CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=82 ) )
    GROUP BY p.DisplayName
     
     UNION
     
     
    SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 as c5, 0 AS c6, Sum(CounterValue) as c7,  DEBUT,  FIN
    FROM dbo_vwPartCountsHistory as ch INNER JOIN  dbo_vwParts AS p ON ch.PartId = p.ID
    WHERE (((CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=83))
    GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, COUNT(*) AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Keyboard') AND (id.dischargePartId <> 3645) )
     GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, COUNT(*) AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='HHScanner') AND (id.dischargePartId <> 3645) )
     GROUP BY p.DisplayName
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, COUNT(*) AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
    WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Scanner') AND (id.dischargePartId <> 3645) )
    GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3,COUNT(*) AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Stray') AND (id.dischargePartId <> 3645) )
    GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, COUNT(*) AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
    WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Fragile') AND (id.dischargePartId <> 3645) )
     
     
    GROUP BY p.DisplayName) AS tbl
    GROUP BY tbl.Displayname, tbl.DEBUT, tbl.FIN
    ORDER BY tbl.Displayname;

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Le plus simple est de créer une requête de ta requête UNION via un QueryDefs et ensuite,

    • soit via un objet Range issu de l'Automation Excel tu emploie un CopyFromRecordset (plus complexe, plus souple) de ton Recordset ;
    • soit tu exécutes un TransferSpreadSheet via l'objet DoCmd (plus simple, moins souple).


    Est-ce assez clair ou trop sombre ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    salut Argyronet
    Merci pour ces réponses
    je dois avouer que tes 2 scénarios me semble un peu compliqués..

    Lorsque tu parles de "créer une requête de ta requête UNION via un QueryDefs"
    que veux tu dire car comme je l'ais dis , je ne suis pas trop à l'aise dans les requete query".
    Et créer une requete union vias QueryDefs , c'est pour moi un peu du chinois ..

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bah en fait, oui, c'est pas super simple mais au final réalisable...
    Là comme ça, je verrai bien les choses ainsi (à adapter et peaufiner ceratinement, c'est juste pour comprendre) :

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    Sub CreerClasseurSelonRequeteUnion()
    Const REQ_UNION                                        As String = "Le nom de ta requête UNION"
    Const REQ_EXCEL                                        As String = "Req_ExportUnionExcel"
    Dim strDateDebut                                       As String
    Dim strDateFin                                         As String
    Dim strSQLTexteRequete                                 As String
    Dim strTemp                                            As String
    Dim oQDF                                               As DAO.QueryDef
     
    Dim strClasseurFinal                                   As String
     
        On Error GoTo L_ErrCreerRequeteUnion
        'on demande l'intervalle
        strDateDebut = InputBox("Date début :", "Quelle date")
        strDateFin = InputBox("Date fin :", "Quelle date")
        'on met le mode anti tête en l'air
        If Not IsDate(strDateDebut) Or Not IsDate(strDateFin) Then
            err.Raise 13, "Date invalide", "Coucou ! Ce sont des dates que je veux, pas autre chose !"
        End If
        If CDate(strDateDebut) > CDate(strDateFin) Then
            err.Raise 6, "Période invalide", "Eh ben comment je fais moi avec un tel intervalle !"
        End If
        'on formate
        strDateDebut = "#" & Format(strDateDebut, "mm/dd/yyyy") & "#"
        strDateFin = "#" & Format(strDateFin, "mm/dd/yyyy") & "#"
        'on ouvre la requête pour en obtenir la chaîne
        Set oQDF = CurrentDb.QueryDefs(REQ_UNION)
        With oQDF
            strTemp = .SQL
            .Close
        End With
        'on enlève le paramètre (pour le fun car on ne veut que les SELECT)
        strSQLTexteRequete = Replace(strTemp, "PARAMETERS debut DateTime, fin DateTime;", "")
        strSQLTexteRequete = Replace(strSQLTexteRequete, "debut", strDateDebut, , , vbBinaryCompare)
        strSQLTexteRequete = Replace(strSQLTexteRequete, "fin", strDateFin, , , vbBinaryCompare)
        'on manipule la requête finale
        On Error Resume Next
        Set oQDF = CurrentDb.QueryDefs(REQ_EXCEL)
        If err.Number Then
            'Elle existe pas : on la créé
            CurrentDb.CreateQueryDef REQ_EXCEL, strSQLTexteRequete
        Else
            'Elle existe déjà : on lui change son contenu
            oQDF.SQL = strSQLTexteRequete
        End If
        'on défini le nom du classeur
        strClasseurFinal = CurrentProject.Path & "\" & "Classeur Union.xls"
     
        'on exporte la requête
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, REQ_EXCEL, strClasseurFinal, True
     
        MsgBox "C'est OK !", , "Fin"
     
        On Error GoTo 0
    L_ExCreerRequeteUnion:
        Exit Sub
     
    L_ErrCreerRequeteUnion:
        MsgBox err.Description, 48, err.Source
        Resume L_ExCreerRequeteUnion
     
    End Sub
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Ah quand même ..
    Il ne me reste plus qu'à expérimenter ce code..
    je me lance et je reviens vers toi..
    Merci pour ton aide

  6. #6
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    bonjour argy
    lorsque je lance ton code, j 'ai deux boites de dialogue qui me demandent d'insérer une date debut et une date fin.
    Ce qui est normal
    mais ensuite, je dois de nouveau saisir la date de debut et la date de fin dans ma base de donnée access
    Et ensuite j 'ai bien un feuille excel "Classeur Union" qui se crée " mais je n'ai que les titre des champs qui s'affichent
    Je bloque..

    Une question Argy, ton code vba je dois bien l'inserer dans ma base de donnéee Access ?

  7. #7
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Oui il faut dans un 1er temps le poser dans un module pour tester.
    S'il n'y a que les entêtes, c'est que le critère ne peut trouver aucune donnée.
    Il faut donc récupérer la requête pour voir où ça flanche.
    Tu peux faire un Debug.Print de strSQLTexteRequete afin de récupérer la chaîne dans la fenêtre de débogage (ctrl + G) et la coller dans une nouvelle requête manuellement.
    Ça te permettra de voir ce qui va pas...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    exemple de requête paramétrée!
    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
    Sub test()
    Sql = "PARAMETERS debut DateTime; SELECT  * FROM Table1 where toto = [debut]"
    Dim Cm As New Command
    Dim cn As New ADODB.Connection
     GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rdurupt\Documents\Données1.accdb;"
     cn.Open GenereCSTRING
     Cm.CommandText = Sql
     Cm.ActiveConnection = cn
     Dim prm As New ADODB.Parameter
      prm.Name = "debut"
     prm.Type = adDate
     prm.Value = #1/1/2016#
     Cm.Parameters.Append prm
     Set Rs = Cm.Execute
     ActiveCell.CopyFromRecordset Rs
    End Sub
    si ta requête fonctionne dans Access, il n'y a pas lieu de la changer!
    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
    56
    57
    58
    59
    60
    61
    Sub rq()
    Dim cn As New ADODB.Connection
     GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rdurupt\Documents\Données1.accdb;"
     cn.Open GenereCSTRING
      Dim sql As String
    sql = "PARAMETERS debut DateTime, fin DateTime; "
    slq = sql & "SELECT tbl.Displayname AS injection, Sum(tbl.c1) AS keyboard, Sum(tbl.c2) AS HHScanner, Sum(tbl.c3) AS Scanner, Sum(tbl.c4) AS Stray, Sum(tbl.c5) AS Fragile, Sum(tbl.c6) AS Cylindrical, Sum(tbl.c7) AS OverSize, Sum(c1)+Sum(c2)+Sum(c3)+Sum(c4)+Sum(c5)+Sum(c6)+Sum(c7) AS TOTAL, tbl.DEBUT AS DEBUT, tbl.FIN AS FIN, ((Sum([c1])+Sum([c2])+Sum([c3])+Sum([c4])+Sum([c5])+Sum([c6])+Sum([c7]))/(DateDiff('n',[DEBUT],[FIN]))*60) AS Colis_Heure "
    slq = sql & "FROM ( "
    slq = sql & "SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, Sum(CounterValue) AS c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM dbo_vwPartCountsHistory as ch INNER JOIN dbo_vwParts AS p ON ch.PartId = p.ID "
    slq = sql & "WHERE (((CounterTimeStamp) >= debut) And ((CounterTimeStamp) <= fin) And (CounterTypeId = 82)) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 as c5, 0 AS c6, Sum(CounterValue) as c7,  DEBUT,  FIN "
    slq = sql & "FROM dbo_vwPartCountsHistory as ch INNER JOIN  dbo_vwParts AS p ON ch.PartId = p.ID "
    slq = sql & "WHERE (((CounterTimeStamp) >= debut) And ((CounterTimeStamp) <= fin) And (CounterTypeId = 83)) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.DisplayName, COUNT(*) AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID "
    slq = sql & "WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Keyboard') AND (id.dischargePartId <> 3645) ) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.DisplayName, 0 AS c1, COUNT(*) AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID "
    slq = sql & "WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='HHScanner') AND (id.dischargePartId <> 3645) ) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.DisplayName, 0 AS c1, 0 AS c2, COUNT(*) AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID "
    slq = sql & "WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Scanner') AND (id.dischargePartId <> 3645) ) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3,COUNT(*) AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID "
    slq = sql & "WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Stray') AND (id.dischargePartId <> 3645) ) "
    slq = sql & "GROUP BY p.DisplayName "
    slq = sql & "Union "
    slq = sql & "SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, COUNT(*) AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN "
    slq = sql & "FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID "
    slq = sql & "WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Fragile') AND (id.dischargePartId <> 3645) ) "
    slq = sql & "GROUP BY p.DisplayName) AS tbl "
    slq = sql & "GROUP BY tbl.Displayname, tbl.DEBUT, tbl.FIN "
    slq = sql & "ORDER BY tbl.Displayname;"
    Dim Cm As New Command
     Cm.CommandText = sql
     Cm.ActiveConnection = cn
     Dim prm As New ADODB.Parameter
     
     prm.Name = "debut"
     prm.Type = adDate
     prm.Value = #1/1/2016#
     Cm.Parameters.Append prm
     SER prm = Nothing: Set prm = New ADODB.Parameter
      prm.Name = "fin"
     prm.Type = adDate
     prm.Value = #1/1/2017#
     Cm.Parameters.Append prm
     Set Rs = Cm.Execute
     ActiveCell.CopyFromRecordset Rs
    End Sub
    personnellement je te suggérerais de la sauvegarder sous forme de requête sous Access et de l'appeler d'Excel!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sql = "SELECT  * FROM MyRequete"
    Dim Cm As New Command
    Dim cn As New ADODB.Connection
     GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rdurupt\Documents\Données1.accdb;"
     cn.Open GenereCSTRING
     Cm.CommandText = Sql
     Cm.ActiveConnection = cn
     Dim prm As New ADODB.Parameter
      prm.Name = "debut"
     prm.Type = adDate
     prm.Value = #1/1/2016#
     Cm.Parameters.Append prm
    Dernière modification par Invité ; 31/05/2016 à 13h13.

  9. #9
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Argy
    J'ai suivi tes conseils et j'ai inserer un Debug.Print de strSQLTexteRequete pour savoir d'ou venait le problème.
    Et je l'aie trouve.
    Le soucis se trouvait à la ligne 26 et 27. le format date était mm/dd/yyyy hh:mm; il manquait donc le format hh:mm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strDateDebut = "#" & Format(strDateDebut, "mm/dd/yyyy hh:mm") & "#"
    strDateFin = "#" & Format(strDateFin, "mm/dd/yyyy hh:mm") & "#"
    cependant , j'ai un autre souci.
    Lorsque le code arrive à la ligne 52, ligne du tranfere en Excel, le code me redemande une date de debut et une date de fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, REQ_EXCEL, strClasseurFinal, True

    rdurupt,je garde ton code sous la main.
    Il pourra m'être utile si je devais lancer le code depuis Excel

  10. #10
    Invité
    Invité(e)
    Par défaut
    j’avoue que je comprend pas trop!

    ta question portait bien sur le fait de le faire sur Excel? Non?

    de plus sur Access c'est exactement le même code sauf que c'est Dao et non Ado!
    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
     
     Dim Cm As New dao.Command
     Cm.CommandText = SQL
     Cm.ActiveConnection = CurrentDb
     Dim prm As New dao.Parameter
      prm.Name = "debut"
     prm.Type = adDate
     prm.Value = #1/1/2016#
     Cm.Parameters.Append prm
     Set rs = Cm.Execute
    Set xls = CreateObject("ExcelApplication")
    xls.Visible = True
    Set wb = xls.worbooks.Add
    Set sh = wb.sheets.Add
    For i = 0 To rs.Fields.Count - 1
    sh.range("A1").offset(0, i) = rs(i).Name
    Next
    sh.range("A").CopyFromRecordset
    Les dates toujours aux format international!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strDateDebut = "#" & Format(strDateDebut, "yyyy-mm-dd hh:mm") & "#"
    strDateFin = "#" & Format(strDateFin, "yyyy-mm-dd hh:mm") & "#"
    Dernière modification par Invité ; 31/05/2016 à 23h19.

  11. #11
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lorsque le code arrive à la ligne 52, ligne du tranfere en Excel, le code me redemande une date de debut et une date de fin
    Humm, c'est sans doute que tu appelle la même requête avec d'autres paramètres que [debut] et [fin].

    Or il ne doit plus y en avoir, là comme ça, je présume qu'il doit y avoir des [debut] non remplacés (ou autre, je ne sais, c'est toi qui a écrit la requête) or, la procédure ne remplace que les chaînes debut et fin par les dates que tu inscris ; ou encore, qu'une occurence du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PARAMETERS debut DateTime, fin DateTime;
    est encore présente.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  12. #12
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Argyronet

    J'ai pu résoudre le problème des date qui me sont demandées lorsque j'exporte les resultats de la requete.
    mais je m'aperçois que je n'aie plus les champ début et fin dans le resultat Excel de la requete
    En resumé, comment afficher le critère début et fin dans le resultat de le requête ?


    Bonjour rdurupt
    Il est vrai que je voulais trouver un code vba qui permet à partir d'Excel, éxecuter une requete Access parametréé..
    Et je me suis rendu compte que le code d'Argyronet et le tien sont tout deux trés intéressante et tres utiles ..
    Depuis quelques jours, j'essaie de corriger une erreur dans ton code mais en vain
    lorsque j'éxecute ton code, j'ai une erreur sur la ligne 13:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur de compilation : variable non definie
    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
    Sub rq()
    Dim cn As New ADODB.Connection
     Dim sql As String
     
    sql = "SELECT  * FROM MyRequete"
     
     
    Dim Cm As New Command
     Cm.CommandText = sql
     Cm.ActiveConnection = cn
     Dim prm As New ADODB.Parameter
     
    GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\rdurupt\Documents\Données1.accdb;"
     cn.Open GenereCSTRING
     Cm.CommandText = sql
     Cm.ActiveConnection = cn
     Dim prm As New ADODB.Parameter
      prm.Name = "debut"
     prm.Type = adDate
     prm.Value = #1/1/2016#
     Cm.Parameters.Append prm
     SER prm = Nothing: Set prm = New ADODB.Parameter
      prm.Name = "fin"
     prm.Type = adDate
     prm.Value = #1/1/2017#
     Cm.Parameters.Append prm
     Set Rs = Cm.Execute
     ActiveCell.CopyFromRecordset Rs
    End Sub

  13. #13
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, si tu veux faire depuis Excel il te suffit de référencer DAO dans le classeur...

    Il faut ensuite instancier une Database et l'ouvrir pour accéder à la requête puis manipuler celle-ci dans un Recordset...
    Une fois cela fait, depuis la même procédure sous VBA Excel, délclarer un objet Range et définir une plage de destination pour exploiter le méthode CopyFromRecordset de ton Recordset en cours.

    C'est un peu plus délicat mais ça marche bien ; tout dépend qui est maître : l'appli Access ou Excel.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Pour faire à partir de cet exemple il faut que ta requête d'union existe physiquement dans Access.

  15. #15
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    rdurupt,
    Ma requête union existe physiquement dans ma base de donnée Access..

    argyronet,
    Je dois t'avouer que ton explication est un peu compliqué pour moi
    ne pourrais t on faire élaborer ce code par étape comme tu l'a fait précédemment

  16. #16
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Argyronet

    Depuis, que j'ai modifié ma requete sql pour ne plus avoir le paramètre debut et fin qui s'affiche deux fois, le code ne donne plus aucun résultat.
    le classeur union reste vide
    Et lorsque je récupère le code sql par un debug.print et que je l'insére dans une requête Access, j'ai bien le résultat qui s'affiche dans ma base de donnée avec le champ debut et fin

    J'ai même modifié les lignes dates dans ton code pour les mettre au format international mais rien n'y fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strDateDebut = "#" & Format(strDateDebut, "mm-dd-yyyy hh:mm") & "#"
       strDateFin = "#" & Format(strDateFin, "mm-dd-yyyy hh:mm") & "#"
    Tu trouveras ci dessous mon code sql si cela peut t'aider à m'aider...

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    PARAMETERS debut DateTime, fin DateTime;
    SELECT tbl.Displayname AS injection, 
    Sum(tbl.c1) AS keyboard, 
    Sum(tbl.c2) AS HHScanner, 
    Sum(tbl.c3) AS Scanner, 
    Sum(tbl.c4) AS Stray, 
    Sum(tbl.c5) AS Fragile, 
    Sum(tbl.c6) AS Cylindrical, 
    Sum(tbl.c7) AS OverSize, 
    Sum(c1)+Sum(c2)+Sum(c3)+Sum(c4)+Sum(c5)+Sum(c6)+Sum(c7) AS TOTAL, 
    ((Sum([c1])+Sum([c2])+Sum([c3])+Sum([c4])+Sum([c5])+Sum([c6])+Sum([c7]))/(DateDiff("n",debut,fin))*60) AS Colis_Heure, 
    debut AS Start, 
    fin AS End
     
    FROM [SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, Sum(CounterValue) AS c6, 0 as c7
               FROM dbo_vwPartCountsHistory as ch INNER JOIN dbo_vwParts AS p ON ch.PartId = p.ID
     
                 WHERE ((  (CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=82 ) )
     
    GROUP BY p.DisplayName
     
     
     
     
     UNION
     
               SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 as c5, 0 AS c6, Sum(CounterValue) as c7
              FROM dbo_vwPartCountsHistory as ch INNER JOIN  dbo_vwParts AS p ON ch.PartId = p.ID
     
                  WHERE (((CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=83))
     
     
    GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, COUNT(*) AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7
     
                     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     
                   WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Keyboard') AND (id.dischargePartId <> 3645) )
     
       GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, COUNT(*) AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7
     
                     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     
                   WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='HHScanner') AND (id.dischargePartId <> 3645) )
     
     
     
       GROUP BY p.DisplayName
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, COUNT(*) AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7
     
                     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     
                   WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Scanner') AND (id.dischargePartId <> 3645) )
     
     
     
       GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3,COUNT(*) AS c4, 0 AS c5, 0 as c6, 0 as c7
     
                     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     
                   WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Stray') AND (id.dischargePartId <> 3645) )
     
     
     
       GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, COUNT(*) AS c5, 0 as c6, 0 as c7
                     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     
                   WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Fragile') AND (id.dischargePartId <> 3645) )
     
     
    GROUP BY p.DisplayName]. AS tbl
    GROUP BY tbl.Displayname
    ORDER BY tbl.Displayname;

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Voilà ce que on va faire.

    Il est possible avec dao d'instancier les variables interne d'une requête paramétrable.

    Reconditionnes ta requête à l'initiale. Ce soir je vais te faire une base Access comme exemple, avec le même nom de requêtes Access et les mêmes paramètres.

    Le contenu de la requête n'ayant pas d'importance.

    Je t'expliquerai pas à pas la démarche et tu n'auras qu'à copier le code dns ton programme.

    Si ta requête initiale était cela alors elle redevient comme ça!
    Code requête du premier poste : 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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    PARAMETERS debut DateTime, fin DateTime;
     
    SELECT tbl.Displayname AS injection, Sum(tbl.c1) AS keyboard, Sum(tbl.c2) AS HHScanner, Sum(tbl.c3) AS Scanner, Sum(tbl.c4) AS Stray, Sum(tbl.c5) AS Fragile, Sum(tbl.c6) AS Cylindrical, Sum(tbl.c7) AS OverSize, Sum(c1)+Sum(c2)+Sum(c3)+Sum(c4)+Sum(c5)+Sum(c6)+Sum(c7) AS TOTAL, tbl.DEBUT AS DEBUT, tbl.FIN AS FIN, ((Sum([c1])+Sum([c2])+Sum([c3])+Sum([c4])+Sum([c5])+Sum([c6])+Sum([c7]))/(DateDiff("n",[DEBUT],[FIN]))*60) AS Colis_Heure
     
    FROM (
    SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, Sum(CounterValue) AS c6, 0 as c7,  DEBUT,  FIN
    FROM dbo_vwPartCountsHistory as ch INNER JOIN dbo_vwParts AS p ON ch.PartId = p.ID
    WHERE ((  (CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=82 ) )
    GROUP BY p.DisplayName
     
     UNION
     
     
    SELECT p.Displayname, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 as c5, 0 AS c6, Sum(CounterValue) as c7,  DEBUT,  FIN
    FROM dbo_vwPartCountsHistory as ch INNER JOIN  dbo_vwParts AS p ON ch.PartId = p.ID
    WHERE (((CounterTimeStamp)>=debut) And ( (CounterTimeStamp)<=fin) AND (CounterTypeId=83))
    GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, COUNT(*) AS c1, 0 AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Keyboard') AND (id.dischargePartId <> 3645) )
     GROUP BY p.DisplayName
     
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, COUNT(*) AS c2, 0 AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
     FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='HHScanner') AND (id.dischargePartId <> 3645) )
     GROUP BY p.DisplayName
     
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, COUNT(*) AS c3, 0 AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
    WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Scanner') AND (id.dischargePartId <> 3645) )
    GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3,COUNT(*) AS c4, 0 AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
     WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Stray') AND (id.dischargePartId <> 3645) )
    GROUP BY p.DisplayName
     
     
    UNION
     
     
     
    SELECT p.DisplayName, 0 AS c1, 0 AS c2, 0 AS c3, 0 AS c4, COUNT(*) AS c5, 0 as c6, 0 as c7,  DEBUT,  FIN
    FROM (dbo_vwItemEventHistory INNER JOIN dbo_vwItemData AS id ON dbo_vwItemEventHistory.ItemID = id.ItemID) INNER JOIN dbo_vwParts AS p ON id.InductionPartID = p.ID
    WHERE ((dbo_vwItemEventHistory.ItemEventTypeID=5) AND (dbo_vwItemEventHistory.EventTime>debut)  And (dbo_vwItemEventHistory.EventTime<=fin) AND (id.InductionMode='Fragile') AND (id.dischargePartId <> 3645) )
     
     
    GROUP BY p.DisplayName) AS tbl
    GROUP BY tbl.Displayname, tbl.DEBUT, tbl.FIN
    ORDER BY tbl.Displayname;
    Dernière modification par Invité ; 06/06/2016 à 18h19.

  18. #18
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, en fait plusieus solutions sont possibles...
    • Celle de rdurupt vise à alimenter dyamiquement ta requête union avec la propriété Parameter d'un objet QueryDef.
    • Celle que je t'ai proposé qui vise à reconstruire une autre requête fondée sur le résultat de la première en y apposant les dates sous forme de critère.


    Après, il t'appartient de nous dire ce que tu veux et ce que tu préfères sachant que l'une comme l'autre solution peut aussi bien fonctionner sous Excel avec plus de code certes, mais bon...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour facteur et argyronet ,
    •Celle de rdurupt vise à alimenter dyamiquement ta requête union avec la propriété Parameter d'un objet QueryDef.
    •Celle que je t'ai proposé qui vise à reconstruire une autre requête fondée sur le résultat de la première en y apposant les dates sous forme de critère.
    oui c'est exactement ça!

  20. #20
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour rdurupt et argyronet
    Avant tout, je tiens à vous remercier de l' attention que vous porter à ma demande

    Ce que je souhaite c'est , dans une feuille Excel, entrer une date de debut et une date de fin (format jj/mm/aaaa hh :m)
    et, par le biais d'un bouton de commande, lancer la requête et obtenir le résultat escompté.
    Dis comme cela c'est facile mais je me rend compte , à travers vos réponse, que cela est beaucoup plus compliqué que je l'imaginais..

    je ne veux pas privilégier telle ou telle solution mais la solution la plus simple serait la bienvenue..

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [VBA EXCEL / ACCESS] : Resultat d'une requete
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 17/07/2009, 12h00
  2. Réponses: 7
    Dernier message: 03/10/2007, 19h06
  3. Réponses: 2
    Dernier message: 30/08/2007, 10h49
  4. Réponses: 8
    Dernier message: 23/05/2006, 12h13
  5. [VB6] [Excel] Résultat d'une requete ds une feuille
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 07/01/2003, 17h52

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