OVH Cloud OVH Cloud

pb vb et excel

4 réponses
Avatar
gaza
je cherche =E0 remplir un fichier excel avec des donn=E9es=20
venant d'une requete sql et je d=E9sire que un ligne du=20
recordset corresponde =E0 une ligne de la feuille excel que=20
j'ai bien sur subdivis=E9 en colonnes.
je remercie tous ceux qui voudront bien m'aider

4 réponses

Avatar
LE CARRE Yannick
Si tu es sous Access avec ta requête, sélectionne tous les enregistrements
(Ctrl+A) , puis copie les données (Ctrl+C) et enfin sous Excel, colle les
(Ctrl+V).

Yannick
gaza a écrit dans le message :
0d1301c37c5a$6e007350$
je cherche à remplir un fichier excel avec des données
venant d'une requete sql et je désire que un ligne du
recordset corresponde à une ligne de la feuille excel que
j'ai bien sur subdivisé en colonnes.
je remercie tous ceux qui voudront bien m'aider
Avatar
Hervé
Salut gaza,
Avec ADO (cocher la réf.). La proc ci-dessous récupère les valeurs dans une
base de donnée Access (je n'ai pas mis de clause WHERE donc récup de toutes
les valeurs, mais comme ta requête est déjà faite, adapte) et les inscrit
dans un classeur excel et ceci sans devoir ouvrir l'un ou l'autre. J'ai fais
le test depuis le VBE d'Excel mais je pense que cela doit marcher depuis VB
(pas envie de tester ;o) ). Attention, le classeur doit avoir des entètes de
colonnes car sinon marche pas avec INSERT INTO (trouve pas les champs). F1
correspond à la colonne A, F2 à la colonne B, etc...

Private Sub ConnecterClasseur(ConnectBD As ADODB.Connection, _
Optional Rs)

Dim Fichier As String
' Adapter le chemin du classeur
Fichier = "D:Classeur1.xls"

Set ConnectBD = New ADODB.Connection
If Not IsMissing(Rs) Then
Set Rs = New ADODB.Recordset
End If

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=2;"""

End Sub
Private Sub ConnecterBase(ConnectBD As ADODB.Connection, _
Optional Rs)

Set ConnectBD = New ADODB.Connection
Set Rs = New ADODB.Recordset

With ConnectBD
.Provider = "Microsoft.Jet.OLEDB.4.0"
' Adapter le chemin de la base
.ConnectionString = "D:MesBasesMaBase.mdb"
.Open
End With

End Sub

Private Sub AjoutAuClasseur()
Dim ConnectClasseur As ADODB.Connection
Dim ConnectBase As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim NomFeuille As String
Dim ChaineSQL As String

' Adapter le nom de la feuille
NomFeuille = "Feuil1"

ConnecterBase ConnectBase, Rs
ConnecterClasseur ConnectClasseur

With Rs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "SELECT * FROM MaTable", ConnectBase
Do While Not .EOF
ChaineSQL = "INSERT INTO `" & NomFeuille & "$`"
ChaineSQL = ChaineSQL & "(F1,F2,F3,F4,F5,F6) "
ChaineSQL = ChaineSQL & "VALUES ('" _
& .Fields(0).Value & "','" _
& .Fields(1).Value & "'," _
& .Fields(2).Value & "," _
& .Fields(3).Value & ",#" _
& .Fields(4).Value & "#,#" _
& .Fields(5).Value & "#)"

ConnectClasseur.Execute ChaineSQL
.MoveNext
Loop
End With

ConnectBase.Close
ConnectClasseur.Close

Set ConnectBase = Nothing
Set ConnectClasseur = Nothing
Set Rs = Nothing

End Sub

Hervé.

"gaza" a écrit dans le message news:
0d1301c37c5a$6e007350$
je cherche à remplir un fichier excel avec des données
venant d'une requete sql et je désire que un ligne du
recordset corresponde à une ligne de la feuille excel que
j'ai bien sur subdivisé en colonnes.
je remercie tous ceux qui voudront bien m'aider
Avatar
gaza
sallut hervé j'ai tapé ton code mais sur vb6 il génère
une erreur à la ligne

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel
8.0;HDR=NO;IMEX=2;"""
le compilateur dit " the initialization string specified
does not conform to specification" j'ai comme
l'impression que le provider n'est pas le bon
help!









-----Message d'origine-----
Salut gaza,
Avec ADO (cocher la réf.). La proc ci-dessous récupère


les valeurs dans une
base de donnée Access (je n'ai pas mis de clause WHERE


donc récup de toutes
les valeurs, mais comme ta requête est déjà faite,


adapte) et les inscrit
dans un classeur excel et ceci sans devoir ouvrir l'un


ou l'autre. J'ai fais
le test depuis le VBE d'Excel mais je pense que cela


doit marcher depuis VB
(pas envie de tester ;o) ). Attention, le classeur doit


avoir des entètes de
colonnes car sinon marche pas avec INSERT INTO (trouve


pas les champs). F1
correspond à la colonne A, F2 à la colonne B, etc...

Private Sub ConnecterClasseur(ConnectBD As


ADODB.Connection, _
Optional Rs)

Dim Fichier As String
' Adapter le chemin du classeur
Fichier = "D:Classeur1.xls"

Set ConnectBD = New ADODB.Connection
If Not IsMissing(Rs) Then
Set Rs = New ADODB.Recordset
End If

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel


