Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

traitement fichier csv

8 réponses
Avatar
Jacques
Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques

8 réponses

Avatar
MichDenis
Place ce code dans le module et lorsque tu as fini ton
importation de ton fichier .csv dans excel, tu appelles
cette macro en prenant soin d'adapter le nom de la feuille
où se retrouve tes données

'-----------------------------------
Sub test()
Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long, Nb As Long
With Worksheets("Feuil1") '`aadapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
Nb = Rg.Rows.Count
Application.EnableEvents = False
Application.ScreenUpdating = False
For A = 1 To Nb Step 26
B = B + 1
Set Rg1 = .Range("A" & A & ":A" & A + 25)
.Range("A" & B).Resize(, Rg1.Rows.Count) = _
Application.Transpose(.Range("A" & A & ":A" & A + 25))
Rg1 = ""
Next
End With
Application.EnableEvents = True
End Sub
'-----------------------------------



"Jacques" a écrit dans le message de groupe de discussion :

Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques
Avatar
Daniel.C
Bonjour.
Ca dépend essentiellement de la taille de ce fichier. S'il n'y a pas de
marque de fin d'enregistrement, le fichier est considéré comme un seul
enregistrement; et il est chargé en mémoire. Il y a deux options (par
VBA, j'ai peur); soit le fichier entier peut être chargé en mémoire ou
pas. La première solution est simple, la seconde plus compliquée.
J'attends ta réponse avant de construire une usine à gaz.
Cordialement.
Daniel

Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques


Avatar
Jacques
Bonjour,
Le fichier est considéré comme un seul enregistrement et peut être chargé en
mémoire...

Merci

"Daniel.C" a écrit dans le message de
news:
Bonjour.
Ca dépend essentiellement de la taille de ce fichier. S'il n'y a pas de
marque de fin d'enregistrement, le fichier est considéré comme un seul
enregistrement; et il est chargé en mémoire. Il y a deux options (par
VBA, j'ai peur); soit le fichier entier peut être chargé en mémoire ou
pas. La première solution est simple, la seconde plus compliquée.
J'attends ta réponse avant de construire une usine à gaz.
Cordialement.
Daniel

> Bonjour,
>
> Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
> par un ";"
>
> Le problème (pour moi) est que toutes les valeurs sont l'une derrière
> l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
> Comment inmporter le fichier dans excel ?
>
> Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?
>
> Si non, comment faire pour traiter ce fichier (via VBA)
>
>
> Merci de vos réponses
>
>
>
> Jacques




Avatar
Jacques
Bonjour,
L'importation dans Excel ne peut se faire puisque Excel considère qu"il y a trop
de colonnes!
C'est la première chose que j'ai faite en espèrant que dans Excel on puisse
définir le nombre de colonne lors de l'importation. Mais ce n'est pas le cas.
Je dois d'abord traiter le fichier txt avant de l'importer dans Excel.

Merci


"MichDenis" a écrit dans le message de
news:
Place ce code dans le module et lorsque tu as fini ton
importation de ton fichier .csv dans excel, tu appelles
cette macro en prenant soin d'adapter le nom de la feuille
où se retrouve tes données

'-----------------------------------
Sub test()
Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long, Nb As Long
With Worksheets("Feuil1") '`aadapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
Nb = Rg.Rows.Count
Application.EnableEvents = False
Application.ScreenUpdating = False
For A = 1 To Nb Step 26
B = B + 1
Set Rg1 = .Range("A" & A & ":A" & A + 25)
.Range("A" & B).Resize(, Rg1.Rows.Count) = _
Application.Transpose(.Range("A" & A & ":A" & A + 25))
Rg1 = ""
Next
End With
Application.EnableEvents = True
End Sub
'-----------------------------------



"Jacques" a écrit dans le message de groupe de discussion


:

Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques



Avatar
MichDenis
Tu adaptes le nom du fichier à ouvrir:
Les données se copient dans la feuille active du classeur
en débutant en A1 lorsque la procédure est lancé.

'---------------------------------------
Sub Ouvrir fichierCSV()
Dim X As Long, Nb As Long
Dim tblo As Variant
Dim Temp As String
Dim A As Long, B As Long
Dim Fichier As String

Fichier = "C:Denis.csv" 'à adapter
X = FreeFile

Open Fichier For Input As #X
Do While EOF(X) = False
Input #X, myVar
texte = texte & myVar
Loop

tblo = Split(texte, ";")
Nb = UBound(tblo)

For A = 0 To Nb
Temp = Temp & tblo(A) & ";"
If A Mod 26 = 0 Then
If A > 0 Then
B = B + 1
Range("A" & B).Resize(, 26) = Split(Temp, ";")
Temp = ""
End If
End If
Next
Close #X
End Sub
'---------------------------------------


"Jacques" a écrit dans le message de groupe de discussion :
u#g#
Bonjour,
L'importation dans Excel ne peut se faire puisque Excel considère qu"il y a trop
de colonnes!
C'est la première chose que j'ai faite en espèrant que dans Excel on puisse
définir le nombre de colonne lors de l'importation. Mais ce n'est pas le cas.
Je dois d'abord traiter le fichier txt avant de l'importer dans Excel.

Merci


"MichDenis" a écrit dans le message de
news:
Place ce code dans le module et lorsque tu as fini ton
importation de ton fichier .csv dans excel, tu appelles
cette macro en prenant soin d'adapter le nom de la feuille
où se retrouve tes données

'-----------------------------------
Sub test()
Dim Rg As Range, Rg1 As Range
Dim A As Long, B As Long, Nb As Long
With Worksheets("Feuil1") '`aadapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
Nb = Rg.Rows.Count
Application.EnableEvents = False
Application.ScreenUpdating = False
For A = 1 To Nb Step 26
B = B + 1
Set Rg1 = .Range("A" & A & ":A" & A + 25)
.Range("A" & B).Resize(, Rg1.Rows.Count) = _
Application.Transpose(.Range("A" & A & ":A" & A + 25))
Rg1 = ""
Next
End With
Application.EnableEvents = True
End Sub
'-----------------------------------



"Jacques" a écrit dans le message de groupe de discussion


:

Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques



Avatar
Jacques
Re,

Un grand merci

Jacques

"MichDenis" a écrit dans le message de
news:
Tu adaptes le nom du fichier à ouvrir:
Les données se copient dans la feuille active du classeur
en débutant en A1 lorsque la procédure est lancé.

'---------------------------------------
Sub Ouvrir fichierCSV()
Dim X As Long, Nb As Long
Dim tblo As Variant
Dim Temp As String
Dim A As Long, B As Long
Dim Fichier As String

Fichier = "C:Denis.csv" 'à adapter
X = FreeFile

Open Fichier For Input As #X
Do While EOF(X) = False
Input #X, myVar
texte = texte & myVar
Loop

tblo = Split(texte, ";")
Nb = UBound(tblo)

For A = 0 To Nb
Temp = Temp & tblo(A) & ";"
If A Mod 26 = 0 Then
If A > 0 Then
B = B + 1
Range("A" & B).Resize(, 26) = Split(Temp, ";")
Temp = ""
End If
End If
Next
Close #X
End Sub
'---------------------------------------


"Jacques" a écrit dans le message de groupe de


discussion :
u#g#
Bonjour,
L'importation dans Excel ne peut se faire puisque Excel considère qu"il y


a trop
de colonnes!
C'est la première chose que j'ai faite en espèrant que dans Excel on


puisse
définir le nombre de colonne lors de l'importation. Mais ce n'est pas le


cas.
Je dois d'abord traiter le fichier txt avant de l'importer dans Excel.

Merci


"MichDenis" a écrit dans le message de
news:
> Place ce code dans le module et lorsque tu as fini ton
> importation de ton fichier .csv dans excel, tu appelles
> cette macro en prenant soin d'adapter le nom de la feuille
> où se retrouve tes données
>
> '-----------------------------------
> Sub test()
> Dim Rg As Range, Rg1 As Range
> Dim A As Long, B As Long, Nb As Long
> With Worksheets("Feuil1") '`aadapter
> Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
> Nb = Rg.Rows.Count
> Application.EnableEvents = False
> Application.ScreenUpdating = False
> For A = 1 To Nb Step 26
> B = B + 1
> Set Rg1 = .Range("A" & A & ":A" & A + 25)
> .Range("A" & B).Resize(, Rg1.Rows.Count) = _
> Application.Transpose(.Range("A" & A & ":A" & A + 25))
> Rg1 = ""
> Next
> End With
> Application.EnableEvents = True
> End Sub
> '-----------------------------------
>
>
>
> "Jacques" a écrit dans le message de groupe de


discussion
:
>
> Bonjour,
>
> Je reçois d'une compagnie un fichier texte dont chaque valeur est


séparée
> par un ";"
>
> Le problème (pour moi) est que toutes les valeurs sont l'une derrière
> l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26


colonnes.
> Comment inmporter le fichier dans excel ?
>
> Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle


ligne ?
>
> Si non, comment faire pour traiter ce fichier (via VBA)
>
>
> Merci de vos réponses
>
>
>
> Jacques
>


Avatar
Mishell
Étant donné que A commence à zéro,
je crois qu'il vaudrait mieux remplacer
If A Mod 26 = 0 Then
par
If (A + 1) Mod 26 = 0 Then

Amicalement

Mishell

"Jacques" wrote in message
news:%
Re,

Un grand merci

Jacques

"MichDenis" a écrit dans le message de
news:
Tu adaptes le nom du fichier à ouvrir:
Les données se copient dans la feuille active du classeur
en débutant en A1 lorsque la procédure est lancé.

'---------------------------------------
Sub Ouvrir fichierCSV()
Dim X As Long, Nb As Long
Dim tblo As Variant
Dim Temp As String
Dim A As Long, B As Long
Dim Fichier As String

Fichier = "C:Denis.csv" 'à adapter
X = FreeFile

Open Fichier For Input As #X
Do While EOF(X) = False
Input #X, myVar
texte = texte & myVar
Loop

tblo = Split(texte, ";")
Nb = UBound(tblo)

For A = 0 To Nb
Temp = Temp & tblo(A) & ";"
If A Mod 26 = 0 Then
If A > 0 Then
B = B + 1
Range("A" & B).Resize(, 26) = Split(Temp, ";")
Temp = ""
End If
End If
Next
Close #X
End Sub
'---------------------------------------


"Jacques" a écrit dans le message de groupe de


discussion :
u#g#
Bonjour,
L'importation dans Excel ne peut se faire puisque Excel considère qu"il y


a trop
de colonnes!
C'est la première chose que j'ai faite en espèrant que dans Excel on


puisse
définir le nombre de colonne lors de l'importation. Mais ce n'est pas le


cas.
Je dois d'abord traiter le fichier txt avant de l'importer dans Excel.

Merci


"MichDenis" a écrit dans le message de
news:
> Place ce code dans le module et lorsque tu as fini ton
> importation de ton fichier .csv dans excel, tu appelles
> cette macro en prenant soin d'adapter le nom de la feuille
> où se retrouve tes données
>
> '-----------------------------------
> Sub test()
> Dim Rg As Range, Rg1 As Range
> Dim A As Long, B As Long, Nb As Long
> With Worksheets("Feuil1") '`aadapter
> Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
> Nb = Rg.Rows.Count
> Application.EnableEvents = False
> Application.ScreenUpdating = False
> For A = 1 To Nb Step 26
> B = B + 1
> Set Rg1 = .Range("A" & A & ":A" & A + 25)
> .Range("A" & B).Resize(, Rg1.Rows.Count) = _
> Application.Transpose(.Range("A" & A & ":A" & A + 25))
> Rg1 = ""
> Next
> End With
> Application.EnableEvents = True
> End Sub
> '-----------------------------------
>
>
>
> "Jacques" a écrit dans le message de groupe de


discussion
:
>
> Bonjour,
>
> Je reçois d'une compagnie un fichier texte dont chaque valeur est


séparée
> par un ";"
>
> Le problème (pour moi) est que toutes les valeurs sont l'une derrière
> l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26


colonnes.
> Comment inmporter le fichier dans excel ?
>
> Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle


ligne ?
>
> Si non, comment faire pour traiter ce fichier (via VBA)
>
>
> Merci de vos réponses
>
>
>
> Jacques
>






Avatar
Merguez07
Je te propose cette macro

Sub ImporteCsv()
Const NbColonne = 26 'necessaire lorsqu'il n'y pas de retour chariot
dans le fichier d'import

On Error Resume Next
Cells.Clear 'efface les données de la feuille active
Application.Calculation = xlManual
Application.ScreenUpdating = False
NomFichier = Application.GetOpenFilename(("Fichier texte,*.csv;*.txt"))
Open NomFichier For Input As 1
A = Input(FileLen(NomFichier), 1)
Close
icol = 1: iRow = 1
findeligne = Chr(34) & Chr(10) & Chr(34) 'dans le cas ou il y a
un retour charriot pour chaque ligne
Separateur = Chr(34) & ";" & Chr(34) 'dans la cas d'un
séparateur par point virgule
TabLigne = Split(A, findeligne) 'TabLigne contient le
tableau des lignes
For j = LBound(TabLigne) To UBound(TabLigne)
TabDonnée = Split(TabLigne(j), Separateur) 'TabDonnée contient
chaque donnée d'une ligne
For i = LBound(TabDonnée) To UBound(TabDonnée)
Cells(iRow, icol) = TabDonnée(i)
icol = icol + 1
If icol = NbColonne + 1 Then 'il faut passer à la ligne
suivante
icol = 1: iRow = iRow + 1
End If
Next i
icol = 1: iRow = iRow + 1
Next j
Range("A1").Select
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic

End Sub


Xavier


Jacques a écrit :
Bonjour,
Le fichier est considéré comme un seul enregistrement et peut être chargé en
mémoire...

Merci

"Daniel.C" a écrit dans le message de
news:
Bonjour.
Ca dépend essentiellement de la taille de ce fichier. S'il n'y a pas de
marque de fin d'enregistrement, le fichier est considéré comme un seul
enregistrement; et il est chargé en mémoire. Il y a deux options (par
VBA, j'ai peur); soit le fichier entier peut être chargé en mémoire ou
pas. La première solution est simple, la seconde plus compliquée.
J'attends ta réponse avant de construire une usine à gaz.
Cordialement.
Daniel

Bonjour,

Je reçois d'une compagnie un fichier texte dont chaque valeur est séparée
par un ";"

Le problème (pour moi) est que toutes les valeurs sont l'une derrière
l'autre. Ce que je sais ,c'est qu'un enregistrement comporte 26 colonnes.
Comment inmporter le fichier dans excel ?

Est-il possible de lui dire que toutes les 26 ; c'est une nouvelle ligne ?

Si non, comment faire pour traiter ce fichier (via VBA)


Merci de vos réponses



Jacques