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

Macros et VBA Excel Discussion :

Ouverture d'une requête Access via VBA Excel [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Par défaut Ouverture d'une requête Access via VBA Excel
    Bonjour,

    Je vais essayer d'être la plus claire possible.
    J'ai crée une basse de données de pointage de colis qui comporte 4 tables toutes les 4 liées entre elle.
    Avec ces 4 tables, j'ai crée plusieurs requête afin d’obtenir des taux de pointages.
    Jusque là tout va bien.

    J'ai crée un fichier Excel qui me permettra de stocker tous ces taux de pointages afin de faire des analyses.
    Pour 3 de mes 4 requêtes, tout se passe bien sauf pour une seule.
    Je n'arrive pas à trouver le problème.

    Voici la requête qui bug :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Taux Mode
    Requete = "SELECT Expedition.Date_PEC, Sum(Expedition!Colis) AS Somme_Colis, Sum(STV_R!Nbre_Colis_non_lus) AS Somme_Colis_non_lus, ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Expedition.Mode"
    Requete = Requete & " FROM Expedition LEFT JOIN STV_R ON (Expedition.Date_PEC = STV_R.Date_PEC) AND (Expedition.CD = STV_R.CD) AND (Expedition.Recep = STV_R.Recep)"
    Requete = Requete & " GROUP BY Expedition.Date_PEC, Expedition.Mode"
    Requete = Requete & " HAVING (((Expedition.Date_PEC)=" & DA & "));"
     
        With Rs
            .CursorLocation = adUseClient
            .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
        End With
    Voici tout le code si ça peut aider à déterminer le problème :
    Code_Tx_PNT.txt

    Merci d'avance pour votre aide

    Julie

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    d'abord, plusieurs chose,
    ADO c'est un connecteur de base de données universelle! on ne peut pas utiliser les étiquettes pour faire de opération arithmétique :((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Expedition.Mode ,

    la close HAVING permet de filtrer les données liées au regroupement HAVING Sum(Expedition.Colis)>10 tu l'utilise comme une close where ça fonctionne mais ça oblige la requête à faire un regroupement sur la totalité de la table et non sur la requête déjà filtré par le where. Where Expedition.Date_PEC=" & DA,

    tu concatène ta variable Requete sens espace de séparation entre la fin de ligne en le début de l'autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Requete = "SELECT....AS Taux, Expedition.Mode"
    Requete = Requete & " FROM ....AND (Expedition.Recep = STV_R.Recep)"
    on est pas dans Excel Sum(Expedition!Colis)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Requete ="SELECT Somme_Colis,Somme_Colis_non_lus,  ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux from ("
    Requete = Requete & "SELECT Expedition.Date_PEC, Sum(Expedition.Colis) AS Somme_Colis, Sum(STV_R.Nbre_Colis_non_lus) AS Somme_Colis_non_lus  "
    Requete = Requete & " FROM Expedition LEFT JOIN STV_R ON (Expedition.Recep = STV_R.Recep) AND (Expedition.CD = STV_R.CD) AND (Expedition.Date_PEC = STV_R.Date_PEC) "
    Requete = Requete & " Where Expedition.Date_PEC=" & DA & "  "
    Requete = Requete & " GROUP BY Expedition.Date_PEC);"

  3. #3
    Membre averti
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Par défaut
    Bonjour Rdurupt,

    Tout d'abord, merci de ta rapidité.
    En fait, je me suis trompée, le Taux Mode fonctionne bien.

    C'est celui ci qui ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Taux Zone
    Requete = "SELECT Expedition.Date_PEC, Sum(Expedition!Colis) AS Somme_Colis, Sum(STV_R!Nbre_Colis_non_lus) AS Somme_Colis_non_lus, ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Zone_Rechargement.Zone, Equipe.Equipe"
    Requete = Requete & " FROM ((Expedition LEFT JOIN STV_R ON (Expedition.Date_PEC = STV_R.Date_PEC) AND (Expedition.CD = STV_R.CD) AND (Expedition.Recep = STV_R.Recep)) LEFT JOIN Zone_Rechargement ON (Expedition.CD = Zone_Rechargement.CD) AND (Expedition.Code_traction = Zone_Rechargement.Code_traction)) LEFT JOIN Equipe ON Expedition.Code_apporteur = Equipe.Code_apporteur"
    Requete = Requete & " GROUP BY Expedition.Date_PEC, Zone_Rechargement.Zone, Equipe.Equipe"
    Requete = Requete & " HAVING (((Expedition.Date_PEC)=" & DA & ") AND ((Equipe.Equipe) Is Null));"
     
        With Rs
            .CursorLocation = adUseClient
            .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
        End With
    J'essaie de faire comme tu as expliqué pour le Taux Mode mais je dois mal faire quelque chose.
    Quand j'ai essayé ton code pour le Taux Mode, j'obtenais un taux "global" et non un taux par Mode (j'ai normalement un taux mode en D (pour départ) et un taux mode en R (pour réex).

    Pour mon taux Zone, je cherche à avoir la même chose : tous mes taux de pointage par Zone (zone allant de Z1 à Z6).
    D'où cette requête.

    Merci d'avance pour ton aide précieuse.

    Julie

    Si ça peut aider, voici comment est construite ma requête sous access et voici le SQL de cette requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Expedition.Date_PEC, Sum(Expedition!Colis) AS Somme_Colis, Sum(STV_R!Nbre_Colis_non_lus) AS Somme_Colis_non_lus, ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Zone_Rechargement.Zone, Equipe.Equipe
    FROM ((Expedition LEFT JOIN STV_R ON (Expedition.Recep = STV_R.Recep) AND (Expedition.CD = STV_R.CD) AND (Expedition.Date_PEC = STV_R.Date_PEC)) LEFT JOIN Zone_Rechargement ON (Expedition.Code_traction = Zone_Rechargement.Code_traction) AND (Expedition.CD = Zone_Rechargement.CD)) LEFT JOIN Equipe ON Expedition.Code_apporteur = Equipe.Code_apporteur
    GROUP BY Expedition.Date_PEC, Zone_Rechargement.Zone, Equipe.Equipe
    HAVING (((Expedition.Date_PEC)=20150225) AND ((Equipe.Equipe) Is Null));

    Nom : requete_zone.JPG
Affichages : 611
Taille : 132,3 Ko

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pourtant si ta requête tourne en l'état dans Access en passant en mode sql dans Access tu peux récupérer les scripte et le coller dans vba!
    R
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    equete = "SELECT Expedition.Date_PEC, Sum(Expedition.Colis) AS Somme_Colis, Sum(STV_R.Nbre_Colis_non_lus) AS Somme_Colis_non_lus, ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Zone_Rechargement.Zone, Equipe.Equipe"
    Requete = Requete & " FROM ((Expedition LEFT JOIN STV_R ON (Expedition.Date_PEC = STV_R.Date_PEC) AND (Expedition.CD = STV_R.CD) AND (Expedition.Recep = STV_R.Recep)) LEFT JOIN Zone_Rechargement ON (Expedition.CD = Zone_Rechargement.CD) AND (Expedition.Code_traction = Zone_Rechargement.Code_traction)) LEFT JOIN Equipe ON Expedition.Code_apporteur = Equipe.Code_apporteur"
    Requete = Requete & " WHERE Expedition.Date_PEC=" & DA & " AND Equipe.Equipe Is Null"
    Requete = Requete & " GROUP BY Expedition.Date_PEC, Zone_Rechargement.Zone, Equipe.Equipe"

  5. #5
    Membre averti
    Femme Profil pro
    Chargée de Missions Méthodes & Projet
    Inscrit en
    Février 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Chargée de Missions Méthodes & Projet
    Secteur : Transports

    Informations forums :
    Inscription : Février 2015
    Messages : 18
    Par défaut
    Malheureusement, la macro bug sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
    Le message d'erreur est le suivant :
    Erreur d'exécution '_214767259 (80004005)' :

    La méthode 'Open' de l'objet '_Recordset' a échoué
    Je désespère, tout le reste de la macro fonction (j'ai essayé sans cette requête, tout passe. Il ne me manque plus que cette requête pour finir et enfin pouvoir commencer à bosser sur mon analyse :/

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Requete = "SELECT Expedition.Date_PEC, Sum(Expedition.Colis) AS Somme_Colis, Sum(STV_R.Nbre_Colis_non_lus) AS Somme_Colis_non_lus, ((1-[Somme_Colis_non_lus]/[Somme_Colis])*100) AS Taux, Zone_Rechargement.Zone, Equipe.Equipe"
    Requete = Requete & " FROM ((Expedition LEFT JOIN STV_R ON (Expedition.Date_PEC = STV_R.Date_PEC) AND (Expedition.CD = STV_R.CD) AND (Expedition.Recep = STV_R.Recep)) LEFT JOIN Zone_Rechargement ON (Expedition.CD = Zone_Rechargement.CD) AND (Expedition.Code_traction = Zone_Rechargement.Code_traction)) LEFT JOIN Equipe ON Expedition.Code_apporteur = Equipe.Code_apporteur"
    Requete = Requete & " WHERE Expedition.Date_PEC=" & DA & " AND Equipe.Equipe Is Null"
    Requete = Requete & " GROUP BY Expedition.Date_PEC, Zone_Rechargement.Zone, Equipe.Equipe"
     
     Rs.close
     set  Rs =New ADODB.Recordset
        With Rs
            .CursorLocation = adUseClient
            .Open Requete, Connexion, adOpenDynamic, adLockOptimistic
        End With

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

Discussions similaires

  1. [XL-2010] Connexion à une base Access via VBA Excel
    Par Alaedjens dans le forum Excel
    Réponses: 2
    Dernier message: 17/01/2014, 10h57
  2. Ouverture d'une Bd Access à partir d'excel
    Par ft035580 dans le forum Access
    Réponses: 12
    Dernier message: 06/10/2006, 16h22
  3. Ouverture d'une requête parmètrée en VBA
    Par Armagnak dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/07/2006, 16h53
  4. Réponses: 5
    Dernier message: 05/04/2006, 15h54
  5. [VBA] [ACCESS] Accès à une requete Access via VBA
    Par Yanmeunier dans le forum Access
    Réponses: 3
    Dernier message: 16/03/2006, 11h48

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