Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[AMATEUR] Connexion VC Excel 2007 et SQL

  • Initiateur de la discussion Initiateur de la discussion stadros83
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

stadros83

Guest
Bonjour,

Je cherche désespérément des informations pour me connecter à une base de données SQL Server via Excel !

Je souhaite faire des graphiques par rapport à certaines requêtes et compagnies mais pour ça il faudrait déjà que j'arrive à m'y connecter !

Si j'utilise la connexion d'Excel 2007 ça fonctionne ... mais ça ne prend pas ce que je veux.

Sous VB j'ai vu la variable ODBCConnection, mais je ne sais pas si c'est celle ci ?

Donc en gros ma question est : comment faire pour se connecter facilement à une base de données SQL SERVER ?

😀
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

bonjour

je ne connais pas SQL server, mais j'ai vus que ADO pouvait le gerer en VB6 (que je ne connais pas non plus) voici un lien qui te donnera une xla qui permet avec ADO de gere une Base Acces, avec imporation de données par filtre et SQL. j'espère que tu n'auras pas trop de recherches pour trouver les modif à y apporter

Le lien

Si tu les trouve, peux ru les poster Stp, que je modifie la Xla de base.
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Bonjour,

Merci pour la réponse mais en fait je ne souhaite pas utiliser Access, mais un SQL server.

Nous avons une énorme base de données professionnelle et j'ai besoin de récupérer des données pour essayer d'en faire des graphiques.
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

re:

une petite recherche sur google avec ce terme : connexion SQL et excel
et 2 secondes après, je tombe la dessus :
1er site donné par Google
avec ceci :
Code:
Dim Connex As New ADODB.Connection
   
    Connex.ConnectionString = "Driver={SQL Server};" & _
           "Server=192.168.xxx.xxx;" & _
           "Address=192.168.xxx.xxx,1433;" & _
           "Network=DBMSSOCN;" & _
           "Database=Sportifs;" & _
           "Uid=sa;" & _
           "Pwd=*******"
    Connex.Open
ce qui ressemble étrangement à ce que j'ai dans ma XLA
j'ai donc modifié ma Xla pour mettre en place cette procédur Factice pour l'instant puisque je ne peux pas tester.
Procedure Xla : Function ADO_Open_Access_File dans module ADO_Usf
Code:
Public Function ADO_Open_Access_File(ByVal bdd As String, Optional ty_file As Byte = 0) As Boolean ' Ouverture d'un projet
    Dim trav As ADODB.Recordset ' Zone de travail
    Dim Ado_Sql As ADODB.Recordset
    Dim i As Integer, j As Integer
    Set ADO_File.File = New ADODB.Connection ' Initialisation de la connection
    ADO_File.File.Provider = "Microsoft.Jet.Oledb.4.0"
    Select Case ty_file
        Case 0 ' Fichier access
            ADO_File.File.ConnectionString = bdd
        Case 1 ' Fichier SQL
            ADO_File.File.ConnectionString = "Driver={SQL Server};" & _
                "Server=192.168.xxx.xxx;" & _
                "Address=192.168.xxx.xxx,1433;" & _
                "Network=DBMSSOCN;" & _
                "Database=" & bdd & ";" & _
                "Uid=sa;" & _
                "Pwd=*******"
    End Select
    ADO_File.File.ConnectionString = bdd
    On Error GoTo erreur
    ADO_File.File.Open ' Ouverture de la connection, du projet
    On Error GoTo 0
    Set trav = ADO_File.File.OpenSchema(adSchemaTables) ' Recupération du chémat du projet
    trav.MoveFirst ' se placer au debut de la table
    i = -1: j = -1
    While Not trav.EOF
        Select Case trav.Fields(3) ' Controle du type de Module
            Case "TABLE", "VIEW" ' Table ou requete
                i = i + 1
                ReDim Preserve ADO_File.Table_Name(i)
                ReDim Preserve ADO_File.Table_Type(i)
                ADO_File.Table_Name(i) = trav.Fields(2)
                ADO_File.Table_Type(i) = trav.Fields(3)
        End Select
        trav.MoveNext ' Avance d'un Module
    Wend
    trav.Close ' Fermeture
    Set trav = Nothing ' Vide la mémoire
    ReDim ADO_Module(UBound(ADO_File.Table_Name)) ' Redimentionne les modules pour acceder aux champs
    For i = 0 To UBound(ADO_File.Table_Name)
        Set ADO_Module(i).Module = New ADODB.Recordset ' Initialiser la connection avec la table
        If ADO_File.Table_Type(i) = "TABLE" Then
            ADO_Module(i).Module.Open "[" & ADO_File.Table_Name(i) & "]", ADO_File.File, adOpenDynamic, adLockOptimistic ' Ouvrir la Table
        Else
            ADO_Module(i).Module.Open "[" & ADO_File.Table_Name(i) & "]", ADO_File.File, adOpenStatic, adLockReadOnly ' Ouvrir une requete
            ADO_Module(i).Nb = ADO_Module(i).Module.RecordCount
        End If
        ADO_Module(i).Field_Nb = ADO_Module(i).Module.Fields.Count ' recuperer le nombre de champs
        For j = 0 To ADO_Module(i).Field_Nb - 1 ' Récuperer tous les champs
            ReDim Preserve ADO_Module(i).Field_Name(j)
            ReDim Preserve ADO_Module(i).Field_Type(j)
            ADO_Module(i).Field_Name(j) = ADO_Module(i).Module.Fields(j).Name ' le Nom
            ADO_Module(i).Field_Type(j) = ADO_Module(i).Module.Fields(j).Type ' Le Type
        Next j
        If ADO_File.Table_Type(i) = "TABLE" Then
            Set Ado_Sql = New ADODB.Recordset
            Ado_Sql.Open "SELECT * FROM [" & ADO_File.Table_Name(i) & "]", ADO_File.File, adOpenStatic, adLockReadOnly
            ADO_Module(i).Nb = Ado_Sql.RecordCount
        End If
    Next i
    ADO_Open_Access_File = True
    GoTo fin
