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

Access Discussion :

Lien automatique entre fichier Excel et requête Access avec paramêtres


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut Lien automatique entre fichier Excel et requête Access avec paramêtres
    Bonjour le forum !

    J'ai un fichier Excel de travail et une base Access de données.

    J'ai préparé 2 requêtes simples dans Access:
    - ventes / jour (paramètre du jour) => R_VentesJourFamille
    - Vente / semaines (plage début / fin) => R_VentesHebdoFamille
    Les 2 requêtes fonctionnent.


    Point Clé:
    j'arrive depuis Excel à lier mon onglet " ImportVentesJour" à ma requête Access R_VentesJourFamille :
    Nom : lien requette.jpg
Affichages : 5020
Taille : 46,4 Ko
    A noter, la date dans cette requête est inscrite pour le moment en "dure".
    Lorsque je la met en "paramètre" ex [saisir la date de Mise A Jour], la requête n'est plus accessible depuis Excel.
    Ensuite, l'autre requête, n'apparait pas quand j'essaie de la lier à Excel.. ?


    Ce que ce je veux obtenir:

    c'est d'avoir mon onglet ImportVenteJour lié à la requête R_VentesJourFamille, mais avec possibilité de piloter le paramêtre "Jour" depuis Excel
    et d'avoir mon onglet ImportVenteHebdo lié à la requête R_VentesHebdoFamille (déjà sans les paramèetre de début / fin, on verra après)...

    piste essayé sans succès:
    j'ai créer un onglet "paramètres" dans excel, que j'ai repris dans Acesss, et j'ai essayé de mettre le champ de DateMaj de la TAble Paramêtre dans la requêtes..
    ca ne marche pas...
    Nom : table param.jpg
