Sélectionner plusieurs fichiers et changer leur extension [Résolu/Fermé]

Signaler
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017
-
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017
-
Bonjour,
je souhaite sélectionner plusieurs fichiers d'extensions"csv" dans une boîte de dialogue et ensuite changer leur entennsion en "xlsm" mais j'ai l'erreur 424 qui s'affiche et je ne vois toujours pas comment procéder pour y rémédier. mon code ci dessous
Sub Sauvegarde()

Dim Wbk As Variant
Dim Fichier As String

Dim QuelFichier()
QuelFichier = Application.GetOpenFilename(, , , , True)
For Each Wbk In QuelFichier
If Wbk.Name <> ThisWorkbook.Name Then
Fichier = Replace(Wbk.Name, "csv", "xlsb")
Wbk.SaveAs Fichier, FileFormat:=xlExcel12, CreateBackup:=False
Wbk.Close
End If
Next Wbk


End Sub

Merci d'avance pour votre aide


4 réponses

Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541
Bonjour,

En première analyse, je pense qu'il manque le nom complet du fichier, c'est à dire :
Wbk.SaveAs Thisworkbook.Path & "\" & Fichier, FileFormat:=xlExcel12, CreateBackup:=False

 
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Wbk contient bien le chemin mais wbk.name reste vide
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

je viens de remarquer que Wbk.name contient le chemin mais comment retrouver le classeur (son nom est même indiqué dans le path), mais comment l'extraire en tant que Workbook?
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Je reviens vers vous, j'ai fini par modifier un peu mon code et je finis par ouvrir les fichiers en questions avant de changer l'extension ,mais celà ne me satisfait pas parce que ça rame bcp. y'aurait-il un autre moyen svp?
Merci d'avance
Voilà ce que j'ai fait ci-dessous

Dim path As Variant
Dim Wbk As Workbook
Dim Fichier As String
Dim FileName As String, ThiswbkName As String

Dim QuelFichier() As Variant
ReDim QuelFichier(2)
QuelFichier = Application.GetOpenFilename("Excel Files (*.csv), *.csv", , "Sélection des fichiers", , True)

ThisWorkbook.Activate
For Each path In QuelFichier
Set temp = Workbooks.Open(FileName:=Dir(path))
Next path
For Each Wbk In Workbooks
If Wbk.Name <> ThisWorkbook.Name Then
Fichier = Replace(Wbk.Name, "csv", "xlsb")
Wbk.SaveAs ThisWorkbook.path & "\" & Fichier, FileFormat:=xlExcel12, CreateBackup:=False

Wbk.Close
End If
Next Wbk


End Sub
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541 >
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

La double boucle n'est pas nécessaire et des instructions sont superflues.
Ci-dessous code
Sub sauvegarde()

Dim wbk As Workbook
Dim Fichier As Variant
Dim QuelFichier()

QuelFichier = Application.GetOpenFilename("Excel Files (*.csv), *.csv", , "Sélection des fichiers", , True)
For Each Fichier In QuelFichier
Set wbk = Workbooks.Open(FileName:=Fichier)
If wbk.Name <> ThisWorkbook.Name Then
Fichier = Replace(Fichier, "csv", "xlsb")
wbk.SaveAs Fichier, FileFormat:=xlExcel12, CreateBackup:=False
wbk.Close
End If

Next Fichier


End Sub
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Merci bcp
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541
essayer ce code

Sub Sauvegarde()

Dim QuelsFichiers(), fichier As Variant, ext_fichier As String, wbk As Workbook

QuelsFichiers = Application.GetOpenFilename(, , , , True)
For Each fichier In QuelsFichiers
ext_fichier = Right(fichier, Len(fichier) - InStrRev(fichier, "."))
If ext_fichier = "csv" Then
Set wbk = Workbooks.Open(fichier)
fichier = Replace(fichier, "csv", "xlsb")
wbk.SaveAs fichier, FileFormat:=xlExcel12, CreateBackup:=False
wbk.Close
End If
Next fichier

End Sub


 
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Bonjour Thev,
quand je compile le code ça met erreur 1004:run time:(
j'ai une question aussi est ce qu'on est contraint d'ouvrir les fichiers avant de changer les extensions ?
c'est le seul moyen que j'ai trouvé mais vous pouvez me proposer d'autres solutions. le changement des extensions n'est qu'une étape dans mon travail si ça met trop de temps en plus des autres procédures il y en qui vont râler.
Merci d'avance pour votre aide
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541
Une extension correspond à un format précis de fichier. Changer l'extension signifie changer son format. Une conversion est donc nécessaire et cette conversion est assurée par Excel. Ouverture + enregistrement est donc nécessaire pour que la conversion du format soit exécutée.

Je n'ai pas sur ma version d'Excel 2013 d'erreur d'exécution. Au niveau de quelle instruction avez-vous cette erreur ? Quelle version d'Excel utilisez-vous ?

 
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Ah d'accord je comprends tout à fait.
Déja j'ai changé "xlsb" en "xlsx" (car je veux en fait des feuilles de calculs tout simplement à moins que ça ne soit pareil...je ne sais vraiment pas)
J'utilise au Excel 2016 et l'erreur c'est au niveau de
wbk.SaveAs fichier, FileFormat:=xlExcel12, CreateBackup:=False

et le message dit:
this extension can not be used with the selected file type. change the file extension in the file name text box or select a different file type by changing the save as type
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541 >
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

FileFormat:=xlExcel12 signifie extension xslb, ça me parait donc logique qu'un conflit se produise.

2 solutions :
Set wbk = Workbooks.Open(fichier)
wbk.SaveAs Fichier, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

ou
Set wbk = Workbooks.Open(fichier)
Fichier = Replace(Fichier, "csv", "xlsx")
wbk.SaveAs Fichier, CreateBackup:=False
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017
>
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020

Merci Thev,
une dernière question et mon problème sera résolu .svp
si je voudrais en changeant l'extension garder un seul fichier et pas l'ancien comment je fais? c'est pour éviter de perdre certains vu qu'ils gardent le même nom
Merci
Messages postés
1769
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
15 juin 2020
541 >
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Le mieux est alors de supprimer l'ancien.
If wbk.Name <> ThisWorkbook.Name Then
wbk.SaveAs Fichier, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
wbk.Close
Kill Fichier
End If
Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

Ah d'accord, merci beaucoup pour votre aide.
j'avance bien dans mon travail et peut être que je reviendrai d'ici là pour une autre question. Sinon mon problème a été résolu.
Merci
Messages postés
6992
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
28 octobre 2020
564
Bonjour,

Le plus simple utiliser l'enregistreur de macro, enregistrer en xlsx et vous aurez le code . Il suffira de l'integrer en l'adaptant a votre macro.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
61
Date d'inscription
lundi 25 septembre 2017
Statut
Membre
Dernière intervention
6 décembre 2017

ah oui, j'oublie toujours cette possibilité.
merci cs_Le Pivert