erreur:
    ADO_Open_Access_File = False
fin:
End Function
mais regarde bien le site donné, tu devrais avoir un bon filon
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Ca va sans doute m'aider, je regarde ça !

Merci bien !

Edit : Bon par contre petit soucis, VB ne semble pas connaître la commande ADODB.Connection.

Est-ce qu'il y a une référence à ajouter pour ça ?

Edit2 : Je m'auto réponds, il faut rajouter la références, Microsoft AtiveX Data Objects 2.x Library.
 
Dernière modification par un modérateur:
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Une fois la connexion effectuée par contre que faire ??

J'ai cru comprendre qu'il fallait utiliser une variable ADODB.Recordset.

...

Pas évident le VB ... j'ai l'habitude de coder sur du php/mysql et c'est nettement plus simple !
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Une fois le rs.open effectué, avec par exemple un "Select * ...", comment fait-on pour utiliser les données ?

C'est là que je bloque pour le moment et je dois dire qu'avec le code au dessus je n'ai pas trouvé 😛 !

Par exemple je fais un "SELECT * FROM matable" et je voudrai copier tout ce qui s'y trouve sur une feuille de mon classeur excel.

Est-ce que je dois parcourir un tableau ?

Genre
For i = 0 TO i = rs.count???
blablabla
Next i

??

Désolé, je n'arrive pas à trouver d'informations claires et précises sur l'utilisation !!
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Encore moi, donc j'avance dans mes recherches.

'Ouverture de la base de données
cnx.Open

RequeteOk = cnx.State

La connexion est OK.

Requete = "SELECT * FROM matable"

La requête est bien "créée" ... enfin je pense ?

'Requête
rs.Open Requete, _
ActiveConnection:=cnx, _
CursorType:=adOpenForwardOnly, _
LockType:=adLockReadOnly

Et là ça bloque, Erreur d'exécution, *****, Erreur Automation.
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Personne ?

Je suis vraiment bloqué là et impossible d'exécuter une requête, je copie colle ma sub :

Code:
Sub Connexion_BDD_et_Requete()

'Déclaration des variables de connexion
Dim i As Integer
Dim RequeteOk As Boolean
Dim rs As New ADODB.Recordset
Dim cnx As New ADODB.Connection
Dim cnxString, Requete, NomUtilisateur, MotDePasse, NomServeur, NomBaseDeDonnees, NomDuDSN As String

NomUtilisateur = "monuser"
MotDePasse = "monmp"
NomServeur = "monserveur"
NomBaseDeDonnees = "mabase"
NomDuDSN = "mondsn"

'Définition de la chaîne de connexion
cnxString = "UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnees & ";"

cnx.ConnectionString = cnxString

'Ouverture de la base de données
cnx.Open

RequeteOk = cnx.State

'Requête
Requete = "Select aa, bb, cc , dd From matable1 Inner Join matable2 On bb = aa Where (aa >= '2006/01/01' And aa <= '2006/12/31') And ee = 'valeur'"

rs.Open Requete, cnx, CursorType = adOpenForwardOnly, LockType = adLockReadOnly

rs.MoveLast
i = rs.RecordCount
rs.MoveFirst

ListeResultats = rs.GetRows(i)

'Fermeture de la connexion à la BDD
rs.Close
cnx.Close

End Sub

Jusqu'à la ligne Requete = *** tout est bon, enfin tout semble bon.

Mon cnx.State est à 1 (donc normalement la connexion est OK?), la String requete est bien renseignée, et maintenant quand j'essaye de faire mon rs.Open, j'ai le message d'erreur suivant :

Erreur d'exécution '3001':
Erreur définie par l'application ou par l'objet
 
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

Bon j'ai trouvé un début de piste, j'ai un problème avec ma requête en fait.

La requête fonctionne bien sous SQL Excel et sous le SQL Server, mais elle ne semble pas passer sous VBA. Une requête plus simple en utilisant une autre table passe sans soucis.

Edit : Bon en fait le soucis vient plus ou moins d'Excel. Il n'arrive pas à envoyer mes requêtes correctement semble-t-il, du moins quand il y a des dates dedans.

Si par exemple je fais ça :

SELECT aaa FROM matable WHERE aaa >= '2007-01-01' AND bbb = 'valeur'

Ca fonctionne.
Mais si je fais ça :

SELECT aaa FROM matable WHERE (aaa >= '2007-01-01' AND aaa <= '2007-03-30') AND bbb = 'valeur'

Ou ça :

SELECT aaa FROM matable WHERE (aaa BETWEEN '2007-01-01' AND '2007-03-30') AND bbb = 'valeur'

Ca ne marche plus.

Une idée ?
 
Dernière modification par un modérateur:
Re : [AMATEUR] Connexion VC Excel 2007 et SQL

En fait c'était même la date entière qu'il fallait inverser !

Quand je faisais une requête via SQL Excel ça mettait AAAA-MM-JJ mais en fait pour que ça fonctionne sous Excel AVEC DEUX DATES il fallait que je mette JJ/MM/AAAA (comme c'est écrit dans les champs en fait).

Du coup là où c'est bizarre c'est qu'avec une seule date je n'avais pas de soucis de format ... des fois il ne faut pas trop chercher à comprendre !!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
8
Affichages
11 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…