EXEMPLE D'INSERTION DE DONNÉES SQL DANS EXCEL

SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 - 12 janv. 2005 à 20:49
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
26 nov. 2007 à 19:26
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
19 janv. 2005 à 00:28
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
13 janv. 2005 à 07:54
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
12 janv. 2005 à 20:49
Est-ce que la fonction " COPYFROMRECORDSET" fonctionne depuis une base Excel
car Chez moi ca marche pas
Rejoignez-nous