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 :

Requete SQL VBA Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut
    Bonjour,

    j'ai un problème que nos ITs sont incapables de résoudre, j'espère trouver plus de réponses ici

    On aimerait faire des reportings via Excel et Vba. Ce ne sont pas des requetes compliqués mais nous ne savons pas comment connecter Oracle à VBA/Excel.

    Voici le code que j'ai réussi a construire grâce aux informations trouvées sur le net :

    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
    Sub Connection_Oracle()
     
    'Déclaration de la variable de connexion
    Dim cNx As ADODB.Connection
    Set cNx = New ADODB.Connection
     
    'Définition de la chaîne de connexion
    cNx.ConnectionString = "DSN=XxX" & NomDuDSN & ";UID=XxX" & NomUtilisateur & ";PWD=XxX" & MotDePasse & ";"
     
    Dim varSQL As String
     
    varSQL = "SELECT tr.trade_id FROM trade tr WHERE tr.trade_id = 123"
     
    With ActiveSheet.QueryTables.Add(Connection:=cNx, Destination:=ActiveSheet.Range("A1"), Sql:=varSQL)
        .Refresh
     
    End With
     
    End Sub
    A priori, il n'y a pas de souci au niveau de la connection avec le serveur. En tout cas dans microsoft Query, la connexion s'effectue correctement (il retrouve les tables de mon serveur). Je dis a priori, car je n'ai aucun moyen de tester la connexion dans VBA étant donné que je n'arrive meme pas a obtenir une réponse via un msgbox...

    Voilà,

    est ce que quelqu'un en saurait un peu plus sur le requetage sur VBA/Excel ?
    Comment savoir si la connexion est correct ?
    Comment faire une requete ?
    Et comment formater le résultat obtenu ?

    Je sais qu'il y a beaucoup de quesitons, mais si vous avez une réponse à l'unes de ces questions : n'hésiter pas !

    Merci beaucoup.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé 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 : 72
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Pour les premiers pas :
    tu ouvres une connexion ADO
    tu ouvres un Recordset ADO avec une requête simple
    Si oRst est ton recordse tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworkbook.Worksheets("Feuil1").Range("A1").Copyfromrecordset oRst
    Cela devrait t'éclairer. SI tu as ensuite d'autres pb, tu reviens.

    Cordialement,

    PGZ

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut
    Je ne suis pas sur de bien comprendre, quelle valeur devrait apparaitre dans ma cellule A1 ?

    A quoi correspond le recordset ?


    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
    Sub Connection_Oracle()
     
    'Déclaration de la variable de connexion
    Dim cNx As ADODB.Connection, oRS As ADODB.Recordset
    Set cNx = New ADODB.Connection
     
     
    'Définition de la chaîne de connexion
    cNx.ConnectionString = "DSN=XxX" & NomDuDSN & ";UID=XxX" & NomUtilisateur & ";PWD=XxX" & MotDePasse & ";"
     
    cNx.Open
     
    Dim varSQL As String
     
    varSQL = "SELECT tr.trade_id FROM trade tr WHERE tr.trade_id = 123"
     
    ThisWorkbook.Worksheets("Feuil1").Range("A1").CopyFromRecordset oRS
     
    'With ActiveSheet.QueryTables.Add(Connection:=cNx, Destination:=ActiveSheet.Range("A1"), Sql:=varSQL)
    '    .Refresh
    '
    'End With
     
    'With ActiveSheet.QueryTables.Add(Connection:=cNx, Destination:=Range("A1"))
    '.CommandText = SQLSTRING
    '.AdjustColumnWidth = False
    '.Refresh (False)
     
    'End With
    End Sub

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé 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 : 72
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,

    CEla devrait ressembler à
    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 Connection_Oracle() 
    'Déclaration de la variable de connexion
    Dim cNx As ADODB.Connection, oRS As ADODB.Recordset, sSQL As String
    Dim NomDuDSN As String, NomUtilisateur As String, MotDePasse As String
     
    Set cNx = New ADODB.Connection
     
    'Définition de la chaîne de connexion
    cNx.ConnectionString = "DSN=XxX" & NomDuDSN & ";UID=XxX" & NomUtilisateur & ";PWD=XxX" & MotDePasse & ";"
    cNx.Open
     
    sSQL = "SELECT tr.trade_id FROM trade tr WHERE tr.trade_id = 123"
    Set oRS = New ADODB.Recordset
     
    oRS.Open sSQL, cNx, adOpenStatic
     
    With ThisWorkbook.Worksheets("Feuil1")
        .UsedRange.ClearContents
        .Range("A1").CopyFromRecordset oRS
    End With
     
    oRS.Close
    cNx.Close
    Set oRS = Nothing
    Set cNx = Nothing
    End Sub
    Cordialement,

    PGZ

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 69
    Par défaut
    La connection se fait bien. Si je mets les mauvais identifiants, le programme me renvoie un message d'erreur.
    En revanche toujours aucune écriture au niveau de la cellule A1.

    A quoi sert la commande recordset ?

    Aurais tu une alternative pour faire apparaitre le resultat de la requete ? (qui devrait etre "123")

    Si j'arrivais a faire apparaitre un résultat, j'aurais une base pour démarrer les recherches.

    Merci d'avance pour ton aide

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé 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 : 72
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Si la requête renvoie au moins 1 enregistrement, il devrait être copié dans la feuille. Tu peux vérifier avec
    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
    Sub Connection_Oracle()
    'Déclaration de la variable de connexion
    Dim cNx As ADODB.Connection, oRS As ADODB.Recordset, sSQL As String
    Dim NomDuDSN As String, NomUtilisateur As String, MotDePasse As String
     
    Set cNx = New ADODB.Connection
     
    'Définition de la chaîne de connexion
    cNx.ConnectionString = "DSN=XxX" & NomDuDSN & ";UID=XxX" & NomUtilisateur & ";PWD=XxX" & MotDePasse & ";"
    cNx.Open
     
    sSQL = "SELECT tr.trade_id FROM trade as tr WHERE tr.trade_id = 123;"
    Set oRS = New ADODB.Recordset
     
    oRS.Open sSQL, cNx, adOpenStatic
     
    MsgBox IIf(oRS.EOF, "Il n'y a aucun enregistrement", "Il y a au moins un enregistrement")
     
    With ThisWorkbook.Worksheets("Feuil1")
        .UsedRange.ClearContents
        .Range("A1").CopyFromRecordset oRS
    End With
     
    oRS.Close
    cNx.Close
    Set oRS = Nothing
    Set cNx = Nothing
    End Sub
    Si le jeu est vide et qu'il n'y a pas d'erreur levée, essaie à nouveau en enlevant la clause WHERE.

    Cordialement,

    PGZ

Discussions similaires

  1. Exportation d'une requete SQL vers excel
    Par snooopy007 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 27/07/2006, 17h00
  2. cote requete SQL - VBA
    Par Sam 069 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 17/07/2006, 08h10
  3. [VBA-E] Requete SQL sous Excel
    Par climz dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2006, 14h05
  4. Résultat d'une requete SQL vers Excel
    Par climz dans le forum Access
    Réponses: 6
    Dernier message: 09/05/2006, 15h44
  5. Exporter des données d'un requete SQL vers excel (csv)
    Par PrinceMaster77 dans le forum ASP
    Réponses: 9
    Dernier message: 08/10/2005, 22h28

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