traitement fichier csv

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #18816421
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"
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
Daniel.C
Le #18816411
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


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

Merci

"Daniel.C" 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




Jacques
Le #18819771
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" 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"

:

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



MichDenis
Le #18820421
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" 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" 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"

:

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



Jacques
Le #18830341
Re,

Un grand merci

Jacques

"MichDenis" 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"

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

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
>


Mishell
Le #18832521
É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" news:%
Re,

Un grand merci

Jacques

"MichDenis" 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"

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

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
>






Merguez07
Le #18843831
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" 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









Publicité
Poster une réponse
Anonyme