XL 2016 VBA - Convertir fichiers xlsx en ods

moustic54

XLDnaute Occasionnel
Bonjour le forum

Est-il possible de convertir plus de 103 fichiers placés dans un seul répertoire en xlsx au format ods sans ouvrir un à un chaque fichier puis "enregistrer sous" ?

Cette tâche risque d'être longue et fastidieuse.

Merci à ceux qui pourront trouver une solution m'évitant cet exercice.
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
ce Code semble correspondre (perfectible) ! a adapter surement .
VB:
Option Explicit
Sub XlsxEnOds()
    Dim wb As Workbook
    Dim Chemin As String
    Dim oChemin As String
    ' Spécifiez le chemin d'accès complet du fichier Excel à convertir
    Chemin = ThisWorkbook.Path & "\fichier.xlsx"
   
    ' Ouvrir le fichier Excel
    Set wb = Workbooks.Open(Chemin)
   
    ' Définir le chemin d'accès et le nom de fichier pour la sauvegarde au format ODS
   
    oChemin = Left(Chemin, Len(Chemin) - 5) & ".ods" ' Remplacez ".xlsx" par ".ods"
   
    ' Enregistrer le fichier au format ODS
    wb.SaveAs Filename:=oChemin, FileFormat:=60
   
    ' Fermer le fichier Excel
    wb.Close False
   
    ' Afficher un message de confirmation pour le test
    MsgBox "Conversion terminée. Le fichier a été enregistré sous " & oChemin
End Sub
Bonne Journée
Jean marie
 

Staple1600

XLDnaute Barbatruc
Bonjour

Grillé par l'autre JM ;)

@moustic54
Ne pas oublier de regarder dans les archives du forum
Ci-dessous code issu de ce fil (nous étions en 2021)
Il fallait juste inverser et voir avec l'enregistreur de macro que
format ODS = xlOpenDocumentSpreadsheet
ActiveWorkbook.SaveAs Filename:="C:\Users\STAPLE\Documents\test.ods" , FileFormat:=xlOpenDocumentSpreadsheet, CreateBackup:=False
VB:
Sub Conversion_XLSX_vers_ODS()
Dim ODS_Nom$, XLSX_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
XLSX_Nom = Dir$(StrPath & "*.xlsx")
While Len(XLSX_Nom) <> 0
    Set oWorkbook = Workbooks.Open(StrPath & XLSX_Nom)
    ODS_Nom = StrPath & Left(oWorkbook.Name, InStrRev(oWorkbook.Name, ".") - 1)
    oWorkbook.SaveAs Filename:=ODS_Nom & ".ods", FileFormat:=xlOpenDocumentSpreadsheet
    oWorkbook.Close False
    XLSX_Nom = Dir$()
Wend
MsgBox "La conversion est terminée", , "XLSX vers ODS"
Exit Sub
End Sub
Testé sur O365

[EDITION]
Précision: testé sur des classeurs *.xlsx ne contenant qu'une seule feuille.
 
Dernière édition:

moustic54

XLDnaute Occasionnel
Bonjour ChTi160, bonjour Staple1600

Merci à vous deux pour votre aide. Je n'aurai jamais pu y parvenir sans vous.
Comment indiqué dans mon fil, je n'y connais quasiment rien en vba. Programmer de la sorte dépassait largement mes maigres connaissances.
Je vais tester aussitôt.
Bon week-end à vous deux.

 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 902
Membres
103 404
dernier inscrit
sultan87