[Résolu] [Calc] Consolider n fichiers/transposer des données

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 !

[Résolu] [Calc] Consolider n fichiers/transposer des données

Messagepar arthaxeres » 11 Avr 2014 12:26

Bonjour,

Suite au fil https://forum.openoffice.org/fr/forum/v ... =8&t=42767 je dispose d'une macro qui fusionne n fichiers homogènes (avec n = grand ! :) )

Suite à la fusion, je souhaite transposer certaines données issues de la fusion (colonne I de l'onglet "Donnees" dans l'exemple). Cela implique que pour x lignes de fichier source fusionnées, j'obtiens, la moitié de lignes dans mon fichier cible. Le résultat cible est indiqué dans l'onglet "Cible" dans l'exemple

Pour le moment, je transpose en 2 étapes : 1/fusion des données brutes et 2/exploitation des données brutes pour obtenir le résultat souhaité (transposé). J'ai mis mes formules dans l'onglet "Formules" du fichier en exemple.

Comme je me retrouve -avec surprise- confronté à des problèmes de performance (voir https://forum.openoffice.org/fr/forum/v ... =8&t=42895), je me demande si la transposition ne pourrait être intégrée à la macro. Comme je comprends les codes postés mais suis incapable de modifier les macro sans les faire exploser, je fait appel à votre aide.

Merci par avance.

Code : Tout sélectionner   AgrandirRéduire
Sub Collect
   path = "C:\Test\Fusion\"
   
   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("Fusion")
   file = StarDesktop.LoadComponentFromURL(ConvertToURL(filePath),"_blank",0,Array())
   sourceSheet = file.sheets.GetByName("page_de_saisie")
   sourceRow% = 2 'la première ligne est ignorée
   Do
      data = sourceSheet.GetCellRangeByName("A"+sourceRow+":I"+sourceRow).dataArray
      sourceRow = sourceRow+1
      If data(0)(1)="" Then Exit Do 'Fin si la colonne B est vide (2)
      If data(0)(8)<>"" Then 'On retient les lignes où la colonne I est remplie (8)
         destSheet.GetCellRangeByName("A"+destRow+":I"+destRow).dataArray = data
         destRow = destRow+1
      End If     
   Loop
   file.close(true)
End Sub
Pièces jointes
Exemple_macro_transposition.ods
(11.74 Kio) Téléchargé 47 fois
Dernière édition par Oukcha le 18 Avr 2014 09:17, édité 1 fois.
Raison: Balisage
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 31 Mars 2014 15:25

Re: [Calc] Consolider n fichiers et transposer des données

Messagepar DLE » 11 Avr 2014 16:56

Bonjour,

Pouvez-vous valider ceci :
Code : Tout sélectionner   AgrandirRéduire
Sub AddLines(filePath, byRef destRow)
   destSheet = ThisComponent.sheets.GetByName("Fusion")
   file = StarDesktop.LoadComponentFromURL(ConvertToURL(filePath),"_blank",0,Array())
   sourceSheet = file.sheets.GetByName("page_de_saisie")
   sourceRow% = 2 'la première ligne est ignorée
   Do
   data = sourceSheet.GetCellRangeByName("A"+sourceRow+":I"+sourceRow).dataArray
    If data(0)(1)="" Then Exit Do 'Fin si la colonne B est vide (2)
    If data(0)(8)<>"" Then 'On retient les lignes où la colonne I est remplie (8)
         destSheet.GetCellRangeByName("A"+destRow+":I"+destRow).dataArray = data
         destSheet.GetCellRangeByName("J"+destRow).string  =  sourceSheet.GetCellRangeByName("I"&sourceRow+1).string
         destRow = destRow+1
    End If     
   sourceRow = sourceRow+2
   Loop
   file.close(true)
End Sub
AOO 4.1.7 et Libreoffice 6.2.8.2 sous Windows 10 64 bits, FireFox, Thunderbird, ORB 1.2.1
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
 
Message(s) : 1246
Inscrit le : 30 Déc 2007 19:56
Localisation : Lille

Re: [Calc] Consolider n fichiers et transposer des données

Messagepar arthaxeres » 18 Avr 2014 08:58

Merci DLE !

J'avais un problème supplémentaire de sélection lié au fait qu'on ait une boucle avec un pas de 2 mais, en formulant la question j'ai trouvé la parade et je l'ai résolu en mettant à jour la ligne
Code : Tout sélectionner   AgrandirRéduire
If data(0)(8)<>"" Then 'On retient les lignes où la colonne I est remplie (8)

par
Code : Tout sélectionner   AgrandirRéduire
      If data(0)(8)<>"" OR sourceSheet.GetCellRangeByName("I"&sourceRow).string  <>"" Then REM On retient les lignes où In OU In+1 sont remplis I = (8)


Merci le Forum ! :D
OpenOffice 4.0.1 sous Windows 7
arthaxeres
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 31 Mars 2014 15:25


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)