Microsoft 365 Mauvais transfert de fichier excel

Meliodas0000

XLDnaute Nouveau
Je souhaite réorganiser mon fichier qui est toujours au format brouillon et appliquer cette action à tout les fichier excel de mon dossier.
 

Pièces jointes

  • logs_REM_02-06-2022.zip
    485 bytes · Affichages: 2
Dernière édition:

Dugenou

XLDnaute Barbatruc
Bonjour,
Sélectionner la colonne, données/convertir et choisir la virgule come séparateur :
1656601485849.png


Puis terminer.
Ou utiliser power query comme Chris le conseille toujours :)

Cordialement
 

Meliodas0000

XLDnaute Nouveau
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
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 ?
 

job75

XLDnaute Barbatruc
Bonjour Meliodas0000, Dugenou,
j'en ai une centaine et j'aimerai appliquer cette action à tout mon dossier, comment cela peut-être possible ?
Téléchargez les fichiers zippés joints et voyez cette macro du fichier .xlsm :
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
Tous les fichiers csv à traiter doivent être placés dans le même dossier.

A+
 

Pièces jointes

  • Dossier.zip
    15.4 KB · Affichages: 10

Meliodas0000

XLDnaute Nouveau
Bonjour Meliodas0000, Dugenou,

Téléchargez les fichiers zippés joints et voyez cette macro du fichier .xlsm :
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
Tous les fichiers csv à traiter doivent être placés dans le même dossier.

A+
Bonjour Dugenou, Meliodas0000,

En appliquant le fichier xlms à mon dossier, j'ai le résultat suivant :

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
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.
 

Meliodas0000

XLDnaute Nouveau
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.
Bonsoir, merci pour la réponse,

J'ai bien mit tout les fichiers dans le même dossier et j'ai compléter les endroits à completer dans votre macro sans la modifier, cependant l'erreur persiste au même endroit.

Bonne nuit, merci.
 

job75

XLDnaute Barbatruc
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 :
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
Cela nous permet de constater sur l'exemple qu'il n'y a qu'une seule ligne => Ubound(a) = 0.

En effet le fichier n'est pas un fichier csv normal.

A+
 

Pièces jointes

  • Dossier.zip
    16.3 KB · Affichages: 5

Meliodas0000

XLDnaute Nouveau
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 :
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
Cela nous permet de constater sur l'exemple qu'il n'y a qu'une seule ligne => Ubound(a) = 0.

En effet le fichier n'est pas un fichier csv normal.

A+
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.
 

Pièces jointes

  • logs_REM_14-06-2022.zip
    793 bytes · Affichages: 3

job75

XLDnaute Barbatruc
Fichier (4) pour rendre homogènes les fichiers traités :
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
Ainsi pour tous les fichiers traités le séparateur décimal sera le point.
 

Pièces jointes

  • Dossier.zip
    16.7 KB · Affichages: 1

Meliodas0000

XLDnaute Nouveau
Fichier (4) pour rendre homogènes les fichiers traités :
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
Ainsi pour tous les fichiers traités le séparateur décimal sera le point.
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 futurs
 

Discussions similaires

Réponses
8
Affichages
177

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal