Microsoft 365 macro pour convertir des fichiers ods en xls

Coralie01120

XLDnaute Occasionnel
Bonjour le forum,

Je bloque sur un problème depuis un moment et je n'arrive pas à le résoudre.
J'ai plusieurs fichier en ods dont je souhaite extraire certaines infos dans un autre classeur pour faire une BDD.
Mes fichiers ods sont identiques et sont protégés par un mot de passe en feuil2. Les infos sont donc toujours dans les mêmes cellules.

A l'aide du forum j'ai une macro qui me permet de récupérer mes données... à condition que ce soient des fichiers en xls. Le fait que ma feuille soit protégée par un mdp et que les classeurs soient en ods ca ne fonctionne pas. Incompatibilité excel et ods...

Je souhaite donc convertir une très grande quantité de fichier ods en xls. Est ce faisable via une macro ?

Bonne soirée,
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Issu de mes archives
(j'ai ôté la poussière et viens de re-tester)
Test OK chez moi avec Excel 2013
VB:
Sub Conversion_ODS_vers_XLX()
Dim ODS_Nom$, XLS_Nom$, StrPath$
Dim oWorkbook As Workbook, fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
    .Title = "Sélectionner le dossier contenant les fichiers ODS"
    .AllowMultiSelect = False
    .InitialView = msoFileDialogViewList
    If .Show <> -1 Then
        MsgBox "Convertion annulée", , "Avertissement"
        Exit Sub
    End If
    StrPath = fDialog.SelectedItems.Item(1)
    If Right(StrPath, 1) <> "\" Then StrPath = StrPath + "\"
End With
If Left(StrPath, 1) = Chr(34) Then
    StrPath = Mid(StrPath, 2, Len(StrPath) - 2)
End If
ODS_Nom = Dir$(StrPath & "*.ods")
While Len(ODS_Nom) <> 0
    Set oWorkbook = Workbooks.Open(StrPath & ODS_Nom)
    XLS_Nom = StrPath & Left(oWorkbook.Name, InStrRev(oWorkbook.Name, ".") - 1)
    oWorkbook.SaveAs Filename:=XLS_Nom & ".xlsx", FileFormat:=51
    oWorkbook.Close False
    ODS_Nom = Dir$()
Wend
MsgBox "La conversion est terminée", , "ODS vers XLSX"
Exit Sub
End Sub
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir Staple, le fil,

tu écris souvent : « Issu de mes archives » ; mais parfois, je m'demande si toi-même t'es pas à toi tout seul les archives d'XLD ! 😂 🤣 c'est qu't'es une mine d'infos ! et j'imagine que ton grenier et ta cave sont remplis à ras bord ! 😄 😜

dans la série X-Files, j'te verrais bien tenir le rôle de Gorge profonde, l'informateur de Fox Mulder ! 😃 😁 ou mieux : celui qu'on voit parfois dans les archives du FBI (et qui passe furtivement pour escamoter des preuves sensibles).

est-ce que les archives d'XLD sont plus fournies que celles du FBI ? et y'a aussi des preuves de l'existence d'une vie extra-terrestre ? par exemple une soucoupe volante ? 🛸 (David a peut-être des vestiges du site de Roswell ?)

soan
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Coralie, Staple, Soan,
Un essai en PJ avec :
VB:
Sub listing()
Dim fichier$, NouveauNom$, N%
Range("C5:C10000").ClearContents
chemin = [C3]: N = 4
fichier = Dir(chemin, 0)
While fichier <> ""
    If Right(fichier, 3) = "ods" Then
        N = N + 1
        NouveauNom = Mid(fichier, 1, Len(fichier) - 3) & "xls"
        Cells(N, "C") = NouveauNom
        Name (chemin & fichier) As (chemin & NouveauNom)
    End If
    fichier = Dir
Wend
End Sub
J'ai testé, cela rend les fichiers compatibles de l'autre post.
Je vous conseillerais néanmoins de faire une copie de vos ods dans un dossier à part pour le test. :)
Je ne convertis que les ods, les autres fichiers sont ignorés. Le chemin du dossier est à mettre en C3, bien terminer par "\"
 

Pièces jointes

  • ConversionOdsXls.xlsm
    13.6 KB · Affichages: 9

Staple1600

XLDnaute Barbatruc
Bonsoir sylvanu

sylvanu à dit:
J'ai testé, cela rend les fichiers compatibles de l'autre post.
Quel autre post?
On nous dit rien, on nous cache tout ! ;)
Il y a un autre post avec tout plein d'ODS dedans ?
Que si je l'avais su, je me serai pas embêté à chercher des *.ods dans les recoins de mon HD, pour tester mon code avant publication.
;)
 

Staple1600

XLDnaute Barbatruc
Re

=>sylvanu
Avec Excel 2013, avec ton code, j'ai un message d'erreur
Mais différent selon les cas
1) en xls
Message d'erreur mais je peux ouvrir en cliquant sur OK
2) en xlsx
Message d'erreur - impossible d'ouvrir le classeur
(fichier corrompu)
 

Staple1600

XLDnaute Barbatruc
Re

