Je me tourne vers vous car je suis un peu bloqué sur la demande d'un client, voici le contexte :
- - Je reçois régulièrement un dossier contenant 200 à 5 000 fichiers .txt (qui ne sont pas des csv avec une extension .txt), cela n'est pas modifiable. Parfois, le nombre de fichiers peut monter jusqu'à 15/20 000 (mais c'est rare). Ces fichiers s'appellent tirage1.txt, tirage2.txt, etc. ;
- J'ai besoin d'importer le contenu de chaque fichier .txt dans une cellule d'un fichier .ods (tirage1.txt dans A1, tirage2 dans A2, etc., tout sur la même feuille). Je ne peux pas faire autrement car mon client a besoin d'un rendu sur tableur ;
- Une fois le texte dans la cellule, j'y apporte quelques petites modifications avant l'envoi à mon client. Je me suis d'ailleurs essayé à la rédaction de macro pour automatiser cela (sans succès pour le moment), mais c'est un sujet pour un autre jour et un autre fil.
- - la colonne A est celle ou je souhaite importer le contenu des fichiers .txt ;
- les colonnes B, C et D sont pré-remplies ;
- les colonnes E, F et G sont celles que j'utilise pour mes modifications ;
- ce fichier n'est qu'un exemple, le nombre de colonnes pré-remplies et de modifs est variable selon les projets.
Code : Tout sélectionner
Sub Listerunrepertoire
Dim oDocument as object, oDossier as object, oFeuille as object
Dim LeRep as string
Dim LeFic as variant
Dim FicFilter as string, FicOpt as string
Dim FicMode as integer
Dim Valeur As Integer, i As Integer
REM==================================
REM Exploration de répertoire
REM Boucle Do Len Loop
REM Philippe Bronchard inside
REM==================================
oDossier = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oFeuille = ThisComponent.getCurrentController().getActiveSheet()
with oDossier
.DisplayDirectory = convertToUrl("/home/luky-luke/Bureau/MACRO/mesmes/import txt")
' .DisplayDirectory = convertToUrl("C:\Users\Laaziri\Desktop\cem\RIM\S52_2011\txt.txt")
End With
Valeur = oDossier.Execute()
REM== si il y un choix on convertit l'URL
If Valeur = 1 Then '
REM== On pioche un à un les fichiers dans le dossier
LeRep = ConvertFromUrl(oDossier.getDirectory()) 'on convertit l'URL
REM== Fabrication du nom de fichier
LeFic = dir((LeRep)&"/",0)
REM== Blocage de l'affichage
'oFeuille.LockController
REM==================================================================================
REM== Début de la boucle sur les fichiers
REM== Et construction de feuilles incrémenter avec Nom du fichier
REM== Pierre-Yves Samyn - PYS inside pour le filtre
i = 1
Do
' LeFic = dir((LeRep)&"/*.txt,0)
If Len(LeFic) <> 0 Then
ThisComponent.GetSheets.insertNewByName(LeFic,i)'("Feuille"&i,i)
oFeuille = ThisComponent.sheets.getByName(LeFic)'("Feuille"&i)
ThisComponent.CurrentController.ActiveSheet = oFeuille
'Paramètres nécessaires à la copie
FicFilter = "Text - txt - csv (StarCalc)"
FicOpt = "9,,ANSI,1," 'Tab (Chr(9)) delimiter, no text delimiter, ANSI coding
FicMode = com.sun.star.sheet.SheetLinkMode.NORMAL
REM== Insertion de la feuille par "lien"
oFeuille.link(LeFic, "", FicFilter, FicOpt, FicMode)
REM== Déconnection du lien
oFeuille.setLinkSheetName("")
oFeuille.LinkDisplayName
oFeuille.LinkUrl=""
oFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
End if
LeFic = Dir()
i = i + 1
REM== On boucle
Loop While Len(LeFic) > 0
REM== Déconnection du lien du premier fichier??
oFeuille.setLinkSheetName("")
oFeuille.LinkDisplayName
oFeuille.LinkUrl=""
oFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
End If
' oFeuille.UnlockControllers 'defreeze l'affichage
MsgBox "fini"
End Sub
De plus, les accents ne semblent pas être pris en charge : Ma question, un peu large je l'admets, est donc : est-ce que l'un.e d'entre vous sait où je pourrais trouver une solution un peu moins capilotractée que ce que j'envisage pour le moment ?
Merci d'avance pour votre aide,
Bob