Erreur ouverture de fichiers ods dans excel via une macro

Fermé
Tiph - Modifié par Tiph le 28/08/2014 à 22:14
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 31 août 2014 à 21:37
Bonjour,

je voudrais récupérer des données de fichiers ods et xlsx dans un tableau récapitulatif xlsx (dans lequel j'ai créé mes macro).
Pour cela j'ai créé une petite macro permettant de convertir les fichiers ods en xlsx (code ci-dessous).

Quand je lance la macro, j'obtiens un code erreur 1004 "le fichier nomdupremierfichier.ods est introuvable". En effet, si j'essaie d'ouvrir mon fichier ods dans excel, excel me dit que le contenu est illisible, me demande si je veux récupérer le contenu, je dois cliquer oui, et excel l'ouvre en ne conservant que les valeurs à la place des formules (ce qui ne me gêne pas).

Comment puis-je lui dire en vba de réparer le fichier? J'ai trouvé un bout de code de ce type Application.Workbooks.Open(filename:=TxtInsuredForm1.Text, corruptload:=xlrepairfile)
mais je n'arrive pas à l'insérer correctement dans mon code (suis débutante en vba...)

Je suis preneuse de vos idées, merci beaucoup pour ce forum qui m'est d'une grande aide!

Merci d'avance



Sub conversion_ods()


Dim chemin As String, nomfich As String, nouveaunom As String
Application.ScreenUpdating = False 'fige l'écran
'
chemin = ThisWorkbook.Path & "\"
nomfich = Dir(chemin & "fichiers_ODS\" & "*.ods") '1er fichier du dossier
While nomfich <> ""
If nomfich <> ThisWorkbook.Name Then
Workbooks.Open Filename:= _
nomfich
nouveaunom = Replace(ActiveWorkbook.Name, ".ods", "_converti.xlsx")
ChDir chemin
ActiveWorkbook.SaveAs Filename:= _
nouveaunom _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
ChDir chemin & "fichiers_ODS"
nomfich = Dir 'fichier suivant du dossier
End If
Wend
End Sub
A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
29 août 2014 à 18:42
Bonjour,

Je ne peux pas tester car je n'ai ce cas. Il me semble que ceci devrait fonctionner :

Workbooks.Open Filename:=nomfich, corruptload:=xlrepairfile 


Il te faudra peut-être inhiber les erreurs.
Application.DisplayAlerts = False
--
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
0
Bonjour,

merci pour la réponse, mais malheureusement ça ne fonctionne pas...
avec ou sans le DisplayAlerts, j'obtiens toujours le même code erreur et le débogage me renvoie sur la ligne
Workbooks.Open Filename:=nomfich, corruptload:=xlrepairfile

D'autres idées?
Je veux seulement récupérer des données de fichiers ods, et le seul moyen m'a semblé être de commencer par convertir les fichiers. Y a t-il une autre solution pour éviter l'ouverture? J'avais essayé de prendre directement les données dans les fichiers ods mais ça ne fonctionnait pas non plus...

Merci encore
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
Modifié par gbinforme le 30/08/2014 à 18:18
Bonjour,

Le problème c'est que le code 1004 est un peu le code générique qui s'affiche pour de nombreux cas et il faut tâtonner pour voir la cause.

J'ai trouvé quelques classeurs .ods et j'ai pu tester ta macro qui fonctionne correctement même si ta ligne
ChDir chemin & "fichiers_ODS"
ne sert à rien.

Pour que cela fonctionne, j'ai au préalable ouvert avec le classeur de la macro, un .ods en réparant et je l'ai fermé sans sauver : je pense que cela initialise correctement certains paramètres et ensuite cela fonctionne.
0
oui, en effet, j'avais fait ça aussi, le problème c'est que j'ai beaucoup de fichiers, donc ça limite un peu l'intérêt de la macro...
la ligne ChDir chemin & "fichiers_ODS" me sert à aller chercher les fichiers dans un dossier particulier où je les stocke.
Est-ce que tu me confirmes qu'il n'y a pas d'autre moyen pour récupérer les données directement dans le fichier sans passer par l'enregistrement en xls?
Merci quand même d'avoir cherché à tester!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
31 août 2014 à 21:37
ça limite un peu l'intérêt de la macro...

Non tu ouvres un .ods tu répares et tu fermes sans sauver.
Tu lances la macro et en ce qui me concerne j'ai renommé 8 classeurs .ods sans souci.

la ligne ChDir chemin & "fichiers_ODS" me sert...
non car Dir fonctionne avec l'initialisation premier fichier.

il n'y a pas d'autre moyen

En fait, si tu veux récupérer le contenu tu peux le faire lorsque tu ouvres ton classeur .ods et ne pas le sauver si tu enregistres tes données dans un classeur global.
0