La version de mon code précédent pour une conversion en *.xls "pur jus" (*)
VB:
Sub Conversion_ODS_vers_XLS()
Dim ODS_Nom$, XLS_Nom$, StrPath$
Dim oWorkbook As Workbook, fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)
With fDialog
    .Title = "Sélectionner le dossier contenant les fichiers ODS"
    .AllowMultiSelect = False
    .InitialView = msoFileDialogViewList
    If .Show <> -1 Then
        MsgBox "Convertion annulée", , "Avertissement"
        Exit Sub
    End If
    StrPath = fDialog.SelectedItems.Item(1)
    If Right(StrPath, 1) <> "\" Then StrPath = StrPath + "\"
End With
If Left(StrPath, 1) = Chr(34) Then
    StrPath = Mid(StrPath, 2, Len(StrPath) - 2)
End If
ODS_Nom = Dir$(StrPath & "*.ods")
While Len(ODS_Nom) <> 0
    Set oWorkbook = Workbooks.Open(StrPath & ODS_Nom)
    XLS_Nom = StrPath & Left(oWorkbook.Name, InStrRev(oWorkbook.Name, ".") - 1)
    oWorkbook.SaveAs Filename:=XLS_Nom & ".xls", FileFormat:=56
    oWorkbook.Close False
    ODS_Nom = Dir$()
Wend
MsgBox "La conversion est terminée", , "ODS vers XLS"
Exit Sub
End Sub
(*): C'est à dire qui respecte le BIFF ;)
(Binary Interchange File Format)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
@Staple. Désolé pour l'oubli du lien de l'autre post. Mais come les deux fils se sont suivis, j'ai pas tilté.
Votre macro est plus fine que la mienne. Sous 2007 la mienne marche, c'est pour ça que je l'ai proposée.
D'autant que le problème semble un peu obscur, c'est tout ce que j'avais trouvé pour sortir Coralie de l'impasse, si tant est qu'elle marche sous 365. :)
Encore une macro sortie de la poussière d'un PC pour rejoindre la poussière d'un autre PC.

1) en xls
Message d'erreur mais je peux ouvrir en cliquant sur OK
Si on peut l'ouvrir, c'est le principal. Le but est que Coralie puisse l'ouvrir avec son autre macro.
Le problème avec son 365 est que son VBA considère que si une feuille de son ods est protégée alors tout le fichier est protégé et elle ne peut pas l'ouvrir. Transformé en xls, évidemment le problème ne se pose plus.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Coralie01120, sylvanu, soan

=>sylvanu
Votre macro est plus fine que la mienne. Sous 2007 la mienne marche, c'est pour ça que je l'ai proposée.
C'est pas que ma macro soit fine ou pas, c'est juste qu'avec Name, il n'y pas de conversion en XLS.
(C'est pour cela que j'évoquais: Binary Interchange File Format)
On s'en rend compte en regardant les "entrailles" du fichier xls obtenu.
Avec ma macro, on a bien un *.xls
Pas avec Name
(Il suffit d'ouvrir le classeur *.xls avec le bloc-notes pour voir la différence)
 

Coralie01120

XLDnaute Occasionnel
Bonsoir Coralie, Staple, Soan,
Un essai en PJ avec :
VB:
Sub listing()
Dim fichier$, NouveauNom$, N%
Range("C5:C10000").ClearContents
chemin = [C3]: N = 4
fichier = Dir(chemin, 0)
While fichier <> ""
    If Right(fichier, 3) = "ods" Then
        N = N + 1
        NouveauNom = Mid(fichier, 1, Len(fichier) - 3) & "xls"
        Cells(N, "C") = NouveauNom
        Name (chemin & fichier) As (chemin & NouveauNom)
    End If
    fichier = Dir
Wend
End Sub
J'ai testé, cela rend les fichiers compatibles de l'autre post.
Je vous conseillerais néanmoins de faire une copie de vos ods dans un dossier à part pour le test. :)
Je ne convertis que les ods, les autres fichiers sont ignorés. Le chemin du dossier est à mettre en C3, bien terminer par "\"
Bonjour Staple1600, Sylvanu et Soan,

Merci pour votre réactivité et votre aide apportée.

Sylvanu, j'ai testé votre solution, cela me permet en effet de convertir tous mes fichiers ods en xls.
Par contre, je n'arrive toujours pas à récupérer les données que je souhaite...
La macro n'arrive toujours pas à ouvrir ces fichiers, même si ce sont des xls...

Avez vous pu ouvrir les fichiers et récupérer les données ?

Je n'arrive toujours pas à résoudre mon problème.
 

Coralie01120

XLDnaute Occasionnel
Re

Coralie01120
Tu as essayé mon code?
(celui du message#9)
Chez moi, les données sont bien récupérées.
(avec mes fichiers de test)
Bonjour Staple1600,

J'ai testé ta macro mais le fait qu'une feuille soit protégée par un mot de passe cela m'empêche d'ouvrir les fichiers...

1614584913582.png

Peut être que je fais une mauvaise manip', tu n'as pas ce message d'erreur ?

Si j'enlève la protection de la feuille ta macro fonctionne parfaitement et je peux lancer ensuite la macro pour récupérer les données.
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
256

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T