Comment extraire des données de SQL Server via Excel Vba???? - VB/VBA/VBS - Programmation
Marsh Posté le 23-05-2006 à 13:49:58
c'est possible vu que c'est ce que j'ai a faire pour mon stage mais je suis désolé je suis dans a même galère
bonne chance
Marsh Posté le 23-05-2006 à 17:54:05
http://support.microsoft.com/kb/q246335/
http://support.microsoft.com/kb/q257819/
http://support.microsoft.com/kb/q244761/
http://www.exceltip.com/st/Import_ [...] l/427.html
http://drq.developpez.com/vb/tutoriels/ADO/
http://www.informit.com/guides/con [...] m=135&rl=1
voir aussi l'aide en ligne VBA
Taper SQL dans Aide Intuitive et Index
il y a des portions de code à adapter
http://www.vb-helper.com/AdoTalk/AdoTalk.zip
C'est du VB6 mais "aisément" transposable en VBA
Marsh Posté le 24-05-2006 à 08:23:06
merci pour tous ces site.
j'ai vu aussi quelques articles interessants sur le site vbfrance
@++
Marsh Posté le 24-05-2006 à 12:16:32
un exemple,n'ayant pas de SQL Server la chaine de connexion sera à trouver sinon ça marche
voir http://forum.hardware.fr/hardwaref [...] 0668-1.htm pour un SELECT
Marsh Posté le 24-05-2006 à 12:42:07
un peu mieux
Option Explicit
'Cocher Outils References ActiveX Data Objects x.x Object Library.
Public Sub ADOImportTableAccess(FichierBaseAccess As String, NomTable As String, Cible As Range)
Dim Connexion As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim i As Integer
Dim Requete As String
Set Connexion = New ADODB.Connection
Connexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & FichierBaseAccess & ";"
Set Rs = New ADODB.Recordset
Requete = "SELECT NOM, PRENOM, AILE, CHAMBRE, UNITE FROM " & NomTable & " WHERE (PRESENT = -1) AND (DISPONIBLE = 0) ORDER BY UNITE ASC,NOM ASC"
With Rs
.CursorLocation = adUseClient
.Open Requete, Connexion, adOpenDynamic, adLockOptimistic
For i = 0 To Rs.Fields.Count - 1
Cible.Offset(0, i).Value = Rs.Fields(i).Name
Next
Cible.Offset(1, 0).CopyFromRecordset Rs
End With
Rs.Close
Set Rs = Nothing
Connexion.Close
Set Connexion = Nothing
End Sub
Sub Bouton1_QuandClic()
Dim Chemin As String
Dim NomTable As String
Dim Cible As Range
Application.ScreenUpdating = False
Cells.Clear
Chemin = ThisWorkbook.Path & "\Cpasan.mdb"
NomTable = "CPASAN"
Set Cible = Cells(1, 1)
ADOImportTableAccess Chemin, NomTable, Cible
Cells.Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A1" ).Select
Application.ScreenUpdating = True
End Sub
Marsh Posté le 24-05-2006 à 14:31:10
Pour les chaines de connexions voir http://www.carlprothman.net/Default.aspx?tabid=81
Marsh Posté le 24-05-2006 à 21:48:33
voir http://forum.hardware.fr/hardwaref [...] 0668-1.htm pour un INSERT toujours malheureusement sans SQl Server
Marsh Posté le 29-05-2006 à 08:51:49
si cela peut t'aider j'ai une connection vba vers une base access :
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 24/05/2006 par cyril
'
' Touche de raccourci du clavier: Ctrl+a
Dim objConn, objRS
Dim source, table, chemin, BD, fichier, m As String
Dim k, j, lig As Integer
Dim champ, nb_champ, adOpenKeyset
Dim n As Integer
Worksheets("feuil1" ).Select
'chemin d'acces BD
chemin = "C:\Documents and Settings\gestion1\Bureau\"
'nom de la base access
fichier = Range("b1" ).Value
BD = fichier & ".mdb"
source = chemin & BD
'connection avec la BD
Set objConn = CreateObject("adodb.connection" )
'pointer sur l'enregistrementcomplet d'une table
Set objRS = CreateObject("adodb.recordset" )
'ouvrir connection avec access
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & source
'table à traiter
table = Range("b2" ).Value
'ouvrir la table sur l'enr n°1:
objRS.Open UCase(table), objConn
Worksheets.Add
n = 2
While Worksheets("feuil" & n).Range("A1" ) <> ""
n = n + 1
Wend
'________________________________________________________________________________
'ecriture des nom des champs ds les cellules a1,b1,...
Worksheets("feuil" & n).Select
k = 1
For Each champ In objRS.fields
Cells(1, k) = champ.Name
k = k + 1
Next
nb_champ = objRS.fields.Count
'_________________________________________________________________________________
'ecriture des enregistrements
'numero de la ligne qui reçoit le premiere enreg.
lig = 2
'TQ non fdf
While Not objRS.EOF
j = 0
For Each champ In objRS.fields
Cells(lig, 1 + j) = champ
j = j + 1
Next champ
lig = lig + 1
'enreg. suivant :
objRS.MoveNext
Wend
'fermeture de la connection
objRS.Close
objConn.Close
'liberé les ressources
Set objRS = Nothing
Set objConn = Nothing
end Sub
voila c'est tous ce que je peut faire.
bonne chance
@+
PS : merci KIKI29 pour ton aide.
Marsh Posté le 31-05-2006 à 09:07:11
sa y'est j'ai réussi a me connecter je te donne mon code de connection :
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Set conn = New ADODB.Connection
With conn
.Provider = "SQLOLEDB.1;user ID=nomutilisateur;initial Catalog=nomdetabase;data source=nomdetasource"
.Open
End With
avant cela il faut juste aller dans l'editeur de macro: outil/references et tu active microsoft activeX data object recordset 2.7 library
voili voilou
bonne chance et que la force soit avec toi
Marsh Posté le 03-06-2005 à 12:56:57
salut
je débute dans le monde informatique et je voulais savoir si on pouvait à partir d'Excel extraire des données de ma base de données qui est sous SQL server 2000??? Comme il s'agit de 2 produits Microsoft je me demandais s'il n'existait pas de liens directs. Je voudrais en effet afficher les résultats de mes requêtes sous Excel ms sans passer par l'analyseur de requêtes, est il donc possible d'attaquer la base de données via Excel????
Merci d'avance pour les réponses!!!!