XL 2016 convertir un fichier .csv en .xlms

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,

J'ai des fichiers en .csv que je dois modifier en .xlsm après avoir effectué des modifications sur la structure du fichier.
J'ai donc fait un enregistrement des actions pour obtenir la macro que j'ai légèrement modifié
Donc maintenant j'ai un fichier "convertir" dans lequel je copie les info contenu dans le fichier .csv dans l'onglet "FichierOrigine" puis j'exécute la macro et j'obtiens le résultat que je veux c'est à dire un nouveau fichier .xls près à être utilisé
Mais je dois refaire la manip pour chacun des fichiers csv j'entends par là que je suis obligé de copier le fichier csv dans mon fichier "convertir"
Est ce que quelqu'un serait s'il est possible d'ouvrir le fichier csv et par un moyen de bouton dans la barre de commande par exemple d'exécuter la macro et d'obtenir ainsi le résultat plus rapidement ou comment faire pour que la macro réalise le travail sans avoir à nommer le fichier car pour l'instant je suis obligé de copier le fichier csv sur une feuille bien précise (avec un nom : ici FichierOrigine)pour indiquer à dans la macro les info à convertir.

Je ne suis pas sûr d'être clair mais je me tiens à votre dispo pour toutes informations complémentaires bien sûr.
Merci
 

Pièces jointes

  • test pour convertir les fichiers échantillons.xlsm
    26.3 KB · Affichages: 36
Solution
Fichier (4) avec utilisation du Dictionary pour traiter les nouveaux codes :
VB:
Sub Convertir()
Dim chemin$, fichier$, d As Object, tablo, i&, ncol%
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "*.csv") '1er fichier CSV du dossier
'---listes des anciens et nouveaux codes---
Set d = CreateObject("Scripting.Dictionary")
tablo = Feuil2.[A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, à adapter
For i = 2 To UBound(tablo)
    d(tablo(i, 1)) = tablo(i, 2)
Next
'---traitement des fichiers CSV___
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier a déjà été créé
While fichier <> ""
    With Workbooks.Open(chemin & fichier)
        With .Sheets(1).Cells(1).CurrentRegion...

Dudu2

XLDnaute Barbatruc
Bonjour,
Comprends pas bien.
Tu as des fichiers .CSV dans un répertoire ?
Tu veux tous les convertir en .XLSM ?
Tu veux que ce soit fait automatiquement pour tous les fichiers en 1 seule action ?
Avec en plus la modification issue du Module1 de ton fichier exemple ?
Tu veux donner le même nom aux fichiers .XLSM que ceux des fichiers .CSV ?
Pourquoi des .XLSM ? Tu as une macro à intégrer dans le VBA des fichiers .XLSM ?
Où est le code de cette Macro ?
 

scoubidou35

XLDnaute Occasionnel
Bonjour,
Comprends pas bien.
Tu as des fichiers .CSV dans un répertoire ?
Tu veux tous les convertir en .XLSM ?
Tu veux que ce soit fait automatiquement pour tous les fichiers en 1 seule action ?
Avec en plus la modification issue du Module1 de ton fichier exemple ?
Tu veux donner le même nom aux fichiers .XLSM que ceux des fichiers .CSV ?
Pourquoi des .XLSM ? Tu as une macro à intégrer dans le VBA des fichiers .XLSM ?
Où est le code de cette Macro ?

Bonjour Dudu2,

Oui les fichiers .CSV sont regroupé dans un dossier sur mon ordi.
Non, j'ai fait une erreur quand j'ai écrit mon message c'est en .XLS...désolé :rolleyes:
Oui il faudrait que le fichier .XLS ait les modifications apportées en suivant le module 1
Oui si le fichier XLS pouvait avoir le même nom que celui en csv se serait génial.
J'espère avoir répondu à toutes vos questions et ainsi vous aidez à voir plus clair dans ma recherche.
Merci et bonne journée
 

job75

XLDnaute Barbatruc
Bonjour scoubidou35, Dudu2,

Téléchargez les fichiers zippés joints dans le même dossier.

La macro affectée au bouton "Convertir" :
VB:
Sub Convertir()
Dim chemin$, fichier$
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "*.csv") '1er fichier CSV du dossier
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si le fichier a déjà été créé
While fichier <> ""
    Workbooks.OpenText chemin & fichier, Local:=True
    With ActiveWorkbook
        .SaveAs chemin & Left(.Name, Len(.Name) - 4), 56 'fichier.xls
        .Close
    End With
    fichier = Dir 'fichier suivant
