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

Discussion :

Exécuter une requête SQL à partir d'une feuille Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    1 084
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 1 084
    Points : 191
    Points
    191
    Par défaut Exécuter une requête SQL à partir d'une feuille Excel
    Bonjour
    Depuis quelques années, j'exécute des requêtes Access à partir d'une feuille Excel (cf code vba ci dessous). Et cela fonctionne à merveille.
    Or depuis quelques temps, mes requêtes sont de plus en plus complexe et j'utilise donc non plus Access mais "SQl server management Studio" pour créer mes requêtes.
    Or j'aimerais toujours pourvoir exécuter mes requêtes Sql à partir d'Excel mais mes connaissance ne sont pas aussi poussées.

    Est il possible, de créer un code vba du même type que celui ci dessous où je ferais appelle non pas à une requête Access mais à une requête SQL Server
    je précise que mes requetes SQL Server sont déjà créer dans SQl server management Studio.

    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
    Sub test()
     
    Dim sql As String
    Dim GenereCSTRING As String
    Dim Debut As Object
     
    Dim Fin As Object
    Dim Cm As Object 'Pour utiliser une requête parametrés il faut utiliser l'oblet Command!
    Dim cn As Object 'Pour ce connecter à un base de données Access il faut utiliser l'objet Connection!
    Dim rs As Object
     
    Dim i As Integer
     
    Sheets("feuil1").Select
     
     
    sql = "SELECT  * FROM requete" ' je détermine une requête sql qui pointe sur ta requête Acces."
     
     
    Set cn = CreateObject("ADODB.Connection")
    Set Cm = CreateObject("Adodb.Command")
      'MsgBox ThisWorkbook.Path
     GenereCSTRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=chemin\BaseDonnee_Access.accdb;;Persist Security Info=False" 'Je defini un chêne de texte qui contient les information de ma connection.
     
     
     
     cn.Open GenereCSTRING 'J'ouvre ma connection.
     
     
    Cm.CommandText = sql 'je passe ma requête à mon objet command
    Cm.ActiveConnection = cn 'j'affecte ma connection à ma commande
     
    Const adDate = 7 'defini le type de parametre
     
     
    Set Debut = CreateObject("ADODB.Parameter")
    Debut.Name = "debut": Debut.Type = adDate: Debut.Value = CDate(Format(ThisWorkbook.Sheets("feuil2").Range("B97").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Debut
     
    Set Fin = CreateObject("ADODB.Parameter") 'c'est avec l'objet Parameter que je vais reseigner les parmetres de ma requête Access.
    Fin.Name = "Fin": Fin.Type = adDate: Fin.Value = CDate(Format(ThisWorkbook.Sheets("Feuil2").Range("G97").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Fin
     
     
     
    Set rs = Cm.Execute 'on recupere le résultat de la requête.
     
     
    With ThisWorkbook.Sheets("Feuil1")
     
     
         For i = 0 To rs.Fields.Count - 1 'On place le nom des champs sur la ligne 4 de ma feuille Excel
                   .Range("A1").Offset(0, i) = rs(i).Name
         Next
     
            .Range("A2").CopyFromRecordset rs 'la on copie le résultat de la requête!

  2. #2
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    juin 2019
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : juin 2019
    Messages : 153
    Points : 252
    Points
    252
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GenereCSTRING = "Provider=SQLOLEDB.1;Password=" & PassWord & ";Persist Security Info=True;User ID=" & User & ";Initial Catalog=" & Base & ";Data Source=" & Server
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sql = "SELECT  * FROM Mytable where debut=?"
     Set Debut = CreateObject("ADODB.Parameter")
    Debut.Name = "debut": Debut.Type = adDate: Debut.Value = CDate(Format(ThisWorkbook.Sheets("feuil2").Range("B97").Value, "yyyy-mm-dd hh:mm")): Cm.Parameters.Append Debut

  3. #3
    Membre habitué
    Inscrit en
    avril 2007
    Messages
    1 084
    Détails du profil
    Informations forums :
    Inscription : avril 2007
    Messages : 1 084
    Points : 191
    Points
    191
    Par défaut
    Bonjour Thumb down

    J'étais en vacances , c'est pourquoi je n'aie pas pu répondre plutôt.
    Merci pour ces lignes de codes.
    je vais les tester et je reviens vers toi pour te tenir au courant

  4. #4
    Membre éprouvé
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2004
    Messages
    818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2004
    Messages : 818
    Points : 1 017
    Points
    1 017
    Par défaut
    Bonjour

    Jette un œil à mon code OpenSource; il faut exactement ce que tu demandes : https://github.com/cavo789/vba_excel_sql

    Bonne soirée.
    Christophe (cavo789)
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan
    Développeur de marknotes, logiciel de gestion de prises de notes : https://github.com/cavo789/marknotes
    Mes logiciels OpenSource : https://www.avonture.be

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/12/2010, 12h42
  2. Réponses: 2
    Dernier message: 07/04/2010, 13h15
  3. Réponses: 1
    Dernier message: 07/12/2009, 09h25
  4. Récupérer une requête sql à partir d'un Form
    Par Yaponchik dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/03/2008, 10h55
  5. exécuter deux requêtes SQL à partir d'un bouton de commande
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/12/2006, 17h57

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