Page 1 sur 1

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

MessagePublié: 11 Avr 2014 12:26
par arthaxeres
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

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

MessagePublié: 11 Avr 2014 16:56
par DLE
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

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

MessagePublié: 18 Avr 2014 08:58
par arthaxeres
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