8.0;HDR=NO;IMEX=2;"""

End Sub
Private Sub ConnecterBase(ConnectBD As ADODB.Connection,


_
Optional Rs)

Set ConnectBD = New ADODB.Connection
Set Rs = New ADODB.Recordset

With ConnectBD
.Provider = "Microsoft.Jet.OLEDB.4.0"
' Adapter le chemin de la base
.ConnectionString = "D:MesBasesMaBase.mdb"
.Open
End With

End Sub

Private Sub AjoutAuClasseur()
Dim ConnectClasseur As ADODB.Connection
Dim ConnectBase As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim NomFeuille As String
Dim ChaineSQL As String

' Adapter le nom de la feuille
NomFeuille = "Feuil1"

ConnecterBase ConnectBase, Rs
ConnecterClasseur ConnectClasseur

With Rs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "SELECT * FROM MaTable", ConnectBase
Do While Not .EOF
ChaineSQL = "INSERT INTO `" & NomFeuille & "$`"
ChaineSQL = ChaineSQL & "(F1,F2,F3,F4,F5,F6) "
ChaineSQL = ChaineSQL & "VALUES ('" _
& .Fields(0).Value & "','" _
& .Fields(1).Value & "'," _
& .Fields(2).Value & "," _
& .Fields(3).Value & ",#" _
& .Fields(4).Value & "#,#" _
& .Fields(5).Value & "#)"

ConnectClasseur.Execute ChaineSQL
.MoveNext
Loop
End With

ConnectBase.Close
ConnectClasseur.Close

Set ConnectBase = Nothing
Set ConnectClasseur = Nothing
Set Rs = Nothing

End Sub

Hervé.

"gaza" a écrit dans le message


news:
0d1301c37c5a$6e007350$
je cherche à remplir un fichier excel avec des données
venant d'une requete sql et je désire que un ligne du
recordset corresponde à une ligne de la feuille excel que
j'ai bien sur subdivisé en colonnes.
je remercie tous ceux qui voudront bien m'aider


.



Avatar
Hervé
Salut gaza,
Je viens de tester dans VB et ça marche nickel. Je tourne sous Win98 et
Excel 2002. Je ne comprend pas le blème ???
Je vais creuser !!!
Hervé.

"gaza" a écrit dans le message news:
5b9201c37cef$bf4f5060$
sallut hervé j'ai tapé ton code mais sur vb6 il génère
une erreur à la ligne

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel
8.0;HDR=NO;IMEX=2;"""
le compilateur dit " the initialization string specified
does not conform to specification" j'ai comme
l'impression que le provider n'est pas le bon
help!









-----Message d'origine-----
Salut gaza,
Avec ADO (cocher la réf.). La proc ci-dessous récupère


les valeurs dans une
base de donnée Access (je n'ai pas mis de clause WHERE


donc récup de toutes
les valeurs, mais comme ta requête est déjà faite,


adapte) et les inscrit
dans un classeur excel et ceci sans devoir ouvrir l'un


ou l'autre. J'ai fais
le test depuis le VBE d'Excel mais je pense que cela


doit marcher depuis VB
(pas envie de tester ;o) ). Attention, le classeur doit


avoir des entètes de
colonnes car sinon marche pas avec INSERT INTO (trouve


pas les champs). F1
correspond à la colonne A, F2 à la colonne B, etc...

Private Sub ConnecterClasseur(ConnectBD As


ADODB.Connection, _
Optional Rs)

Dim Fichier As String
' Adapter le chemin du classeur
Fichier = "D:Classeur1.xls"

Set ConnectBD = New ADODB.Connection
If Not IsMissing(Rs) Then
Set Rs = New ADODB.Recordset
End If

ConnectBD.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";" & _
"Extended Properties=""Excel


8.0;HDR=NO;IMEX=2;"""

End Sub
Private Sub ConnecterBase(ConnectBD As ADODB.Connection,


_
Optional Rs)

Set ConnectBD = New ADODB.Connection
Set Rs = New ADODB.Recordset

With ConnectBD
.Provider = "Microsoft.Jet.OLEDB.4.0"
' Adapter le chemin de la base
.ConnectionString = "D:MesBasesMaBase.mdb"
.Open
End With

End Sub

Private Sub AjoutAuClasseur()
Dim ConnectClasseur As ADODB.Connection
Dim ConnectBase As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim NomFeuille As String
Dim ChaineSQL As String

' Adapter le nom de la feuille
NomFeuille = "Feuil1"

ConnecterBase ConnectBase, Rs
ConnecterClasseur ConnectClasseur

With Rs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "SELECT * FROM MaTable", ConnectBase
Do While Not .EOF
ChaineSQL = "INSERT INTO `" & NomFeuille & "$`"
ChaineSQL = ChaineSQL & "(F1,F2,F3,F4,F5,F6) "
ChaineSQL = ChaineSQL & "VALUES ('" _
& .Fields(0).Value & "','" _
& .Fields(1).Value & "'," _
& .Fields(2).Value & "," _
& .Fields(3).Value & ",#" _
& .Fields(4).Value & "#,#" _
& .Fields(5).Value & "#)"

ConnectClasseur.Execute ChaineSQL
.MoveNext
Loop
End With

ConnectBase.Close
ConnectClasseur.Close

Set ConnectBase = Nothing
Set ConnectClasseur = Nothing
Set Rs = Nothing

End Sub

Hervé.

"gaza" a écrit dans le message


news:
0d1301c37c5a$6e007350$
je cherche à remplir un fichier excel avec des données
venant d'une requete sql et je désire que un ligne du
recordset corresponde à une ligne de la feuille excel que
j'ai bien sur subdivisé en colonnes.
je remercie tous ceux qui voudront bien m'aider


.