Bonjour,
il y a toujours un problème mais je n'arrive pas à le cibler clairement... quand j'execute la macro sur debian on dirait que rien ne se passe. Effectivement le job n'est pas fait mais il semblerai que ça pédale un peu quand même quand on lance la macro sur une arborescense d'une certaine taille.
Non je confirme la récursivité n'y est pas: l'etat de dir() est global, c'est a dire que l'on peut pas utiliser une boucle dir() dans une boucle dir() la parade, serai de faire une passe en stockant dans un tableau tous les chemins de repertoires avec un dir() puis ensuite boucler sur ce tableau, et ainsi le dir() sur les odt passera en récursif mais je n'arrive pas à comprendre comment appliquer ça dans ma macro... même si je comprends en partie ce qui ne va pas
J'ai voulu mettre en pcj les documents pour illustrer mes propos cela dans l'unique but d'être le plus clair possible mais ça ne passe pas... 500ko et 2mo c'est vraiment trop light. Je me permet de vous mettre un lien avec tous les doc dedans;
Un repertoire avec une arbo de test:
Code : Tout sélectionner
Arbo__de_test/
├── Projet_01
│ ├── Seq_rediger_fiche_debit
│ │ └── Cours_La_fiche_de_debit.odt
│ ├── Seq_rediger_nomenclature_a_plat
│ │ └── Cours_nomenclature_plat.odt
│ └── Seq_terminologie_piece
│ ├── Cours_terminologie_eleve.odt
│ ├── Cours_terminologie_eleve.pdf
│ └── Cours_terminologie.odt
└── Projet_02
├── Seq_assemblage_tenon_mortaise
│ ├── Cours_assemblage_tenon_mortaise_eleve.odt
│ ├── Cours_assemblage_tenon_mortaise_eleve.pdf
│ └── Cours_assemblage_tenon_mortaise.odt
├── Seq_bois_et_eau
│ ├── Cours_eau_ds_bois_eleve.odt
│ ├── Cours_eau_ds_bois_eleve.pdf
│ ├── Cours_eau_ds_bois.odt
│ ├── cours_equilibre_hygroscopique_eleve.odt
│ ├── cours_equilibre_hygroscopique_eleve.pdf
│ ├── cours_equilibre_hygroscopique.odt
│ ├── Cours_retractabilite_eleve.odt
│ ├── Cours_retractabilite_eleve.pdf
│ └── Cours_retractabilite.odt
└── Seq_conditions_de_coupe
├── frequence_de_rotation
│ ├── frequence_rotation_eleve.odt
│ ├── frequence_rotation_eleve.pdf
│ └── frequence_rotation.odt
└── vitesse_d_avance
├── vitesse_avance_eleve.odt
├── vitesse_avance_eleve.pdf
└── vitesse_avance.odt
10 directories, 23 files
Deux fichiers vidéo qui sont des screencast:
SCREENCAST 01 (Sur debian jessie avec libo 4.3.3.2)
1-Etat du repertoire (poids,nombre de fichiers)
2-Ouverture d'un fichier coursxxx.odt contenant le style Texte prof (texte en bleu)
3-execution macro
4-Vérification de l'état du repertoire
SCREENCAST 02 (Sur debian jessie avec libo 4.3.3.2)
1-Execution d'un partie de la macro (traitement du style Texte prof)
2-Ouverture de la macro en edition (pour montrer un peu le contexte)
3-Montre un echantillon de l'arborecsense à traiter (Ne représente pas 30% de l'arborescense à traiter sur le serveur)
C'est surtout le premier qui montre l'exécution de la macro c'est à ce moment que je me suis aperçu que ça pédalé un peu mais es que ça vient de l'exécution de la macro?... je ne peut rien affirmer.
J'ai testé sous windows7 et ça m'a refusé l'exécution en me spécifiant qu'il faut l'environnement java. J'ai mis une capture d'ecran pour ça. Et là j'ai tilté je me demande si ça vient pas de l'environnement de open jre 7 sur debian... Du coup j'ai supprimé l'avant dernière ligne (celle de la msg box) pour re-testé mais c'est pareil.
Je ne comprends pas pourquoi ça demande du java sous windows alors que la macro n'a rien à voir avec ça... à priori sous ubuntu ça marcherai... mais je n'ai pas de ubuntu pour tester.
Merci pour vos lumières
Le lien pour les documents:
http://195.154.13.247/owncloud/index.ph ... ALM8vvmwif
il faut taper libreoffice2014* pour y avoir acces
La dernière version de la macro:
Code : Tout sélectionner
Option Explicit
'LG Global monTab() as String
dim monTab() as String
Sub CopierFichier
Dim Chemin as String, NomFichier as String, Fichier(), NewName as String
Dim X as Integer
' LG initialise
Redim monTab(0)
Chemin = ConvertToURL("/home/cemoi/Documents/bac/seconde/")'le chemin est à adapter à l'emplacement des fichiers
NomFichier = Dir(Chemin & "Cours*.odt")
X = 0
Do While NomFichier <> ""
Fichier = Split(NomFichier,".")
NewName = Fichier(0) & "_eleve.odt"
'LG
X = X +1
' reDim Preserve monTab(X)
redim Preserve monTab(1 to X)
monTab(X) = ConvertToURL(Chemin & NewName)
Filecopy ConvertToURL(Chemin & NomFichier), monTab(X)
NomFichier = Dir()
' LG inutile X = X + 1
Loop
RemplacerStyle
End Sub
Sub RemplacerStyle()
Dim oDocument as Object, searchDescriptor As Object
Dim Args(0) as New com.sun.star.beans.PropertyValue
Dim i as Integer
Args(0).Name = "Hidden"
Args(0).Value = True 'LG essaye dejà avec false
FOR i=1 to UBound(monTab)
'LG For i = 0 to UBound(monTab)
oDocument = StarDesktop.loadComponentFromURL(monTab(i),"_blank",0,Args())
searchDescriptor = oDocument.createReplaceDescriptor
With searchDescriptor
.SearchString = "Texte prof"
.ReplaceString = "Blanc"
.SearchStyles = True
End With
oDocument.replaceAll(searchDescriptor)
oDocument.Store()
ExportPDF(oDocument,monTab(i))
Next i
End Sub
Sub ExportPDF(oDoc as Object,monFichier as String)
Dim oURL as String
Dim Args(0) as New com.sun.star.beans.PropertyValue
oURL = Left(monFichier,CInt(Len(monFichier))-3) & "pdf"
Args(0).Name = "FilterName"
Args(0).Value = "writer_pdf_Export"
oDoc.storeToURL(oUrl,args())
oDoc.Close(True)
Kill(monFichier)
'la MsgBox ne sert à rien
' MsgBox("Le fichier " & ConvertFromURL(oURL) & " à été créé")
End Sub