Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXEMPLE D'INSERTION DE DONNÉES SQL DANS EXCEL


Information sur la source

Catégorie :VBA Niveau : Débutant Date de création : 10/01/2005 Date de mise à jour : 13/10/2005 17:00:17 Vu : 9 868

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Ce code montre comment créer un recordset à partir d'une base SQL et l'insérer dans une feuille Excel à la suite des lignes existantes. La sélection se fait selon un date saisie par l'utilisateur dans un formulaire.
 

Source

  • Private Sub CommandButton1_Click()
  • ' ***** DEMANDE L'ACTIVATION DU COMPOSANT MICROSOFT ACTIVEX DATA OBJECT 2.7 LIBRARY
  • ' ***** DEPUIS MENU "OUTILS" - "RÉFÉRENCES" DE L'ÉDITEUR VISUAL BASIC
  • Dim Cnx As New ADODB.Connection
  • Dim Rst As New ADODB.Recordset
  • Dim Année As String * 4
  • Dim Mois As String * 2
  • Dim Jour As String * 2
  • Dim AMJ As String * 8
  • Dim Req1 As String
  • Dim Req2 As String
  • Année = TextBox1
  • Mois = TextBox2
  • Jour = TextBox3
  • AMJ = Année & Mois & Jour
  • ' ***** INSTRUCTIONS DE SÉLECTION DES CHAMPS ET DE JOINTURE *****
  • Req1 = "select d.inputdate, cu.inv_name, c.sit_name, c.sit_town, a.ct_name, a.ct_town, d.dwgbbsnum, "
  • Req1 = Req1 & "d.esrc_file, d.rc_num, r.ps_code, r.fabweight, d.delivstart, r.cust_ref from dwgbbs as d "
  • Req1 = Req1 & "join ref_ps as r on r.esrc_file = d.esrc_file and r.rc_num = d.rc_num and r.ps_title = d.dwgbbsnum "
  • Req1 = Req1 & "join contract as c on c.esrc_file = d.esrc_file and c.rc_num = d.rc_num "
  • Req1 = Req1 & "left join contradr as a on a.esrc_file = d.esrc_file and a.es_num = d.es_num and a.seq_num = r.addr_num "
  • Req1 = Req1 & "join customer as cu on cu.cust_code = c.cust_code"
  • ' ***** SÉLECTION SELON DATE SAISIE DANS LE FORMULAIRE *****
  • Req2 = "where d.esrc_file = 'cht05' and d.rc_num <> 4 and d.inputdate = " & AMJ
  • Req1 = Req1 & " " & Req2
  • ' ***** OUVERTURE DE LA BASE *****
  • Cnx.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Favre;Data Source=Serveur-corc"
  • ' ***** RECHERCHE DE LA DERNIÈRE CELLULE NON VIDE *****
  • Range("A10000").Select
  • Selection.End(xlUp).Select
  • ' ***** OUVERTURE DU RECORDSET *****
  • Rst.Open Req1, Cnx, adOpenKeyset
  • ' ***** COPIE DU RECORDSET DEPUIS LA LIGNE SUIVANTE *****
  • ActiveCell.Offset(1, 0).CopyFromRecordset Rst
  • ' ***** FERMETURE ET VIDAGE *****
  • Rst.Close: Set Rst = Nothing
  • Cnx.Close: Set Cnx = Nothing
  • Unload UserForm1
  • Application.ScreenUpdating = True
  • End Sub
Private Sub CommandButton1_Click()

'   ***** DEMANDE L'ACTIVATION DU COMPOSANT MICROSOFT ACTIVEX DATA OBJECT 2.7 LIBRARY
'   ***** DEPUIS MENU "OUTILS" - "RÉFÉRENCES" DE L'ÉDITEUR VISUAL BASIC

    Dim Cnx As New ADODB.Connection
    Dim Rst As New ADODB.Recordset
    Dim Année As String * 4
    Dim Mois As String * 2
    Dim Jour As String * 2
    Dim AMJ As String * 8
    Dim Req1 As String
    Dim Req2 As String
    Année = TextBox1
    Mois = TextBox2
    Jour = TextBox3
    AMJ = Année & Mois & Jour

'   ***** INSTRUCTIONS DE SÉLECTION DES CHAMPS ET DE JOINTURE *****
    Req1 = "select d.inputdate, cu.inv_name, c.sit_name, c.sit_town, a.ct_name, a.ct_town, d.dwgbbsnum, "
    Req1 = Req1 & "d.esrc_file, d.rc_num, r.ps_code, r.fabweight, d.delivstart, r.cust_ref from dwgbbs as d "
    Req1 = Req1 & "join ref_ps as r on r.esrc_file = d.esrc_file and r.rc_num = d.rc_num and r.ps_title = d.dwgbbsnum "
    Req1 = Req1 & "join contract as c on c.esrc_file = d.esrc_file and c.rc_num = d.rc_num "
    Req1 = Req1 & "left join contradr as a on a.esrc_file = d.esrc_file and a.es_num = d.es_num and a.seq_num = r.addr_num "
    Req1 = Req1 & "join customer as cu on cu.cust_code = c.cust_code"

