LibreOffice Calc macro sous libre office pour déprotéger les feuilles de plusieurs classeurs

Coralie01120

XLDnaute Occasionnel
Bonsoir le Forum,

Je bloque sur ce sujet depuis un moment maintenant. J'ai cherché partout mais sans résultats...
Je cherche à déprotéger plusieurs fichiers ods à l'aide d'une macro sous libre office.
Ces fichiers sont tous situés sous le même répertoire et sont similaires dans la mise en forme. Une des feuille des classeurs est protégée par un mot de passe identique à tous les classeurs.
J'ai besoin de déprotéger ces feuilles pour récupérer par la suite des données (toujours dans les mêmes cellules).
J'ai déjà une macro grâce au Forum qui me permet de récupérer ces données, le seul hic est que comme les classeurs sont protégés par un mot de passe il y a incompatibilité entre Libre office et Excel. D'où mon besoin de créer une macro sous LibreOffice pour déprotéger ces feuilles...

Connaissez vous une macro sous libre office pour déprotéger les feuilles de plusieurs classeurs (mot de passe toujours identique) ?

Je vous remercie pour votre aide,

Bonne soirée
 
Solution
Bonsoir le fil, Coralie

Une version qui traite toutes les feuilles du classeur *.ods
NB: Test OK sur mon PC avec Libre Office 6.1.5.2
(Test effectué sur 5 classeurs avec 3 feuilles protégées avec le même mot de passe -connu- )
VB:
Sub Copie_ODS_sans_MDP_Toutes_Feuilles
Dim oSheet As Variant 
Dim sPass As String
Dim i
sPass = "Coralie" 
Dossier = "C:\Users\STAPLE\Documents\testODS\"
nouveauD = "C:\Users\STAPLE\Documents\testBODS\"
fichier = DIR(Dossier)
While fichier <> ""
   If RIGHT(fichier,3) = "ods" Then
    fileURL = convertToURL(Dossier & fichier)
     oDoc = StarDesktop.loadComponentFromURL(FileURL, "_blank", 0, Array())
		For i=0 to oDoc.sheets.count-1
		oDoc.sheets(i).Unprotect(sPass)
		Next...

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Coralie01120

=>Coralie01120
Pas eu de nouvelles dans ton premier fil...
Pourtant j'avais posté des bouts de code Libre Office.
 

Staple1600

XLDnaute Barbatruc
Re

En attendant ton retour, j'ai avancé dans mes tests
Ceci est une macro Libre Office qui déprotège la feuille active
Code:
REM  *****  BASIC  *****
Sub Deproteger_LO()
Dim oSheet As Variant 
Dim sPass As String
oSheet = ThisComponent.CurrentController.getActiveSheet    ' =>Feuille active'
sPass = "Coralie"      '   => Mot de passe connu pour déprotéger la feuille    '
oSheet.Unprotect(sPass)
End Sub
Test OK sur mon PC

Reste maintenant à construire une macro LO qui parcoure un dossier et ouvre les fichiers *.ods qui s'y trouvent.
 

Staple1600

XLDnaute Barbatruc
Re

Voici la suite de mes tests
(test OK avec un fichier ODS ne contenant qu'une seule feuille)
NB: Adapter le nom des répertoires
Le mot de passe est identique sur chaque classeur.
VB:
Sub Copie_ODS_sans_MDP_sur_feuille
Dim oSheet As Variant 
Dim sPass As String
Dossier = "C:\Users\Staple\Documents\testPODS\"
nouveauD = "C:\Users\Staple\Documents\testNPODS\"
fichier = DIR(Dossier)
While fichier <> ""
   If RIGHT(fichier,3) = "ods" Then
      fileURL = convertToURL(Dossier & fichier)
      oDoc = StarDesktop.loadComponentFromURL(FileURL, "_blank", 0, Array())
      oSheet = oDoc.CurrentController.getActiveSheet    ' =>Feuille active'
	sPass = "Coralie"      '   => Mot de passe connu pour déprotéger la feuille    '
	oSheet.Unprotect(sPass)
    oDoc.storeAsURL(convertToURL(nouveauD & fichier), Array())
    oDoc.close(TRUE)
   End If
fichier = DIR()
Wend
End sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Coralie

Une version qui traite toutes les feuilles du classeur *.ods
NB: Test OK sur mon PC avec Libre Office 6.1.5.2
(Test effectué sur 5 classeurs avec 3 feuilles protégées avec le même mot de passe -connu- )
VB:
Sub Copie_ODS_sans_MDP_Toutes_Feuilles
Dim oSheet As Variant 
Dim sPass As String
Dim i
sPass = "Coralie" 
Dossier = "C:\Users\STAPLE\Documents\testODS\"
nouveauD = "C:\Users\STAPLE\Documents\testBODS\"
fichier = DIR(Dossier)
While fichier <> ""
   If RIGHT(fichier,3) = "ods" Then
    fileURL = convertToURL(Dossier & fichier)
     oDoc = StarDesktop.loadComponentFromURL(FileURL, "_blank", 0, Array())
		For i=0 to oDoc.sheets.count-1
		oDoc.sheets(i).Unprotect(sPass)
		Next
    oDoc.storeAsURL(convertToURL(nouveauD & fichier), Array())
    oDoc.close(TRUE)
   End If
fichier = DIR()
Wend
End sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Coralie01120

=>Coralie01120
• Juste pour ma gouverne:
Il semble me souvenir que tu avais beaucoup de fichiers à traiter, non ?
Peux-tu me dire si cette macro LibreOffice a fait le job rapidement ou pas?
Et de mémoire, ensuite tu voulais les transformer en *.xls, non ?
(pour cela tu as déjà deux macros:
celle de sylvanu et la mienne dans l'autre fil)

•Juste pour taquiner mes neurones, est-ce que je prends le temps de chercher une macro LibreOffice qui ferait tout d'un seul coup?

Ou faire les choses en deux fois te convient ?
(1) la macro LibreOffice (pour déprotéger les feuilles)
(2) la macro VBA qui convertit les *.ods en *.xls
 

Coralie01120

XLDnaute Occasionnel
Bonjour Staple1600,

J'avais environ 5000 fichiers à traiter. En soit le traitement par fichier est rapide (5 secondes) mais multiplier par le nombre de fichiers c'est assez lent. Ce qui compte pour moi, c'est que cette macro fonctionne.

Finalement j'ai utilisé la macro qui vient récupérer les données car celle qui convertissait mes fichier en xls ne me servait plus à rien (je pouvais récupérer mes données en ods puisqu'il n'y avait plus de mot de passe).

La seconde macro était aussi assez longue, idem que la première mais je m'estime chanceuse vu le nombre de fichier que j'avais. Ce qui compte c'est que j'ai pu récupérer les données.

Encore merci pour votre aide,

Belle journée,
Coralie
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG