[Résolu][Calc] Fusionner n Fichiers ODS homogènes en un seul

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

[Résolu][Calc] Fusionner n Fichiers ODS homogènes en un seul

Message par arthaxeres »

Bonjour à tous,

Après avoir fait pas mal de recherches sur ce forum, je n'ai pas trouvé de réponse à ma question qui me paraissait pourtant simple :

Je dispose de n fichiers homogènes en terme de description des données (cad ayant tous les mêmes colonnes, aux mêmes formats) mais avec un nombre de lignes variable et je souhaite les regrouper/consolider/fusionner en un seul fichier.

Exemple :
ETAT INITIAL
2 Fichiers placé dans un même répertoire et ayant tous les 2 pour colonnes ID;Libellé;Couleur;Ref

Fichier "1", feuille "blabla"
ligne 1 : ID;Libellé;Couleur;Ref
ligne 2 : 01;tutu;rouge;9879
ligne 3 : 89;jojo;bleu;1425
ligne 4 : 23;korigan;gris;1009

Fichier "2", feuille "blabla"
ligne 1 : ID;Libellé;Couleur;Ref
ligne 2 : 75;chenille;vert;9245
ligne 3 : 24;jojo;jaune;8765

ETAT FINAL (après exécution de la macro)

Fichier "1" & "2" non-modifiés

Fichier "Consolidation" créé dont le contenu serait le suivant (voire même sans ligne 1)
ligne 1 : ID;Libellé;Couleur;Ref
ligne 2 : 01;tutu;rouge;;9879
ligne 3 : 89;jojo;bleu;1425
ligne 4 : 23;korigan;gris;1009
ligne 5 : 75;chenille;vert;;9245
ligne 6 : 24;jojo;jaune;8765

Evidemment, j'ai beaucoup de fichiers (des centaines) à traiter et qui comportent chacun bcp d'enregistrements (des centaines) ce qui empêche une fusion manuelle.

Pour le moment, la solution la plus proche trouvée est ici (c en anglais) : https://forum.openoffice.org/en/forum/v ... 0&p=179250
Le problème est que cette macro permet de copier le contenu d'un fichier source vers n fichiers cibles or, mon besoin est de copier n fichiers sources vers 1 fichiers cible. il faudrait donc "retourner" la macro d'Andy. De plus, il faut prendre en compte des lignes afin de ne pas écraser de données. La macro doit décaler les cellules copiées pour ne pas écraser la source, un peu comme décrit ici. https://forum.openoffice.org/fr/forum/v ... 38#p220738

Je sollicite la communauté car n'arrive pas à modifier la macro d'Andy comme je le souhaiterais... Je suis loin d'être expert en open basic... :?
D'après ce que j'ai lu, il s'agit d'une utilisation de Calc comme d'un BD or Base pourrait être plus adapté. Problème : les fichiers sont déja saisis dans Calc...
Je m'attendais à trouver un applicatif ou une extension dédiée mais je n'ai rien trouvé pour Open Office...

Merci par avance pour votre aide.
Dernière modification par Oukcha le 07 avr. 2014 11:40, modifié 4 fois.
Raison : Balisage dans le premier message du fil de discussion
OpenOffice 4.0.1 sous Windows 7
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par Grenouille »

Bonsoir,

Pour moi, ce ne sont pas des fichiers ODS mais plutôt des CSV.
De simples fichiers au format texte avec des délimiteurs.

A gérer avec les fonctions Open, Read et Write dont tu trouveras l'explication dans l'aide F1.

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par Piaf »

Bonjour
Grenouille a écrit :Pour moi, ce ne sont pas des fichiers ODS mais plutôt des CSV.
+1
Par contre
arthaxeres a écrit :pour colonnes ID;Libellé;Couleur;Ref
ligne 2 : 01;tutu;rouge;;9879
ligne 2 : 75;chenille;vert;;9245
Me parait étrange.
Quatre en-têtes de colonne et cinq colonnes de données ?
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par arthaxeres »

Bonjour et merci pour vos messages, ce forum a des membres actifs, c'est super shaggy !

@Grenouille : Merci pour l'idée. je me compliquais la vie je crois (je suis nouveau sur le forum et debutant sur BASIC). :oops:

@Piaf : J'ai édité ma question. C'était une coquille. Il y a une jolie citation de Vian là-dessus, mais c'est une autre histoire... :)

Pour résumé, la macro pourrait-être :
1/ Ouvrir n fichiers .ODS d'un répertoire donné, et pour chaque fichier :
-- boucle
2/ Sélectionner les lignes à exporter (*)
3/ Copier ces lignes dans un nouveau document
4/ Enregistrer le nouveau document au format CSV
-- fin boucle
5/ Fermer les fichiers .ODS ouverts
6/ Créer un nouveau fichier de consolidation
7/ Coller les fichiers CSV générés dans le fichier de consolidation, sur une même feuille, à la suite des autres
8/ Enregistrer le fichier de consolidation au format .ODS
9/ Enregistrer les fichiers .CSV

(*): En réalité, ce n'est pas l'intégralité des fichiers ODS qui m'interessent car les fichiers étaient préremplis avant que des users saisissent des données dedans :
J'ai donc des fichiers qui ressemblent à ça (voir ci-dessous) et seules les lignes dont la couleur a été saisie doivent aller dans le fichier de consolidation (le fichier de saisie était verrouillé et controlé afin que Libellé & Ref soient obligatoirement renseignés si Couleur était renseigné)
Il n'y a aucune autre complication. :)

Fichier "1", feuille "blabla1"
ligne 1 : ID;Libellé;Couleur;Ville;Ref
ligne 2 : 01;tutu;rouge;Gotham;9879
ligne 3 : 89;jojo;bleu;Gotham;1425
ligne 4 : 23;korigan;gris;Gotham;1009
ligne 5 : 16;;;Gotham;
ligne 6 : 30;papa;violet;New York;1921
ligne 7 : 11;;;New York;
ligne 8 : 71;;;New York;
ligne 9 : 99;;;New York;
ligne 10: 84;cuicui;rouge;Roubaix;1333
ligne 11: 29;lolo;orange;Roubaix;6110
ligne 12: 12;;;Roubaix;
ligne 13: 07;;;Roubaix;
...

Fichier "2", feuille "blabla2"
ligne 1 : ID;Libellé;Couleur;Ville;Ref
ligne 2 : 75;chenille;vert;Dunkerque;9245
ligne 3 : 24;jojo;jaune;Dunkerque;8765
...

Avec pour résultat cible
Fichier "Consolidation"
ligne 1 : ID;Libellé;Couleur;Ville;Ref
ligne 2 : 01;tutu;rouge;Gotham;9879
ligne 3 : 89;jojo;bleu;Gotham;1425
ligne 4 : 23;korigan;gris;Gotham;1009
ligne 5 : 30;papa;violet;New York;1921
ligne 6 : 84;cuicui;rouge;Roubaix;1333
ligne 7 : 29;lolo;orange;Roubaix;6110
ligne 8 : 75;chenille;vert;Dunkerque;9245
ligne 9 : 24;jojo;jaune;Dunkerque;8765

Que pensez-vous de l'idée de macro en 9 étapes ?

N'existerait-il pas une solution toute faite type extension/programme/... ?

Merci d'avance
OpenOffice 4.0.1 sous Windows 7
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par alhazred »

Bonjour,

Plutôt que d'écrire des lignes comme tu le fais, joins donc deux exemplaires des fichiers dont tu pars (une dizaine de ligne pour chacun)
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par Dude »

Salut,
arthaxeres a écrit : En réalité, ce n'est pas l'intégralité des fichiers ODS
On va donc te le répéter encore une fois, ce ne sont pas des fichiers ODS mais CSV.

A partir de là et comme le souligne grenouille, l'utilisation des instructions du Basic suffit.
Pas besoin d'ouvrir Calc pour concaténer des fichiers texte.
D'ailleurs, même pas besoin d'AOO pour ça. Un batch Windows ou un script Bash suffirait.
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par arthaxeres »

Merci pour vos questions/remarques !

@alhazred : Voici 2 fichiers d'exemple en PJ

@Dude : dsl mais je ne comprends pas bien. Mes fichiers (ex ceux qui sont en PJ) sont au format ODS et le but est de sortir des fichiers ODS.
Pourrais-tu expliquer "l'utilisation des instructions du Basic suffit" ?

Merci ! :)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.0.1 sous Windows 7
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par alhazred »

Et là, je ne vois pas le rapport avec les descriptions que tu as données plus haut :marto:
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par arthaxeres »

Bonsoir,

Il ne s'agit que d'exemples. En bref, je dispose de nombreux fichiers avec des colonnes pre-remplies (ex col. A, E et F des fichiers en PJ) et de colonnes dont les données ont été saisies par des users(col. B, C, D, I et E) . J'ai donc 2 types de lignes : celles qui ont juste des données pré-remplies et celles qui ont le infos pré-remplies + les données renseignées par les users.

Je souhaite consolider avec une macro toutes les lignes qui répondent à cette deuxième catégorie (les lignes sont réparties dans plusieurs fichiers .ODS et je souhaite les consolider dans un fichier .ODS unique).

Est ce plus clair ? En tout cas, merci pour vos questions qui me font considérer mon problème sous différents angles.
OpenOffice 4.0.1 sous Windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par Piaf »

Bonsoir
Un brouillon de solution éventuelle parmi d'autres. (à tester)
Basé sur les renseignements donnés avant tes fichiers.
Pour les explications voir : lister le contenu d'un répertoire et Copier / coller entre deux classeurs ou feuilles
Pour tester, utiliser la macro CopieOds.
Le principe, on part du fichier Consolidation, les différents fichiers sont placés dans un sous répertoire du fichier principal.
On ouvre chaque fichier, on récupère les lignes voulues, on les copie dans le fichier Consolidation, on ferme le fichier et on passe au suivant.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Avatar de l’utilisateur
alhazred
ManitOOu
ManitOOu
Messages : 3028
Inscription : 30 avr. 2011 23:08
Localisation : Casablanca (Maroc)

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par alhazred »

Bonjour,

En utilisant les classeurs fournis (à peu près, car les données ne me paraissent pas trop cohérentes, et les en-têtes de colonnes sont aussi couverts par le secret défense ? J'aime bien savoir à quoi je participe :twisted: )

Le code suivant (incorporé au classeur joint) peut être adapté
-- Indiquer le chemin du répertoire contenant les fichiers
-- modifier éventuellement les conditions qui indiquent qu'un classeur a été traité et qu'une ligne est à conserver

Code : Tout sélectionner

Sub Collect
	path = "C:\Users\Alhazred\Desktop\Fichiers\"
	
	fileName = Dir(path+"*.ods")
	row% = 2 'la première ligne est déjà remplie
	Do While fileName<>""
		AddLines(path+fileName,row)
		fileName = Dir
	Loop	
End Sub

Sub AddLines(filePath, byRef destRow)
	destSheet = ThisComponent.sheets.GetByName("Feuille1")
	file = StarDesktop.LoadComponentFromURL(ConvertToURL(filePath),"_blank",0,Array())
	sourceSheet = file.sheets.GetByName("Feuille1")
	sourceRow% = 2 'la première ligne est ignorée
	Do
		data = sourceSheet.GetCellRangeByName("A"+sourceRow+":H"+sourceRow).dataArray
		sourceRow = sourceRow+1
		If data(0)(4)="" Then Exit Do 'Fin si la colonne E est vide (4)
		If data(0)(1)<>"" Then 'On retient les lignes où la colonne B est remplie (1)
			destSheet.GetCellRangeByName("A"+destRow+":H"+destRow).dataArray = data
			destRow = destRow+1
		End If		
	Loop
	file.close(true)
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
À bientôt

LibO 4.1.5.3 et AOO 4.0.1 sous Windows 7, MRI et SDK pour les macros.

Et la sauvegarde incrémentée, c'est sympa !
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par arthaxeres »

Bonjour et merci beaucoup Piaf & Alhazred pour votre aide,

@ Alhazred : Tu connais le projet Manhattan ? Et bien c'est pas ça ! :wink:
Serieusement, en lisant les posts, j'ai vu qu'il fallait faire attention à ne laisser aucune donnée confidentielle donc j'ai tout anonymisé. J'en ai peut être fait un peu trop mais je me découvre une passion torride pour les tableurs, les fonctions et le basic et pour OO en particulier ! :lol:
En tout cas, c'est pour cela que le fichier à une tête bizarre !

Je regarde les fichiers proposés et vous donne des news.
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

Re: [Calc] Fusionner n Fichiers ODS homogènes en 1 fichier

Message par arthaxeres »

J'ai regardé une des solutions proposée et en modifiant un peu la macro, j'arrive à faire ce que je veux. :bravo:

Un grand merci à Alhazred !

Il me reste à vérifier avec les vrais fichiers sources, décortiquer le code dans le détail, regarder la solution de Piaf et flaguer le fil résolu.

Encore merci aux contributeur de ce forum ! :D
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 31 mars 2014 14:25

[Résolu] [Calc] Fusionner n Fichiers ODS homogènes en 1 fich

Message par arthaxeres »

Merci !
OpenOffice 4.0.1 sous Windows 7
megumi
Fraîchement OOthentifié
Messages : 6
Inscription : 16 avr. 2012 18:19

Re: [Résolu][Calc] Fusionner n Fichiers ODS homogènes en un

Message par megumi »

Bonjour

Je viens d'utiliser le travail présenté pour mon travail et je me demandais si il était possible de modifier
ce morceau de la macro
row% = 4 'les trois premières lignes sont déjà remplies
afin de se placer dans la dernière ligne utilisées.

Mes fichiers sont placés dans plusieurs dossiers différents et donc la macro écrase les lignes utilisées précédemment.

Merci par Avance
La modération a écrit :Relisez les règles de ce forum : déterrage = verrouillage
OpenOffice.org 3.3.0 sous Windows 7