'   ***** SÉLECTION SELON DATE SAISIE DANS LE FORMULAIRE *****
    Req2 = "where d.esrc_file = 'cht05' and d.rc_num <> 4 and d.inputdate = " & AMJ
    Req1 = Req1 & " " & Req2

'   ***** OUVERTURE DE LA BASE *****
    Cnx.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Favre;Data Source=Serveur-corc"

'   ***** RECHERCHE DE LA DERNIÈRE CELLULE NON VIDE *****
    Range("A10000").Select
    Selection.End(xlUp).Select

'   ***** OUVERTURE DU RECORDSET *****
    Rst.Open Req1, Cnx, adOpenKeyset

'   ***** COPIE DU RECORDSET DEPUIS LA LIGNE SUIVANTE *****
    ActiveCell.Offset(1, 0).CopyFromRecordset Rst

'   ***** FERMETURE ET VIDAGE *****
    Rst.Close: Set Rst = Nothing
    Cnx.Close: Set Cnx = Nothing
    Unload UserForm1
    Application.ScreenUpdating = True
End Sub

Conclusion

Notez bien le premier commentaire, je suis resté bloqué un moment à cause de ça.
 

Historique

13 octobre 2005 17:00:17 :
Simple précision dans un commentaire

Commentaires et avis

signaler à un administrateur
Commentaire de SR2 le 12/01/2005 20:49:02

Est-ce que la fonction " COPYFROMRECORDSET" fonctionne depuis une base Excel
car Chez moi ca marche pas

signaler à un administrateur
Commentaire de dp_favresa le 13/01/2005 07:54:53

Bonjour,
Je suis loin d'être spécialiste en ce domaine, mais si
la base de départ est un tableau Excel (comme je crois
comprendre la question), je n'utiliserai pas un recordset
mais par exemple quelquechose comme :

Cells(x, y) = Cells(a ,b)

Salutations.     dp

signaler à un administrateur
Commentaire de cmarcotte le 19/01/2005 00:28:19

Bonjour,

Pour le support de ADO par Excel, la procédure est différente selon la version d'Excel.

Pour Excel 97, le support primaire va à DAO, et il faut programmer différemment la manipulation des données que pour Excel 2000 et +

L'article microsoftien suivant compare les deux méthodes.  Je laisse des lignes vides avant et après le lien

http://support.microsoft.com/default.aspx?scid=kb;fr;246335


D'autre part le numéro de version de la bibliothèque ADO, suit les numéros de version de MDAC. Sauf que je n'ai jamais essayé de savoir si le GUID de la dll changeait d'une version à l'autre.


signaler à un administrateur
Commentaire de zen69 le 26/11/2007 19:26:00

C'est bien beau tout ça... mais comment faire pour transférer le nom des colonne avec les données ?

Si c'est possible ça m'aiderait beaucoup parce que certaines de mes requêtes on un nombre de colonne variables du entre autre à des pivot tables...

J'utilise la fonction CopyFromRecordset depuis un bon bout, mais je n'arrive pas à faire quelque chose d'aussi simple.

C'est plate parce que cette fonctionnalité manquante (du moins je crois), m'oblige à créer du code lourd et non standard du côté SQL.

Voici donc un exemple de code que j'utilise dans une de mes procédure stockées afin de transférer les headers avec le reste.

[CODE]
SET @i=(SELECT COUNT(*)
FROM information_schema.columns
WHERE TABLE_NAME='ut_RptQryProdTemp')

SET @loop = 1
SET @fld_list = ''
SET @val_list = ''
WHILE (@loop <= @i)
BEGIN
SELECT @select = 'SELECT ''['' + COLUMN_NAME + ' + '''],''' + ' AS F
INTO ##fld_list
FROM information_schema.columns
WHERE TABLE_NAME=''ut_RptQryProdTemp'' AND ORDINAL_POSITION=' + convert(varchar(3),@loop)
EXEC (@select)
SELECT @tmp = (SELECT REPLACE(F, ',', '') + ' AS ' + REPLACE(F, 'PRODOUT],', '],') + '' FROM ##fld_list)
SELECT @val_list = @val_list + @tmp
SELECT @fld_list = @fld_list + REPLACE(STUFF(@tmp, 1, 0, 'CAST('), ' AS [', ' AS varchar) AS [')
DROP TABLE ##fld_list
SET @loop = @loop + 1
END
SET @fld_list = LEFT(@fld_list, LEN(@fld_list) - 1)
SET @val_list = LEFT(@val_list, LEN(@val_list) - 1)
SET @val_list = REPLACE(@val_list, ',[', ',''')
SET @val_list = REPLACE(@val_list, '] AS', ''' AS')
SET @val_list = REPLACE(@val_list, 'PRODOUT', '')
SET @val_list = STUFF(@val_list, 1, 1, '''')

EXEC ('SELECT ' + @val_list + ' UNION ALL SELECT ' + @fld_list + ' FROM ut_RptQryProdTemp ORDER BY _DEP, _FAM, _STYLE, _COLOR, [_SIZE]')
[/CODE]

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.