Affichages : 5511
Taille : 103,3 Ko

    Pourriez-vous SVP m'aider à mettre cela en oeuvre ?

    Je vous transmets dans le lien ci-dessous, les 2 fichiers concernés et vous remercie par avance pour l'attention que vous porterez à ma demande,

    https://www.wetransfer.com/downloads...9102700/a7cb9f

    RC

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 987
    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 : 11 987
    Points : 24 540
    Points
    24 540
    Par défaut
    Bonjour,

    Les liens entre Excel et Access avec paramètre dynamique ce n'est pas très orthodoxe je ne suis pas étonné que cela ne fonctionne pas. ACCESS et EXCEL sont 2 entités totalement différentes et le lien n'est qu'une vue. Il faudrait investiguer pour voir dans quelle mesure cela peut fonctionner.

    Pour que ta table Paramètre fonctionne il faut lier le champ Parmètres.DateMaj à T-LigneFacture.DateDocument comme tu l'as fait entre Code et CodeArticle, et surtout supprimer [DateMAJ] de la ligne critère.

    Cordialement,

    PS : "en dure" ça n'existe pas , certain parle de "valeur écrite en dur" (surement en analogie avec "en dur dans la pierre", "graver dans le marbre"...) mais c'est une expression qu'il faut bannir . Utilises plutôt le vocable "Statique".
    Valeur/Variable statique = valeur/variable qui ne peut être modifiée.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir loufab et Robert Camion.
    Avec DAO, j'arrive à utiliser les requetes paramétrées Access, depuis Exel de la façon suivante:
    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
    Sub RunParameterQuery()
     
    '« Étape 1: déclarez vos variables
        Dim MyDatabase As DAO.Database    '.Base de données
        Dim MyQueryDef As DAO.QueryDef
        Dim MyRecordset As DAO.Recordset
     
        '« Étape 2: identifier la base de données et de requête
       On Error GoTo RunParameterQuery_Error
     
           Set MyDatabase = DBEngine.OpenDatabase("C\BD_PDM\Base de données PDM30.accdb")   
    SuiteErreur:    Set MyQueryDef = MyDatabase.QueryDefs("Excel_Stand")
     
        '« Étape 3: définir les paramètres
        Sheets("Essais_snapshot").Activate
     
        With MyQueryDef
            .Parameters("[Debut]") = Range("A3").Value
            .Parameters("[Fin]") = Range("A3").Value + 6
        End With
     
        '« Étape 4: Ouvrez la requête
        Set MyRecordset = MyQueryDef.OpenRecordset(, dbReadOnly)
     
        '« Étape 5: Effacer contenu précédent
        Sheets("Essais_snapshot").Select
        ActiveSheet.Range("A5:K10000").ClearContents
     
        '« Étape 6: copier le jeu d'enregistrements vers Excel
        ActiveSheet.Range("A5").CopyFromRecordset MyRecordset
     
        '« Étape 7: ajouter les noms de titre de colonnes dans la feuille de calcul
        'For i = 1 To MyRecordset.RecordCount
        'ActiveSheet.Cells(4, i).Value = MyRecordset.Fields(i - 1).Name
        'Next i
     
        'MsgBox " Votre requête a été exécutée"
     
        MyRecordset.Close
        MyQueryDef.Close
        MyDatabase.Close
    0    Set MyDatabase = Nothing
        Set MyQueryDef = Nothing
        Set MyRecordset = Nothing
     
       On Error GoTo 0
       Exit Sub
     
    RunParameterQuery_Error:
     
    If Err.Number = 3044 Then
    'Set MyDatabase = DBEngine.OpenDatabase("C\BD_PDM\Base de données PDM30.mdb")    ';DefaultDir=C:\BD_PDM.mdb")
    Set MyDatabase = DBEngine.OpenDatabase(MaBase)    ';DefaultDir=C:\BD_PDM.mdb")
     
            Resume Next
            Err.Clear
            GoTo SuiteErreur
        End If
     
        MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure RunParameterQuery of Module Module4"
     
    End Sub
    Cdlt

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut => réponse à Loufab
    Loufab, bonjour,

    merci pour avoir pris le temps de répondre.

    Les liens entre Excel et Access avec paramètre dynamique ce n'est pas très orthodoxe je ne suis pas étonné que cela ne fonctionne pas. ACCESS et EXCEL sont 2 entités totalement différentes et le lien n'est qu'une vue.
    c'est une piste que j'avais vu sur un site, mais de la à te dire si c'est une orthodoxe ou pas ...
    http://www.excel-formations.fr/Trucs...s/ACCESS01.php

    Vocable "Variable Statique ":
    bien noté, en "dure" dans ma mémoire :;


    Essai application de ta reco:
    Pour que ta table Paramètre fonctionne il faut lier le champ Parmètres.DateMaj à T-LigneFacture.DateDocument comme tu l'as fait entre Code et CodeArticle, et surtout supprimer [DateMAJ] de la ligne critère.
    pour rappelle, je veux donc filtrer ma requête selon la date de MAJ qui se trouve dans la feuille excel liée...
    j'ai fait comme su me l'a suggéré, mais j'arrive à un blocage:
    Nom : requete modif.jpg
Affichages : 5245
Taille : 151,0 Ko
    Nom : requete modif2.jpg
Affichages : 4685
Taille : 35,5 Ko

    voilà, l'ai -je mal posé ?

    à te lire et MERCI !

    RC

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut => réponse à Thierry
    Bonjour Thierry

    je te remercie pour ton message aussi.
    si j'ai bien compris, le code que tu as mis se place depuis le VBA d'Excel pour piloter la requete d'Access avec le ou les paramètres souhaité(s).

    Si c'est bien cela, ca serait carrément ce que je souhaite faire, ie récupérer mes données d'Access et les importer de façon quasi transparente pour l'utilisateur dans le fichier de travail excel...

    j'ai essayé d'appliqué le bout de code, mais ca tempête dès le départ, j'ai du louper un coche...
    peux tu m'aider STP:

    Nom : import Access.jpg
