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 :

VBA/ADO requêtes SQL


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut VBA/ADO requêtes SQL
    Bonjour,
    je me connecte via ADO à une source de données excel (fermée) et j'aimerai à l'aide de requêtes SQL récupérer les données qui m'interaissent pour ensuite les insérer dans une feuille excel ouverte. Ma connexion fonctionne néanmoins mais ma requête de fonctionne pas. L'idée est dans le code, quelle est la bonne syntaxe ?

    merci

    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
    'récupérer le n°centre
    Centre = Range("C14").Value
     
     
    'récupérer la SI correspondante dans le fichier source 0410 0420 1410
    texte_SQL1 = "SELECT FUMTRAN FROM [extraction$] WHERE FNOCI=Centre AND FNOCA=0410 "
    texte_SQL2 = "SELECT FUMTRAN FROM [extraction$] WHERE FNOCI=Centre AND FNOCA=0420 "
    texte_SQL3 = "SELECT FUMTRAN FROM [extraction$] WHERE FNOCI=Centre AND FNOCA=1410 "
     
    Set Rst1 = New ADODB.Recordset
    Set Rst2 = New ADODB.Recordset
    Set Rst3 = New ADODB.Recordset
     
    Set Rst1 = Cn.Execute(texte_SQL1)
    Set Rst2 = Cn.Execute(texte_SQL2)
    Set Rst3 = Cn.Execute(texte_SQL3)
     
    Somme = Rst1 + Rst2 + Rst3
     
    'Ecrit le résultat de la requête dans la cellule p14
    Range("P14").CopyFromRecordset Somme

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le sql serait mieux ainsi

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT sum(FUMTRAN) as total  FROM [extraction$] WHERE FNOCI= " & Centre " & 
     "AND (FNOCA='0410'  
     or  FNOCA='0420'  
    or FNOCA='1410' "

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut erreur de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT sum(FUMTRAN) as total  FROM [extraction$] WHERE FNOCI= " & Centre " & 
     "AND (FNOCA='0410'  
     OR  FNOCA='0420'  
    OR FNOCA='1410' "
    J'ai une erreur de syntaxe au niveau & Centre & il me dit attendu fin d'instruction Quelqu'un à une idée ?

    Ou puis-je trouver de la doc sur la syntaxe à utiliser dans les requêtes SQL VBA ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT sum(FUMTRAN) as total FROM [extraction$] WHERE FNOCI= " & Centre " & 
    "AND (FNOCA='0410' 
    OR FNOCA='0420' 
    OR FNOCA='1410' "
    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT sum(FUMTRAN) as total FROM [extraction$] WHERE FNOCI= " & " Centre " & 
    "AND (FNOCA='0410' 
    OR FNOCA='0420' 
    OR FNOCA='1410' "
    Cordialement

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il manque un espace avant le and et si fnoci est texte cela donnerait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    texte_SQL1 = "SELECT sum(FUMTRAN) as total  FROM [extraction$] WHERE FNOCI= '" & Centre " & 
     "' AND (FNOCA='0410'  
     OR  FNOCA='0420'  
    OR FNOCA='1410' "
    il s'agit de placer centre entre ' et '

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    j'ai toujours la même erreur : attendue fin d'instruction à la fin de la ligne centre

    Cordialement,

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    Simplement en regardant la syntaxe ce ne serait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    texte_SQL1 = "SELECT sum(FUMTRAN) as total  FROM [extraction$] WHERE FNOCI= '" & Centre & _
     "' AND (FNOCA='0410'" & _
     "OR  FNOCA='0420'" & _
    "OR FNOCA='1410' "

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Caster une variable recordset en un Double
    Merci de votre aide ma requête fonctionne le problème se trouvait au niveau de la variable Centre que je devais écrire ' " &Centre& " '. Maintenant j'ai une nouvelle erreur, je veux caster le résultat de mon recordset en un Double pour pouvoir faire des opérations dessus mais j'ai le message d'erreur suivant : INCOMPATIBILITE DE TYPE à cause du CDbl. J'ai essayé de le caster en Integer, rien à faire je n'arrive pas à le caster.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set Rst = Cn.Execute(texte_SQL)
     
     Dim Resultat As Double
     Resultat = CDbl(Rst)
    Quelqu'un a une idée ?

    Merci d'avance !!

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    essaye comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set Rst = Cn.Execute(texte_SQL)
     
     Dim Resultat As variant
     Resultat = rst.[total]
     Resultat=Cdbl(resultat)

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    J'ai essayé mais je n'ai pas accès au total de la requête SQL? VBA ne reconnait pas le variable. Existe-t-il un moyen de caster le resultat d'un recordset en integer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set Rst = New ADODB.Recordset
            Set Rst = Cn.Execute(texte_SQL)
     
            Dim Resultat As Double
            Resultat = CDbl(Rst)

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Il faut dire quel champ de ton RecordSet tu veux utiliser.
    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Resultat = CDbl(Rst("total"))

Discussions similaires

  1. VBA avec requête SQL
    Par seba_stien dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 17/10/2006, 15h39
  2. Access & ADO : Requête SQL multibases ?
    Par MaTHieU_ dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/06/2006, 17h45
  3. Réponses: 6
    Dernier message: 09/06/2006, 00h19
  4. [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
  5. [VBA-A] Requête SQL
    Par Berny03 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 24/11/2005, 21h16

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