Merci beaucoup ! j'ai pu réaliser cette action pour ce fichier, cependant j'en ai une centaine et j'aimerai appliquer cette action à tout mon dossier, comment cela peut-être possible ?Bonjour,
Sélectionner la colonne, données/convertir et choisir la virgule come séparateur :
Regarde la pièce jointe 1144055
Puis terminer.
Ou utiliser power query comme Chris le conseille toujours
Cordialement
Téléchargez les fichiers zippés joints et voyez cette macro du fichier .xlsm :j'en ai une centaine et j'aimerai appliquer cette action à tout mon dossier, comment cela peut-être possible ?
Sub MAJ_CSV()
Dim t, chemin$, fichier$, n%
t = Timer
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier
Application.ScreenUpdating = False
While fichier <> ""
n = n + 1
Workbooks.OpenText chemin & fichier, Local:=True
With ActiveSheet.Cells
.Replace ",", ";", xlPart
.Replace "é", "é"
.Replace """", ""
End With
ActiveWorkbook.Close True
fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec")
End Sub
Bonjour Dugenou, Meliodas0000,Bonjour Meliodas0000, Dugenou,
Téléchargez les fichiers zippés joints et voyez cette macro du fichier .xlsm :
Tous les fichiers csv à traiter doivent être placés dans le même dossier.VB:Sub MAJ_CSV() Dim t, chemin$, fichier$, n% t = Timer chemin = ThisWorkbook.Path & "\" 'à adapter fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier Application.ScreenUpdating = False While fichier <> "" n = n + 1 Workbooks.OpenText chemin & fichier, Local:=True With ActiveSheet.Cells .Replace ",", ";", xlPart .Replace "é", "é" .Replace """", "" End With ActiveWorkbook.Close True fichier = Dir 'fichier suivant Wend MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec") End Sub
A+
Cependant, une erreur apparait pour la ligne "fichier = Dir...." m'indiquant que "Le nom ou le numéro du fichier est incorrect", je ne sais pas d'où peut bien provenir cette erreur en sachant qu'il s'agit bien du premier fichier csv du dossier.Sub MAJ_CSV()
Dim t, chemin$, fichier$, n%
t = Timer
chemin = ThisWorkbook.Path & "C:\Users\Amir\Documents\ADCC2\" 'à adapter
fichier = Dir(chemin & "logs_REM_22-06-2022.csv") '1er fichier csv du dossier
Application.ScreenUpdating = False
While fichier <> ""
n = n + 1
Workbooks.OpenText chemin & fichier, Local:=True
With ActiveSheet.Cells
.Replace ",", ";", xlPart
.Replace "é", "é"
.Replace """", ""
End With
ActiveWorkbook.Close True
fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec")
End Sub
Bonsoir, merci pour la réponse,Je vous ai dit de mettre tous les fichiers dans le même dossier.
Dans ce cas il suffit d'utiliser ma macro sans la modifier.
Puisque vous ne savez pas le faire.
Bonne nuit.
D'accord, ca fonctionne bien pour le coup j'ai pensé qu'il fallait que j'adapte la partie dans laquelle vous avez ajoutez '" a adapter". Merci beaucoup, je reviendrais vers vous en cas de soucis !! Passez une agréable nuit.Ne complétez rien dans la macro, n'y touchez pas.
Sub MAJ_CSV()
Dim t, chemin$, fichier$, n%, x%, a(), i&, txt$
t = Timer
chemin = ThisWorkbook.Path & "\" 'à adapter si nécessaire
fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier
While fichier <> ""
n = n + 1
x = FreeFile
Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle
Erase a: i = 0 'RAZ
While Not EOF(x) 'EOF = End Of File, dernière ligne
Line Input #x, txt 'récupère la ligne
txt = Replace(Replace(txt, ",", ";"), """", "")
txt = Replace(txt, "é", "é")
ReDim Preserve a(i) 'tableau en base 0
a(i) = txt
i = i + 1
Wend
Close #x
Open chemin & fichier For Output As #x 'ouverture en écriture
Print #x, Join(a, vbLf)
Close #x
fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec")
End Sub
Bonjour Job75, merci pour la réponse, le programme fonctionne correctement et je n'ai aucune erreur sur les fichiers identiques à ceux que j'ai envoyé. Cependant, certains fichiers comme celui ci-joint montre une latitude et une longitude avec une partie décimal représenté par une virgule et non un point, ce qui provoque donc un décalage dans les données, je sais qu'il faut ajouter une nouvelle fenêtre pour cela.Bonjour Meliodas0000, le forum,
L'ouverture d'une centaine de fichiers CSV prendra pas mal de temps.
Pour aller vite il faut les ouvrir en lecture séquentielle, voyez les fichiers zippés joints et la macro :
Cela nous permet de constater sur l'exemple qu'il n'y a qu'une seule ligne => Ubound(a) = 0.VB:Sub MAJ_CSV() Dim t, chemin$, fichier$, n%, x%, a(), i&, txt$ t = Timer chemin = ThisWorkbook.Path & "\" 'à adapter si nécessaire fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier While fichier <> "" n = n + 1 x = FreeFile Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle Erase a: i = 0 'RAZ While Not EOF(x) 'EOF = End Of File, dernière ligne Line Input #x, txt 'récupère la ligne txt = Replace(Replace(txt, ",", ";"), """", "") txt = Replace(txt, "é", "é") ReDim Preserve a(i) 'tableau en base 0 a(i) = txt i = i + 1 Wend Close #x Open chemin & fichier For Output As #x 'ouverture en écriture Print #x, Join(a, vbLf) Close #x fichier = Dir 'fichier suivant Wend MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec") End Sub
En effet le fichier n'est pas un fichier csv normal.
A+
Option Explicit
Sub MAJ_CSV()
Dim t, chemin$, fichier$, n%, x%, a(), i&, txt$
t = Timer
chemin = ThisWorkbook.Path & "\" 'à adapter si nécessaire
fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier
While fichier <> ""
n = n + 1
x = FreeFile
Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle
Erase a: i = 0 'RAZ
While Not EOF(x)
Line Input #x, txt 'récupère la ligne
txt = Replace(Replace(txt, """,", ";"), """", "")
txt = Replace(txt, ",", ".") 'séparateur décimal le point pour tous les fichiers
txt = Replace(txt, "é", "é")
ReDim Preserve a(i) 'base 0
a(i) = txt
i = i + 1
Wend
Close #x
Open chemin & fichier For Output As #x 'ouverture en écriture
Print #x, Join(a, vbLf)
Close #x
fichier = Dir 'fichier suivant
Wend
MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec")
End Sub
Bonjour Job75, merci beaucoup pour ton aide, maintenant tout les fichiers sont correctement traiter, je n'ai plus de problème. Merci ! Je reviendrai vers vous en cas de nouveaux problèmes futursFichier (4) pour rendre homogènes les fichiers traités :
Ainsi pour tous les fichiers traités le séparateur décimal sera le point.VB:Option Explicit Sub MAJ_CSV() Dim t, chemin$, fichier$, n%, x%, a(), i&, txt$ t = Timer chemin = ThisWorkbook.Path & "\" 'à adapter si nécessaire fichier = Dir(chemin & "*.csv") '1er fichier csv du dossier While fichier <> "" n = n + 1 x = FreeFile Open chemin & fichier For Input As #x 'ouverture en lecture séquentielle Erase a: i = 0 'RAZ While Not EOF(x) Line Input #x, txt 'récupère la ligne txt = Replace(Replace(txt, """,", ";"), """", "") txt = Replace(txt, ",", ".") 'séparateur décimal le point pour tous les fichiers txt = Replace(txt, "é", "é") ReDim Preserve a(i) 'base 0 a(i) = txt i = i + 1 Wend Close #x Open chemin & fichier For Output As #x 'ouverture en écriture Print #x, Join(a, vbLf) Close #x fichier = Dir 'fichier suivant Wend MsgBox n & " fichier(s) csv traité(s) en " & Format(Timer - t, "0.00 \sec") End Sub