begin process at 2010 02 10 17:22:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > EXEMPLE D'INSERTION DE DONNÉES SQL DANS EXCEL

EXEMPLE D'INSERTION DE DONNÉES SQL DANS EXCEL


 Information sur la source

Note :
Aucune note
Catégorie :VBA Niveau :Débutant Date de création :10/01/2005 Date de mise à jour :13/10/2005 17:00:17 Vu :10 620

Auteur : dp_favresa

Ecrire un message privé
Site perso
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

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) FORMAT DE CELLULES EXCEL (VB2005)
Source avec Zip Source .NET (Dotnet) (VB 2005) CHARGER UN COMBOBOX À PARTIR D'EXCEL
Source avec Zip Source .NET (Dotnet) REQUÊTE SQL MULTI-TABLES CHARGÉE DANS UN DATAGRID ET EXPORTA...

 Sources de la même categorie

Source avec Zip Source avec une capture METTRE À JOUR MASSIVEMENT L’ACTIVE DIRECTORY par legranche
SUPPRESSION DES DOUBLONS DANS PLAGE EXCEL par ucfoutu
Source avec Zip Source avec une capture SIMULATEUR DE VITESSE. par artgile
Source avec Zip Source avec une capture EDITEUR DE COMANDE VB6 ET VBA EXCEL par artgile
Source avec Zip Source avec une capture VBA EXCEL AFFICHER UN NUANCIER DES COULEURS AFIN DE CHOISIR ... par BILLOTmi

Commentaires et avis

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

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

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.


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

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales