Fusionner 4.000 fichiers Excel d'1 ligne chacun

Fermé
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018 - 22 mai 2018 à 16:47
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 23 mai 2018 à 16:12
Bonjour,

J'ai lu plusieurs sujets sur ces questions de fusion de fichiers Excel mais je ne connais absolument pas le langage de macro d'Excel et ne parvient pas à modifier les différentes autres macros publiées ici pour répondre à mon besoin. Je vous prie de m'excuser si ma demande vous parait évidente et redondante.

Dans un répertoire D:\FUSION, j'ai 4.000 fichiers Excel 2016 nommés :
Notice_156.xlsx
Notice_639-641.xlsx
Notice_2904.xlsx
etc...

Ces 4.000 fichiers ont tous strictement la même structure : un seul onglet "Feuil1" et une seule ligne de données, pas de titres de colonne, les données sont simplement sur la plage A1:Q1.

Je souhaite générer 1 seul fichier Excel Notices.xlsx contenant les 4.000 lignes de ces 4.000 fichiers Excel.

D'avance merci pour votre aide.
A voir également:

3 réponses

jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221
Modifié le 22 mai 2018 à 21:39
Bonjour,

En convertissant le xlsx en csv et en concaténant les fichiers texte csv ce devrait être possible :

créer un fichier
ExceltoCSV.vbs
contenant

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit


puis un fichier
convagreg.cmd
contenant

@echo off
del *.csv

for /r "." %%i in (*.xlsx) do (

echo Fichier en cours "%%i"

ExceltoCSV.vbs "%%i" "%%i".csv

for /f "tokens=1,* delims=:" %%j in ('findstr /n /r . "%%i".csv') do if %%j equ 1 echo %%k >> total.csv

del "%%i".csv

)


les 2 dans le repertoire des xlsx et tu lances le .cmd tu obtiens un
total.csv
qui s'ouvre dans excel.

Cdlt

0
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
Modifié le 23 mai 2018 à 11:54
Merci pour cette réponse. Je viens de tester cette solution (à laquelle je ne comprends absolument rien) et cela ne fonctionne pas. J'obtiens les erreurs suivantes :

