Sélectionner plusieurs fichiers et changer leur extension

Résolu
muiigisha Messages postés 61 Statut Membre -  
muiigisha Messages postés 61 Statut Membre -
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

  1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
    1. muiigisha Messages postés 61 Statut Membre
       
      merci
      mais je ne voudrais faire appel aux chemeins parce que après le travail que je fais sera utilisé par d'autres j'ai juste besoin d'une boîte de dialogue. Et quand je fais l'espion mes variables restent vides:(
      comment puis je faire svp?
      0
    2. muiigisha Messages postés 61 Statut Membre
       
      Wbk contient bien le chemin mais wbk.name reste vide
      0
    3. muiigisha Messages postés 61 Statut Membre
       
      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?
      0
    4. muiigisha Messages postés 61 Statut Membre
       
      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
      0
    5. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721 > muiigisha Messages postés 61 Statut Membre
       
      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
      0
  2. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
    1. muiigisha Messages postés 61 Statut Membre
       
      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
      0
  3. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
    1. muiigisha Messages postés 61 Statut Membre
       
      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
      0
      1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721 > muiigisha Messages postés 61 Statut Membre
         
        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
        0
      2. muiigisha Messages postés 61 Statut Membre > thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention  
         
        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
        0
      3. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721 > muiigisha Messages postés 61 Statut Membre
         
        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
        0
    2. muiigisha Messages postés 61 Statut Membre
       
      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
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. muiigisha Messages postés 61 Statut Membre
       
      ah oui, j'oublie toujours cette possibilité.
      merci cs_Le Pivert
      0