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
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