EXEMPLE D'INSERTION DE DONNÉES SQL DANS EXCEL

Messages postés
46
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2006
- - Dernière réponse : zen69
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
- 26 nov. 2007 à 19:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28744-exemple-d-insertion-de-donnees-sql-dans-excel

zen69
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1 -
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.

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]')
Utilisateur anonyme -
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.
dp_favresa
Messages postés
132
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
11 mai 2010
-
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
SR2
Messages postés
46
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2006
1 -
Est-ce que la fonction " COPYFROMRECORDSET" fonctionne depuis une base Excel
car Chez moi ca marche pas