Wend
End Sub
A+
 

Pièces jointes

  • Dossier.zip
    14.1 KB · Affichages: 12

scoubidou35

XLDnaute Occasionnel
Bonjour,
Je ne comprends pas sur quoi travaille le convertisseur au départ.
Sur le fichier CSV ouvert sous Excel ?
Les noms des feuilles ont été mis préalablement sur ce classeur CSV ?

Tu peux envoyer un exemple de CSV ?
En fait si tu supprimes le contenu de la feuille "Nouveau Tableau" du fichier et que tu exécutes la macro tu obtiens le résultat final que je veux (Tableau avec les modif) et normalement tu as un nouveau fichier excel "Classeur1" qui s'ouvre avec ce même tableau (c'était pour me faciliter comme cela il me reste plus qu'a renommer le fichier classeur1 par le nom du fichier csv.
En fait la macro travail sur les données csv que j'ai copié/coller du fichier csv origine vers excel dans mon fichier dans l'onglet "fichieroriginal"
Je te joins un exemple de fichier csv
 

Pièces jointes

  • 20200710-dm020720.zip
    611 bytes · Affichages: 4

Dudu2

XLDnaute Barbatruc
Je n'ai pas regardé les post précédents de Job75 qui sont peut-être des solutions.
Voici un fichier qui fait ce que j'ai compris que tu voudrais faire.
Je n'ai pas testé avec l'exécution de ta fonction Convertisseur.
A toi de vérifier.
 
Dernière édition:

scoubidou35

XLDnaute Occasionnel
Mon post #5 ne vous intéresse pas ?
J'ai rapidement testé je n'ai pas encore déjeuné. il fait bien la conversion de csv en xls mais ne change rien au niveau de la présentation. Lorsque je teste avec mon fichier csv que j'ai mis en ligne pour dudu2 j'obtiens un fichier xls sans convertion (les colonnes ne sont pas séparé). Reste maintenant à voir si en intercalent une partie de mon code si j'obtiens bien mon nouveau fichier xls avec les modifications souhaité (intitulé des colonnes, modifications de la présentation, etc...)
Merci pour cette piste
 

scoubidou35

XLDnaute Occasionnel
Je n'ai pas regardé les post précédents de Job75 et Scoubidou35 qui sont peut-être des solutions.
Voici un fichier qui fait ce que j'ai compris que tu voudrais faire.
Je n'ai pas testé avec l'exécution de ta fonction Convertisseur.
A toi de vérifier.
J'ai un problème je n'arrive pas à ouvrir ton fichier j'ai un message d'erreur me disant que le fichier n'existe pas
 

Dudu2

XLDnaute Barbatruc
Je n'arrive pas à charger le CSV comme dans ton fichier initial.
Il utilise immanquablement la virgule comme séparateur et donc génère 2 colonnes.
Il faut donc que tu adaptes ton Convertisseur en conséquence.
A la fin le Convertisseur fait des trucs que je ne comprends pas et génère des prompts d'ouverture de fichier. Je te laisse vérifier cette partie qui t'appartient.
 

scoubidou35

XLDnaute Occasionnel
Je n'arrive pas à charger le CSV comme dans ton fichier initial.
Il utilise immanquablement la virgule comme séparateur et donc génère 2 colonnes.
Il faut donc que tu adaptes ton Convertisseur en conséquence.
A la fin le Convertisseur fait des trucs que je ne comprends pas et génère des prompts d'ouverture de fichier. Je te laisse vérifier cette partie qui t'appartient.

J'ai ouvert ton fichier et cliqué sur "le bouton "conversion CSV" il me demande de sélection le dossier, je sélectionne donc le dossier où sont tous les fichiers CSV puis à l'étape suivante je sélectionne le fichier CSV que je veux convertir mais après je ne comprends ce qui m'est demandé.
On me demande de sélectionner un fichier excel mais lequel je dois prendre le tiens ou le miens (mon fichier de départ).
Merci
 

Discussions similaires

Réponses
13
Affichages
346
Réponses
2
Affichages
247

Statistiques des forums

Discussions
312 088
Messages
2 085 202
Membres
102 817
dernier inscrit
Nini668