Affichages : 4838
Taille : 261,4 Ko

    j'ai collé dans le module "Import Access"
    Fichier Excel lié Access 010216_RC.xlsm


    merci

    RC

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 987
    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 : 11 987
    Points : 24 540
    Points
    24 540
    Par défaut
    En effet, nous ne sommes plus dans le cadre d'une source liée mais c'est efficace.

    cf http://loufab.developpez.com/tutorie...herche3fin/#LV
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 987
    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 : 11 987
    Points : 24 540
    Points
    24 540
    Par défaut
    Là tu es coté EXCEL, ce code est coté ACCESS.

    Pour que ça fonctionne il te faut faire référence au DAO d'ACCESS surement Microsoft DAO 3.6.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour le forum.

    @ loufab, la référence DAO 3.6 marche pour les fichiers .mdb . Pour les .accdb il faut la référence "Microsoft Office 12.0 Access database engine Object Library" , 12.0 pour access 2007.
    @ Robert Camion, le code et la référence à mettre dans Excel.
    Cdlt

  9. #9
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Un oubli de ma part, à la fin du code, dans la gestion d'erreur ,si la base n'est pas trouvée ,j'avais dans un module, déclarée une constante "MaBase" avec son chemin.
    C'est un détail, tu peux supprimer cette partie du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
     
    Public Const MaBase As String = "C:\BD_PDM\Base de données PDM30.accdb"

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut
    Thierry

    je comprends donc qu'on est du côté VBA d'excel

    j'ai cherché dans dans les références VBA , et j'ai pas trouvé celle dont tu parles ci-dessus, mais la suivante:
    "Microsoft Office 15.0 Access database enginge Objetct Library"

    du coup, quand je lance la macro depuis le VBA Excel, cela m'ouvre l'interface qui doit à priori me permettre de me connecter à la base access
    (je pensais que le code avait pour fonction de crééer ces liens...?)

    En tout cas, mes fichiers Excel et Access se situent comme suit : sur C: dans un onglet Forum pour simplifier
    (j'ai repris ces infos dans le code initial et essayé le lier les fichiers
    Nom : import access suite3.jpg
Affichages : 4704
Taille : 84,4 Ko
    problème je ne vois pas le fichier Access quand je le cherche dans l'emplacement...
    Nom : source.jpg
Affichages : 4608
Taille : 57,9 Ko


    Ce que je voudrais si c'est possible et sans vouloir abuser de ton temps mais là je n'y arraive pas..., c'est que tu puisse effectuer le lien entre les mes 2 fichiers afin de voir si ca fonctionne correctement, et notamment la prise en compte de la variable DateMaj.. et je l'adapterai sur mon chemin local in fine ?;..

    https://www.wetransfer.com/downloads...1102350/95b924

    merci d'avance si tu acceptes de faire la manip !!! , cf fichiers joint dans le lien

    RC

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 987
    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 : 11 987
    Points : 24 540
    Points
    24 540
    Par défaut
    Citation Envoyé par Thierry_PALLIER Voir le message
    Bonjour le forum.

    @ loufab, la référence DAO 3.6 marche pour les fichiers .mdb . Pour les .accdb il faut la référence "Microsoft Office 12.0 Access database engine Object Library" , 12.0 pour access 2007.
    @ Robert Camion, le code et la référence à mettre dans Excel.
    Cdlt
    En effet, cependant, sauf omission de ma part, Robert n'a pas spécifié la version d'Office qu'il utilise. Sinon oui, 14.0 pour la 2010, 15 pour la 2013, 16 pour la 2016. Donc Robert est sur un Office 2013 !
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    je regarde çà, mais déjà, dans le module "Divers", il y a un appel à une procédure "Menu" qui n'existe pas !

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut
    Thierry

    ce sont des modules avec un historiques de sub plus ou moins utilisées ici,
    si cela pose problème, tu peux toutes les endormire et te concentrer sur l'import Access....

    merci!

    RC

  14. #14
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Robert

    J'y suis arrivé mais j'ai perdu (beaucoup) de temps à cause d'erreurs bêtes dans les chemins (C:\ sans les ":" , et non de la requete avec un espace à la fin).
    Problème aussi dans l'appellation des feuilles . Dans le fichier access, tu peux virer la liaison avec Excel.
    Aussi ajouter la référence "Microsoft Forms 2 Object Library (je crois qu'elle n'était pas cochée.
    J'ai juste modifié le code du module "ImportAccess" :

    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
    Sub RunParameterQuery()
     
    '« Étape 1: déclarez vos variables
        Dim MyDatabase As DAO.Database    '.Base de données
        Dim MyQueryDef As DAO.QueryDef
        Dim MyRecordset As DAO.Recordset
     
        '« Étape 2: identifier la base de données et de requête
        On Error GoTo RunParameterQuery_Error
     
        Set MyDatabase = DBEngine.OpenDatabase("C:\Forum\test2_010216_RC.accdb")    ' manque : après C
    SuiteErreur:
        Set MyQueryDef = MyDatabase.QueryDefs("R_VentesJourFamille")    'espace en trop à la fin !
     
        '« Étape 3: définir les paramètres
     
        Sheets("Paramêtres").Activate
        With MyQueryDef
     
            .Parameters("[DateMaj]") = Range("A2").Value
        End With
     
        '« Étape 4: Ouvrez la requête
        Set MyRecordset = MyQueryDef.OpenRecordset(, dbReadOnly)
     
        '« Étape 5: Effacer contenu précédent
     
        Sheets("ImportVentesJour").Select    ' onglet ou je veux coller le résultat de la requete
     
        ActiveSheet.Cells.ClearContents    ' efface les données précedemment saisies
     
        '« Étape 6: copier le jeu d'enregistrements vers Excel
     
        ActiveSheet.Range("A1").CopyFromRecordset MyRecordset
     
        '« Étape 7: ajouter les noms de titre de colonnes dans la feuille de calcul
        'For i = 1 To MyRecordset.RecordCount
        'ActiveSheet.Cells(4, i).Value = MyRecordset.Fields(i - 1).Name
        'Next i
     
        MsgBox " Votre requête a été exécutée"
     
        MyRecordset.Close
        MyQueryDef.Close
        MyDatabase.Close
    0   Set MyDatabase = Nothing
        Set MyQueryDef = Nothing
        Set MyRecordset = Nothing
     
        On Error GoTo 0
        Exit Sub
     
    RunParameterQuery_Error:
     
        ' If Err.Number = 3044 Then
        '   'Set MyDatabase = DBEngine.OpenDatabase("C\BD_PDM\Base de données PDM30.mdb")    ';DefaultDir=C:\BD_PDM.mdb")
        '   Set MyDatabase = DBEngine.OpenDatabase(MaBase)    ';DefaultDir=C:\BD_PDM.mdb")
        '  Resume Next
        Err.Clear
        GoTo SuiteErreur
        ' End If
     
        MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la procédure d'import depuis Access."
     
    End Sub
    Cdlt

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut
    Thierry Bonjour,

    c'est génial, ca marche !!!
    je récupère bien les données de la requête avec le paramètre de la date du jour et c'est ultra rapide !!!

    j'ai bien noté que tu as passé du temps et je t'en remercie, notamment avec l'erreur de l'espace à la fin de la requête (pour ma pomme), mais pour ne pas prendre ce qui ne m'appartient pas, l'erreur (C:\ sans les ":" ) est issu de ce que tu m'avais envoyé hier matin


    j'ai un dernier point avant de boucler la boucle: le rapatriement des entêtes de colonnes

    Ca fonctionne "presque"...

    Nom : entetes.jpg
Affichages : 4618
Taille : 44,4 Ko

    simplement après, voilà le bug:
    Nom : bug rapatriement entetes.jpg
Affichages : 4555
Taille : 20,1 Ko

    Nom : bug rapatriement entetes2.jpg
Affichages : 4514
Taille : 30,3 Ko

    A éclaircir:
    je ne comprends pas le bout de ligne du code....
    pourquoi on dit qu'on regarde de l'ensemble des RecordCount pour récupérer juste l'entête ???
    On pourrait pas parcourir simplment les colonnes et en récupérer l'entête ??

    le code en complet
    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
    ' Courtoisie Thierry_PALLIER
     
      '« Étape 1: déclarez vos variables
      Dim MyDatabase As DAO.Database    '.Base de données
      Dim MyQueryDef As DAO.QueryDef
      Dim MyRecordset As DAO.Recordset
     
      '« Étape 2: identifier la base de données et de requête
      On Error GoTo RunParameterQuery_Error
     
      Set MyDatabase = DBEngine.OpenDatabase("C:\Forum\test2_010216_RC.accdb")
    SuiteErreur:
      Set MyQueryDef = MyDatabase.QueryDefs("R_VentesJourFamille")
     
      '« Étape 3: définir les paramètres
      Sheets("Paramêtres").Activate
      With MyQueryDef
        .Parameters("[DateMaj]") = Range("A2").Value
      End With
     
      '« Étape 4: Ouvrez la requête
      Set MyRecordset = MyQueryDef.OpenRecordset(, dbReadOnly)
     
      '« Étape 5: Effacer contenu précédent
      Sheets("ImportVentesJour").Select    ' onglet ou je veux coller le résultat de la requete
      ActiveSheet.Cells.ClearContents    ' efface les données précedemment saisies
     
      '« Étape 6: copier le jeu d'enregistrements vers Excel
      ActiveSheet.Range("A2").CopyFromRecordset MyRecordset
     
      '« Étape 7: ajouter les noms de titre de colonnes dans la feuille de calcul
      For i = 1 To MyRecordset.RecordCount
        ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
      Next i
     
      MsgBox " Votre requête a été exécutée"
     
      MyRecordset.Close
      MyQueryDef.Close
      MyDatabase.Close
    0 Set MyDatabase = Nothing
      Set MyQueryDef = Nothing
      Set MyRecordset = Nothing
     
      On Error GoTo 0
      Exit Sub
     
    RunParameterQuery_Error:
     
      ' If Err.Number = 3044 Then
      '   'Set MyDatabase = DBEngine.OpenDatabase("C\BD_PDM\Base de données PDM30.mdb")    ';DefaultDir=C:\BD_PDM.mdb")
      '   Set MyDatabase = DBEngine.OpenDatabase(MaBase)    ';DefaultDir=C:\BD_PDM.mdb")
        '  Resume Next
      Err.Clear
      GoTo SuiteErreur
      ' End If
     
       MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la procédure d'import depuis Access."
     
    End Sub
    merci de ton dernier petit coup de pouce !

    RC

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut => last but not least : périodes avec N° de semaine
    Thierry, Re

    en plus de la petite question sur le rapatriement des entêtes de colonnes (dont au pire je pourrais me passer, mais c'était pour essayer de comprendre le bout de code qui buggait...), j'ai essayé de reproduire l'import depuis Access sur ma seconde Requête de ventes par semaines.

    Cette requête fonctionne bien sous Access et me totalise les ventes par semaines avec une fonction qui me donne l'Année et le N°de Semaine ISO:
    => R_VentesHebdoFamille :
    Nom : RventeHebdo.jpg
Affichages : 4668
Taille : 87,8 Ko
    voici comment elle est construite avec les 2 paramètres de début et de fin de période:
    Nom : RventeHebdo2.jpg
Affichages : 4662
Taille : 91,0 Ko

    Pour info, mon Numéro de Smaine avec format AAAASSS :
    N°Sem: Année([DateDocument]) & NumSem00([DateDocument])
    est obtenu avec une fonction qui se trouve dans le module Semaine
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


    Function NumSem00(LaDate As Date) As Variant ' ex. 03 (courtoisie Pierre GALLIOT)

    For n = CDate("01/01/" & Year(LaDate)) To CDate("07/01/" & Year(LaDate))
    If Weekday(n) = 5 Then pRe = n - 3
    Next n

    NumSem00 = Int((LaDate - pRe) / 7) + 1
    If NumSem00 = 53 And Weekday("31/12/" & Year(LaDate)) < 5 Then NumSem00 = 1
    If NumSem00 = 0 Then NumSem00 = NumSem00(LaDate - 1)
    NumSem00 = Format(NumSem00, "00")

    End Function


    Bref:


    quand j’utilise la macro que j'ai modifié en fonction, pour l'import depuis Excel, là, ca bug :

    voici le code modifié, à noter que j'ai préciser 2 cellules qui permettent de borner la période dans l'onglet "Import VentesHebdo":

    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
    Sub VenteSemaineRécupAccess()
    ' Courtoisie Thierry_PALLIER
     
     If F02.Range("E1") = "" Then
       MsgBox "Veuillez renseigner une date de début de Période.", vbOKOnly, "Info Manquante"
       F02.Range("E1").SetFocus
       Exit Sub
     End If
     If F02.Range("E2") = "" Then
       MsgBox "Veuillez renseigner une date de fin de Période.", vbOKOnly, "Info Manquante"
       F02.Range("E2").SetFocus
       Exit Sub
     End If
     
      '« Étape 1: déclarez vos variables
      Dim MyDatabase As DAO.Database    '.Base de données
      Dim MyQueryDef As DAO.QueryDef
      Dim MyRecordset As DAO.Recordset
     
      '« Étape 2: identifier la base de données et de requête
      On Error GoTo RunParameterQuery_Error
     
      Set MyDatabase = DBEngine.OpenDatabase("C:\Forum\test2_010216_RC.accdb")
    SuiteErreur:
      Set MyQueryDef = MyDatabase.QueryDefs("R_VentesHebdoFamille")
     
      '« Étape 3: définir les paramètres
     
      With MyQueryDef
        .Parameters("[DateDebut]") = CDate(F02.Range("E1").Value)
        .Parameters("[DateFin]") = CDate(F02.Range("E2").Value)
      End With
     
      '« Étape 4: Ouvrez la requête
      Set MyRecordset = MyQueryDef.OpenRecordset(, dbReadOnly)
     
      '« Étape 5: Effacer contenu précédent
      'F00.Cells.ClearContents    ' efface les données précedemment saisies
      F02.Range("A2:C10000").ClearContents
     
      '« Étape 6: copier le jeu d'enregistrements vers l'onglet Excel souhaité
      F02.Range("A2").CopyFromRecordset MyRecordset
     
      '« Étape 7: ajouter les noms de titre de colonnes dans la feuille de calcul
    '  For i = 1 To MyRecordset.RecordCount
    '    ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
    '  Next i
    '
      'MsgBox " Votre requête a été exécutée"
     
      MyRecordset.Close
      MyQueryDef.Close
      MyDatabase.Close
    0 Set MyDatabase = Nothing
      Set MyQueryDef = Nothing
      Set MyRecordset = Nothing
     
      On Error GoTo 0
      Exit Sub
     
    RunParameterQuery_Error:
     
      Err.Clear
      GoTo SuiteErreur
     
     
       MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la procédure d'import depuis Access."
     
     
    End Sub

    ca bug lors de l'envoi des paramètres , et si j'ai bien compris, avec ma fonction de transformation des numéros AnnéeSemaine...:

    Nom : bug import Sem.jpg
Affichages : 4587
Taille : 65,6 Ko
    Nom : bug import Sem2.jpg
Affichages : 4563
Taille : 49,0 Ko


    Je me permets de te solliciter , car j'utiliser énormément les ventes par numéros de semaines, et il faut vraiment que je comprenne, pourquoi la requête fonctionne dans ACESS, et que son pilotage depuis Excel bug, alors qu'on a vu ensemble que grâce à ton code, ca marche super bien avec le paramêtre Date du jour....


    je te remercie bien pour le temps que tu vas encore passer sur ma demande mais cela m'aide énormément !!!


    ci-joint les fichier au cas ou :
    https://www.wetransfer.com/downloads...2093122/1f7cc7


    Merci !!!!

    RC

  17. #17
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour Robert.

    Pour les entêtes, c'est le nombre de champs (Fields) qu'il faut compter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    '    « Étape 7: ajouter les noms de titre de colonnes dans la feuille de calcul
        For i = 1 To MyRecordset.Fields.Count
        ActiveSheet.Cells(1, i).Value = MyRecordset.Fields(i - 1).Name
        Next i
    Je regarde le reste.

  18. #18
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Robert, visiblement à partir d'Excel, il ne semble pas possible d'exploiter des requètes externes qui mettent en jeu des fonctions utilisateurs.
    Par contre, avec les fonctions intégrées dans le qbe (générateur de requête), ça passe. J'ai donc utilisé la fonction DatePart à la place de la tienne.
    Donc remplacer ta requete par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    PARAMETERS DateDebut DateTime, DateFin DateTime;
    SELECT [T-Article].Famille, Sum([T-LigneFacture].PoidsTotal) AS SommeDePoidsTotal, Year([DateDocument]) & DatePart("ww",[DateDocument],2) AS N°Sem
    FROM [T-Article] LEFT JOIN [T-LigneFacture] ON [T-Article].Code = [T-LigneFacture].CodeArticle
    WHERE ((([T-LigneFacture].DateDocument) Between [DateDebut] And [DateFin]))
    GROUP BY [T-Article].Famille, Year([DateDocument]) & DatePart("ww",[DateDocument],2)
    HAVING ((([T-Article].Famille)<>"") AND ((Sum([T-LigneFacture].PoidsTotal))<>0) AND ((Year([DateDocument]) & DatePart("ww",[DateDocument],2))>=20151));
    Eventuellement ajoutes un tri.
    Je crois que je n'ai rien changé coté Excel.
    Cdlt

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Consultant Organisation TPE
    Inscrit en
    Juin 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant Organisation TPE
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2014
    Messages : 82
    Points : 39
    Points
    39
    Par défaut
    Bonjour Thierry

    je te remercie pour l'essai mais la fonction DATEPART n'est pas bonne pour les numéros de semaines.

    On a un souci sur la semaine 1 qui n'est pas identifié... c'est pour cela que j'ai ma fonctionn spéciale en VBA, et qu'il en existe d'ailleurs plusieurs...
    voici une comparaison des dates avec la fonctoine DatePart et la mienne...
    Nom : dateiso.jpg
Affichages : 4614
Taille : 155,0 Ko

    j'ai l'impression que je suis un peu gourmand à vouloir utiliser cette requette paramétrée avec agrégation sur les numéros de semaines......

    pour le moment, je laisse tomber l'agrégation par semaines dans la requete, j'importe uniquement les plages de jours, et je le ferai dans excel...

    Je remets le dernier fichier pour ceux qui seront intéressé..
    https://www.wetransfer.com/downloads...4094555/f5ff9f

    un grand merci Thierry pour cette technique de liaison Excel / Access


    RC

  20. #20
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonsoir Robert.
    Tu Aurais du attendre un peu avant de marquer "résolu".
    un problème ~ une solution.
    En gros, si le numéro de la semaine est compris entre 1 et 9 , il faut rajouter un zéro devant. Dans le qbe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N°Sem: Année([DateDocument]) & VraiFaux(PartDate("ww";[DateDocument];2) Entre 1 Et 9;0 & PartDate("ww";[DateDocument];2);PartDate("ww";[DateDocument];2))
    le sql complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT [T-Article].Famille, Sum([T-LigneFacture].PoidsTotal) AS SommeDePoidsTotal, Year([DateDocument]) & IIf(DatePart("ww",[DateDocument],2) Between 1 And 9,0 & DatePart("ww",[DateDocument],2),DatePart("ww",[DateDocument],2)) AS N°Sem
    FROM [T-Article] LEFT JOIN [T-LigneFacture] ON [T-Article].Code=[T-LigneFacture].CodeArticle
    WHERE ((([T-LigneFacture].DateDocument) Between [DateDebut] And [DateFin]))
    GROUP BY [T-Article].Famille, Year([DateDocument]) & IIf(DatePart("ww",[DateDocument],2) Between 1 And 9,0 & DatePart("ww",[DateDocument],2),DatePart("ww",[DateDocument],2))
    HAVING ((([T-Article].Famille)<>"") AND ((Sum([T-LigneFacture].PoidsTotal))<>0) AND ((Year([DateDocument]) & IIf(DatePart("ww",[DateDocument],2) Between 1 And 9,0 & DatePart("ww",[DateDocument],2),DatePart("ww",[DateDocument],2)))>=201501))
    ORDER BY Year([DateDocument]) & IIf(DatePart("ww",[DateDocument],2) Between 1 And 9,0 & DatePart("ww",[DateDocument],2),DatePart("ww",[DateDocument],2));
    Cdlt

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

Discussions similaires

  1. [XL-2010] Liens entre fichiers excel : problème lors d'un changement de dossier
    Par Angélique01 dans le forum Excel
    Réponses: 3
    Dernier message: 27/01/2015, 00h22
  2. Réponses: 10
    Dernier message: 07/08/2010, 00h01
  3. Lien entre fichier excel
    Par scoubida42 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/02/2009, 18h56
  4. Liens entre fichiers Excel
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/06/2007, 13h30
  5. [VBA]Lien entre fichiers excel : Update en VBA
    Par criocaps dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2006, 10h07

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