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 :

Requête SQL avec VBA qui ne retourne rien


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 40
    Points
    40
    Par défaut Requête SQL avec VBA qui ne retourne rien
    Bonjour le forum,

    alors là je suis confronté à un problème bien étrange je dois dire, et je ne trouve pas la solution après de nombreux essais.
    Je ne sais pas si le problème vient d'Excel/VAB ou de SQL à vrai dire.

    J'ai 2 select, sur 2 tables différentes, que j'unis de la façon suivante :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT ((Max(Decompte) Div 7)*0.5) as Recuperable FROM affaires, Calcul_Recup Where Collaborateur <> '' AND Imputation <> '' and Decompte <> '0' and Decompte > '6' and Calcul_Recup.Imputation = affaires.afNumero Group By Collaborateur,Date_Deb UNION ALL Select (Case when Imputation <> 'RC' Then '1' Else '-1' End) As Recuperable from `Récup"

    Et ça ne me retourne rien du tout! (là j'ai simplifié le code à la colonne qui pose problème)

    Me disant que le problème vient peut être de mon "UNION" (j'ai essayé "UNION" et "UNION ALL"), je crée une vue sur ma base de données MySQL pour faire l'opération, ça marche très bien depuis MySQL Query Brows.

    Donc confiant je fais un simple :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT ((Max(Decompte) Div 7)*0.5) as Recuperable FROM affaires, Calcul_Recup Where Collaborateur <> '' AND Imputation <> '' and Decompte <> '0' and Decompte > '6' and Calcul_Recup.Imputation = affaires.afNumero Group By Collaborateur,Date_Deb

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from Récup2;

    Et là pareil, ça ne me retourne strictement rien.

    A noter que si j'essaye simplement :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT ((Max(Decompte) Div 7)*0.5) as Recuperable FROM affaires, Calcul_Recup Where Collaborateur <> '' AND Imputation <> '' and Decompte <> '0' and Decompte > '6' and Calcul_Recup.Imputation = affaires.afNumero Group By Collaborateur,Date_Deb

    Je récupère bien des valeurs, et que la commande simplifiée ou cimplète marche très bien directement sur la BDD, donc je penche pour un soucis Excel/VBA.

    Alors si quelqu'un a une idée, je suis preneur, car là je sèche.

    Merci!

    Edit:

    J'avais oublié le code de ma macro :

    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
    Sub Essai()
    On Error Resume Next
    If Worksheets.Count < 1 Then
    Workbooks.Add
    Else
    End If
    Application.DisplayAlerts = False
    On Error GoTo 0
    
    Dim cmdSQL2 As String
    
    Set Cn = New ADODB.Connection
    Set Rs = New ADODB.Recordset
    
    cmdSQL2 = "Select Recuperable from Récup2;"
    
    Cn.Open "dsn=base"
    Rs.Open cmdSQL2, Cn
    
    Range("A5").CopyFromRecordset Rs ' mais j'ai aussi aussi avec des While Not Rs.EOF.....
    Rs.Close
    Cn.Close
    Set Rs = Nothing
    Set Cn = Nothing
    
    End Sub

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 40
    Points
    40
    Par défaut
    Personne n'aurait une idée?
    J'avais oublié (un peu distrait) qu'une de mes requêtes se fait sur la vue d'une vue, ça peut avoir son importance.

    J'ai fait d'autres tests également où j'arrive à récupérer quelque chose, mais pas tout.

    Et par exemple si sur ma feuille Excel je mets des données bidons, je vois que dans la colonne qui ne renvoie rien, ça m'efface les donnés bidons, donc ça doit écrire du vide.

    Est ce que ça pourrait être un problème de mémoire ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 40
    Points
    40
    Par défaut
    Je relance un peu le sujet, que j'avais mis de côté.
    Je me suis replongé dedans mais c'est toujours le même problème, si quelqu'un a une piste, je suis preneur.

    Merci

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Quand on utilise ADO pour lire dans des classeurs XL, le tables sont désignées par des noms de feuilles, éventuellement complétés par les plages, commeOn ne retrouve pas cela dans ce que tu as fait.

    Je te suggère de consulter ce tuto de SilkyRoad et de revenir ensuite si tu ne t'en sors pas.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 48
    Points : 40
    Points
    40
    Par défaut
    Je me suis peut être mal exprimé mais là je ne lis pas dans des classeurs XL, mais j'écris dedans, enfin j'exporte des données depuis une base de données MySQL.
    Cette base est alimentée elle par des classeurs XL, mais cette partie du programme marche très bien (ce fut dur

    Le problème est que l'export marche vers Excel, sauf pour cette fameuse colonne, qui est un champ calculé.

    Voici le code de création de ma vue si ça peut aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DROP VIEW IF EXISTS `Essai`;
    CREATE OR REPLACE ALGORITHM=UNDEFINED DEFINER=`root`@`192.168.10.%` SQL SECURITY DEFINER VIEW `Essai` AS (select `Récup`.`Collaborateur`
    AS `Collaborateur`,`Récup`.`Imputation` AS `Imputation`,(case when isnull(`affaires`.`afLivrPays`) then _utf8'Administratif' else `affaires`.`afLivrPays` end)
    AS `afLivrPays`,`Récup`.`Journee` AS `Date_Deb`,`Récup`.`Journee` AS `Date_Fin`,NULL AS `NombredeJours`,count(0) AS `Dimanches`,(case when (`Récup`.`Imputation`
    <> _utf8'RC') then _utf8'1' else _utf8'-1' end) AS `Recuperable` from (`Récup` left join `affaires` on((`Récup`.`Imputation` = `affaires`.`afNumero`))) group by
    `Récup`.`Collaborateur`,`Récup`.`Journee`) union all (select `Calcul_Recup`.`Collaborateur` AS `Collaborateur`,`Calcul_Recup`.`Imputation` AS
    `Imputation`,`affaires`.`afLivrPays` AS `afLivrPays`,`Calcul_Recup`.`Date_Deb` AS `Date_Deb`,max(`Calcul_Recup`.`Date_Fin`) AS `Date_Fin`,max(`Calcul_Recup`.`Decompte`)
    AS `NombredeJours`,NULL AS `Dimanches`,((max(`Calcul_Recup`.`Decompte`) DIV 7) * 0.5) AS `Recuperable` from (`affaires` join `Calcul_Recup`) where
     ((`Calcul_Recup`.`Collaborateur` <> _utf8'') and (`Calcul_Recup`.`Imputation` <> _utf8'') and (`Calcul_Recup`.`Decompte` <> _utf8'0') and
     (`Calcul_Recup`.`Decompte` > _utf8'6') and (`Calcul_Recup`.`Imputation` = `affaires`.`afNumero`)) group by `Calcul_Recup`.`Collaborateur`,`Calcul_Recup`.`Date_Deb`)
     order by `Collaborateur`,`Date_Deb`;
    De plus je viens de faire un essai, pour envoyer ces données dans une listbox dans un Userform Excel.

    Le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Rs.Open "SELECT Collaborateur, Imputation, Date_Deb, Date_Fin, Recuperable from Essai;", Cn
     
     
    Pointage.Recup_Visuel.AddItem "Collaborateur"
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 1) = "Imputation"
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 2) = "Date de Début"
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 3) = "Date de Fin"
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 4) = "Récupérable"
    While Rs.EOF = False
    Pointage.Recup_Visuel.AddItem IIf(IsNull(Rs.Fields(0).Value), "", Rs.Fields(0).Value)
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 1) = IIf(IsNull(Rs.Fields(1).Value), "", Rs.Fields(1).Value)
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 2) = IIf(IsNull(Rs.Fields(2).Value), "", Rs.Fields(2).Value)
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 3) = IIf(IsNull(Rs.Fields(3).Value), "", Rs.Fields(3).Value)
    Pointage.Recup_Visuel.List(Pointage.Recup_Visuel.ListCount - 1, 4) = IIf(IsNull(Rs.Fields(4).Value), "", Rs.Fields(4).Value)
    Et si je laisse la colonne "Recuperable", j'ai l'erreur suivante:

    Erreur d'exécution '381':
    Impossible de définir la propriété List. Index de table de propriétés non valide.
    Si j'enlève le champ "Recuperable" (donc Rs.Fields(4)) de mon code, il marche très bien.

    J'ai l'impression que ça vient des propriétés de la vue.

    Serait il plus adapté de faire une procédure qui copie les données dans une vraie table, ou la vue est quand même adaptée ? C'est peut être une piste.

Discussions similaires

  1. Requête sql avec jointure qui ne fonctionne pas
    Par Damien062 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 10/03/2015, 09h18
  2. Réponses: 2
    Dernier message: 16/05/2012, 09h48
  3. [ODBC] Requète SQL qui ne retourne rien
    Par WebManiaK dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/01/2009, 14h33
  4. [MySQL] Requête qui ne retourne rien
    Par baleiney dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/06/2006, 18h29
  5. [VBA-E] Requète SQL avec chemin de base de données variable
    Par Svart26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2006, 13h29

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