D:\FUSION>{\rtf1\ansi\ansicpg1252\cocoartf1504\cocoasubrtf830
Le chemin d'accès spécifié est introuvable.

D:\FUSION>{\fonttbl\f0\fmodern\fcharset0 CourierNewPSMT;\f1\fmodern\fcharset0 CourierNewPS-BoldMT;}
Le chemin d'accès spécifié est introuvable.

D:\FUSION>{\colortbl;\red255\green255\blue255;\red36\green36\blue36;\red255\green255\blue255;\red0\green0\blue0;
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\red251\green0\blue109;\red0\green0\blue120;\red144\green1\blue18;}
Le chemin d'accès spécifié est introuvable.

D:\FUSION>{\*\expandedcolortbl;;\cssrgb\c18824\c18824\c18824;\cssrgb\c100000\c100000\c100000;\cssrgb\c0\c0\c0;
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\cssrgb\c100000\c0\c50196;\cssrgb\c0\c0\c54510;\cssrgb\c63922\c8235\c8235;}
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\deftab720
\deftab720 n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande.

D:\FUSION>\pard\pardeftab720\partightenfactor0
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\fs27\fsmilli13600 \cf2 \cb3 \expnd0\expndtw0\kerning0
Le chemin d'accès spécifié est introuvable.
off\

D:\FUSION>del
La syntaxe de la commande n'est pas correcte.

D:\FUSION>\f1\b \cf5 *.
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2 csv\
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\
'\' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande.

D:\FUSION>\pard\pardeftab720\partightenfactor0
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf6 for
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2 /r \cf7 "."\cf2
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf5 %
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2 i
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf6 in
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf5 (*.
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2 xlsx
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf5 )
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf6 do
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f1\b \cf5 (
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\f0\b0 \cf2 \
Le chemin d'accès spécifié est introuvable.

D:\FUSION>\

D:\FUSION>echo Fichier en cours \cf7 "%i"\cf2 \
Fichier en cours \cf7 "%i"\cf2 \

D:\FUSION>\
'\' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commande.

etc...
0
jee pee Messages postés 39578 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 avril 2024 9 221 > ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
Modifié le 23 mai 2018 à 12:16
Tu as bien excel sur le pc ? quelle version et quelle version windows ?

Tu n'utilises pas des répertoires réseau, tout est en local ?

Tu as constitué les 2 fichiers de commande avec un éditeur texte de base(comme le bloc-notes) pas un autre éditeur comme word, wordpad ?
0
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
Modifié le 23 mai 2018 à 14:43
Windows 7 Professionnel Service Pack 1
+ Microsoft Excel 2016
et aussi LibreOffice 3.5 Calc

Nous utilisons plusieurs volumes réseaux mais j'ai rangé les données dont il est question sur D:\FUSION.

J'ai produit des txt avec un bloc note et ensuite modifié l'extension, comme je fais toujours lorsque je fais des Batch DOS.
0
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
Modifié le 23 mai 2018 à 14:48
Oups, j'ai en effet mal généré mes fichiers de scripts txt. En fait, nous avons internet sur des macs et nos postes PC sont sur un autre réseau sécurisé et déconnecté d'internet. Le passage du Mac au PC a été fatal. Je recommence et je vous tiens informé. 1000 excuses.
0
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
Modifié le 23 mai 2018 à 15:16
Magnifique ! Ca marche ! 1000 millions de mercis ! Mais il y a encore quelques problèmes :
- Je constate que seules les colonnes A à I sont présentes dans le fichiers csv de fusion, les colonnes J à Q ne sont bizarrement pas récupérées.
- Le fichier CSV produit adopte la virgule comme séparateur de champ. Or, une de mes colonnes contient du texte, des descriptions historiques, avec des virgules au sein de ce texte. N'y a-t-il pas moyen de forcer un autre caractère comme séparateur de champ ? Comme l'underscore ou la barre verticale du AltGr+6.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2018 à 12:40
Bonjour à tous,

ci joint maquette avec 2 fichiers sources ( "notice" 1 & 2) et fichier cible ("ccm")

la variable chemin est à adapter pour un emplacement en "D:\ fusion"

Merci de m'indiquer la durée de la procédure avec les 4000 fichiers source

https://mon-partage.fr/f/ISXh1C2Z/
0
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
23 mai 2018 à 15:33
Bonjour Michel. Je ne comprends pas votre message ! Que sont ces fichiers Excel que vous proposez ? De quelle variable chemin parlez vous ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 mai 2018 à 16:12
peut-^tre regarder le code....


Sub compiler_les_notices()
Dim Chemin As String, Fich As String, Lig As Integer
Dim Start As Single

'fige le défilement de l'écran
Application.ScreenUpdating = False
Start = Timer

'force dans le répertoire de travail
Chemin = ThisWorkbook.Path ' A ADAPTER AU CONTEXTE D:\FUSION
..........

d'autre part je précise qu'on travaille sans ouvrir les fichiers source

ensuite on purra écrire une macro d'actualisation (nouveau fichier source) mais j'aurais besoin alors de renseignements complémentaires.
0
Raymond PENTIER Messages postés 58387 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 16 avril 2024 17 088
22 mai 2018 à 16:51
S'il te reste encore quelques milliers de données à saisir, évite de gaspiller tout un fichier pour une malheureuse ligne, et saisis-les directement à la suite des 4000 que tu auras réussi à rassembler ...
-4
ERIC_SHD Messages postés 8 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 23 mai 2018
23 mai 2018 à 10:49
Il ne s'agit pas de saisies. Il s'agit de 4.000 fichiers récupérés en l'état d'un prestataire particulièrement mauvais et nous subissons cette aberration. Nous n'aurions évidemment pas généré 4.000 fichiers Excel d'une seule ligne, c'est parfaitement stupide.
0