Bonjour,
Suite à une perte de fichiers, la récupération de données m’a rendu des fichiers nommés de façon abstraite (file000233.xlsx). J’ai donc besoin de renommer tous les fichiers d’après les valeurs de certaines cellules (nom du client, numéro de facture).
J’ai une macro qui fonctionne si j’ouvre moi-même les fichiers et que je lance la macro pour chacun d’entre eux.
Ayant plusieurs milliers de fichiers, j’ai besoin d’exécuter le script sur un dossier entier, ou encore automatiquement à l’ouverture des fichiers.
Si j’assigne cette même fonction au chargement du document (via outils-personnaliser-événements), j’obtiens au lancement de la macro une erreur 'Erreur d’exécution BASIC. Valeur de propriété incorrecte" à la première ligne, celle de la définition de la fonction.
La méthode n’est-elle pas bonne, ou dois-je modifier le script pour qu’il fonctionne sur l’événement "chargement du document terminé’ ?
Précision : La macro est enregistrée dans “Mes macros et boîtes de dialogue” et non dans chaque document.
Merci pour toute aide éventuelle, je suis pauvre en Basic libreOffice… B-)
function getFullRep(sPath As String) As String
Dim cpt As Integer
Dim buf As String
Const SLASH = "/"
buf = ""
for cpt = Len(sPath) to 1 step -1
if Mid(sPath, cpt, 1) = SLASH then
buf = Left(sPath, cpt)
exit for
end if
next
getFullRep = buf
end function
Sub Main
Dim oDoc as Object
Dim sG2 as String
Dim sO2 as String
Dim sO as String
Dim sPathBackupFolder as String
Dim filespec As string
Dim laDate As String
Dim myfilename As String
Dim oFeuille As Object
Dim sNomFeuille As String
oDoc = ThisComponent
sPathBackupFolder = getFullRep (oDoc.location)
oFeuille = oDoc.getCurrentController().getActiveSheet()
sNomFeuille = oFeuille.getName()
laDate = Format(Now(),"YYMMDDhhmmss")
If oFeuille.GetCellRangeByName("G14").String <>"" Then
sG2 = oFeuille.GetCellRangeByName("G14").String
sO2 = oFeuille.GetCellRangeByName("A15").String
else
sG2 = oFeuille.GetCellRangeByName("G15").String
sO2 = oFeuille.GetCellRangeByName("A16").String
End If
sO = Replace(sO2, "Facture N°", "")
'Chemin et nom de fichier composé
myfilename = sPathBackupFolder+sG2+" - "+sO+" - "+laDate+".ods"
'Enregistrer sous
dim document as object
dim dispatcher as object
' ----------------------------------------------------------------------
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
' ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = ConvertToUrl(myfilename) 'On converti le chemin
args1(1).Name = "FilterName"
args1(1).Value = "calc8"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
oDoc.store
oDoc.close(True)
End Sub