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

traitement fichier CSV

17 réponses
Avatar
j
Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h i
j k
100 101 102 103 104 105 106 107 108 109 110
200 201 202 203 204 205 206 207 208 209 210
300 301 302 303 304 305 306 307 308 309 310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !! GRAND
MERCI

10 réponses

1 2
Avatar
michdenis
Bonjour,

Pour importer ton fichier csv dans Excel, tu peux utiliser cette macro :

Tu adaptes le nom et le chemin du fichier, le séparateur d'élément du fichier .csv
et le nom de la feuille "Sheet1" pour celui de ton application. Les données
débuteront en A1 de la feuille retenue...

'----------------------------------------
Sub Importer_Un_Fichier_CSV()

Dim A As Long, X As Long, NbLignes As Long
Dim T As Variant, WholeLine As String
Dim Fichier As String, Sep As String
Dim B As Integer

'Chemin et fichier .csv
Fichier = "c:test.csv"
'Choix du séparateur d'élément de ton fichier .csv
Sep = ","
'*****************************************
On Error Resume Next

X = FreeFile
Open Fichier For Input Access Read As #X ' For Binary Access Read As #X
Application.ScreenUpdating = False
With Worksheets("sheet1")
While Not EOF(1)
NbLignes = NbLignes + 1
If NbLignes = 1 Then
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
.Range("A" & A).Resize(, UBound(T) + 1) = T
WholeLine = ""
Else
For B = 1 To 3
Line Input #X, WholeLine
Temp = Temp & WholeLine & ","
WholeLine = ""
Next
T = Split(Temp, Sep)
Temp = ""
A = A + 1
.Range("A" & A).Resize(, UBound(T) + 1) = T
End If
Wend
Close #X
End With
Application.ScreenUpdating = True
End Sub
'----------------------------------------



MichD
--------------------------------------------
"" a écrit dans le message de groupe de discussion : 4d2316af$0$11336$

Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h i
j k
100 101 102 103 104 105 106 107 108 109 110
200 201 202 203 204 205 206 207 208 209 210
300 301 302 303 304 305 306 307 308 309 310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !! GRAND
MERCI
Avatar
michdenis
Quelques lignes de code supplémentaire pour transformer
le format des cellules contenant des nombres ...

'-----------------------------------------------
Sub Importer_Un_Fichier_CSV()

Dim A As Long, X As Long, NbLignes As Long
Dim T As Variant, WholeLine As String
Dim Fichier As String, Sep As String
Dim B As Integer

'Chemin et fichier .csv
Fichier = "c:test.csv"
'Choix du séparateur d'élément de ton fichier .csv
Sep = ","
'*****************************************
On Error Resume Next

X = FreeFile
Open Fichier For Input Access Read As #X
Application.ScreenUpdating = False
With Worksheets("sheet1")
While Not EOF(1)
NbLignes = NbLignes + 1
If NbLignes = 1 Then
Line Input #X, WholeLine
T = Split(WholeLine, Sep)
A = A + 1
.Range("A" & A).Resize(, UBound(T) + 1) = T
WholeLine = ""
Else
For B = 1 To 3
Line Input #X, WholeLine
Temp = Temp & WholeLine & ","
WholeLine = ""
Next
T = Split(Temp, Sep)
Temp = ""
A = A + 1
.Range("A" & A).Resize(, UBound(T) + 1) = T
End If
Wend
Close #X
Application.EnableEvents = False
With .Range("M1")
.Value = 1
.Copy
End With
.Range("A1").CurrentRegion.PasteSpecial xlPasteValues, _
xlPasteSpecialOperationMultiply
.Range("M1").Value = ""
.Range("A1").Select
Application.CutCopyMode = False
Application.EnableEvents = True
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------


MichD
Avatar
isabelle
bonjour ,

en supposant que les données soient sur la feuil1 et le résultat mit sur la feuil2

Sub Macro1()
With Sheets("Feuil1")
For i = 2 To .Range("A65536").End(xlUp).Row Step 3
For y = 0 To 2
For p = 1 To 10
If Not .Cells(i + y, p) = "" Then
x = x + 1
Sheets("Feuil2").Cells(i, x) = .Cells(i + y, p)
End If
Next
Next
x = 0
Next
End With
End Sub

isabelle

Le 2011-01-04 07:47, a écrit :
Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h i
j k
100 101 102 103 104 105 106 107 108 109 110
200 201 202 203 204 205 206 207 208 209 210
300 301 302 303 304 305 306 307 308 309 310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !! GRAND
MERCI



Avatar
j
Merci pour votre réponse aussi rapide
Je vais tester cela dès demain matin

A priori la macri isabelle me semble plus adaptée car l'objectif étant de
mettre sur une seule ligne de donnée les 3 lignes e tainsi de suite.
La séparation entre les lignes étant un "retour ligne"

je vous tiens au courant et suivant le cas je mettrais en ligne un fichier
exemple

Merci beaucoup déjà
"isabelle" a écrit dans le message de news:
ifva97$b19$
bonjour ,

en supposant que les données soient sur la feuil1 et le résultat mit sur
la feuil2

Sub Macro1()
With Sheets("Feuil1")
For i = 2 To .Range("A65536").End(xlUp).Row Step 3
For y = 0 To 2
For p = 1 To 10
If Not .Cells(i + y, p) = "" Then
x = x + 1
Sheets("Feuil2").Cells(i, x) = .Cells(i + y, p)
End If
Next
Next
x = 0
Next
End With
End Sub

isabelle

Le 2011-01-04 07:47, a écrit :
Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h
i
j k
100 101 102 103 104 105 106 107 108 109 110
200 201 202 203 204 205 206 207 208 209 210
300 301 302 303 304 305 306 307 308 309 310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de
les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !!
GRAND
MERCI



Avatar
j
Bonsoir,

J'ai bien essayé de tester vos macros mais sans résultats même en modifiant
quelques paramètres.
Je joins donc un fichier exemple pour mieux me faire comprendre.

Dans ce fichier en feuil1 l'extraction (le changment de couleur est pour
montrer les données relatives a la même source)
En feuil2 un traitement (en manuel) du résultat souhaité

J'ai fais cela pour 3 exemples en sachant que mon fichier extract (feuil1)
comporte plus de 500 données

Merci de votre aide
http://cjoint.com/?0bgtSxLQDs7







"isabelle" a écrit dans le message de news:
ifva97$b19$
bonjour ,

en supposant que les données soient sur la feuil1 et le résultat mit sur
la feuil2

Sub Macro1()
With Sheets("Feuil1")
For i = 2 To .Range("A65536").End(xlUp).Row Step 3
For y = 0 To 2
For p = 1 To 10
If Not .Cells(i + y, p) = "" Then
x = x + 1
Sheets("Feuil2").Cells(i, x) = .Cells(i + y, p)
End If
Next
Next
x = 0
Next
End With
End Sub

isabelle

Le 2011-01-04 07:47, a écrit :
Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h
i
j k
100 101 102 103 104 105 106 107 108 109 110
200 201 202 203 204 205 206 207 208 209 210
300 301 302 303 304 305 306 307 308 309 310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de
les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !!
GRAND
MERCI



Avatar
michdenis
A ) Le fichier ATTENDU devait un fichier .CSV et non un fichier Excel.

B ) La disposition devait être celle-ci dans le fichier .CSV
- Ligne : Les étiquettes de colonnes
- par la suite, tes données devaient avoir cette séquence :
ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110





C ) La question était de remettre les données des lignes 2, 3 et 4
sur la même ligne et inséré cette ligne dans Excel.

Conclusion : La procédure proposée fait exactement ce que tu as demandé.

MichD
--------------------------------------------
Avatar
j
je doute pas de la procédure que tu as fourni et encore grand merci
je me suis sans doute mal exprimé et c'est pour cela que j'ai mis un fichier
pour mieux me faire comprendre entre les données d'entrées en feuil1 et
celles de sorties (souhaitées) en feuil2

je vais re essayer ta procédure car celle de isa qui est d'ailleurs dans le
fichier joint ne fonctionne pas

Merci de tes lumieres

Cordialement

"michdenis" a écrit dans le message de news:
ig53uh$ir4$
A ) Le fichier ATTENDU devait un fichier .CSV et non un fichier Excel.

B ) La disposition devait être celle-ci dans le fichier .CSV
- Ligne : Les étiquettes de colonnes
- par la suite, tes données devaient avoir cette séquence :
>> ligne 2 (data) : 100,101,102,103,104,105
>> ligne 3 (data suite) : 106,107,108
>> ligne 4 (data suite) : 109,110

C ) La question était de remettre les données des lignes 2, 3 et 4
sur la même ligne et inséré cette ligne dans Excel.

Conclusion : La procédure proposée fait exactement ce que tu as demandé.

MichD
--------------------------------------------

Avatar
michdenis
La procédure que je t'ai soumise traite directement le fichier CSV
et non un fichier Excel.

MichD
--------------------------------------------
Avatar
j
Je sais mais si c'était un simple fichier CSV je n'aurais pas demandé sur ce
forum de l'aide.
Il y avait une particularité que j'ai et je pense avoir le mieux expliqué.
mais je peux aussi joindre le fichier en csv

Merci deja de ton attention à mon Pb

"michdenis" a écrit dans le message de news:
ig55fd$mrh$
La procédure que je t'ai soumise traite directement le fichier CSV
et non un fichier Excel.

MichD
--------------------------------------------

Avatar
michel ou sam
Bonjour,
il y a une possibilité sans macro :
une fois que tu as copié tes données en colonne A de la Feuil1
tu sélectionnes tes données et tu fais :
Données/Convertir et tu coches Délimité puis Virgule puis Terminer
Tes données vont se positionner sur plusieurs colonnes

Dans la Feuil2, il suffira de mettre les formules qui vont bien
J'ai mis les formules sur les 3 premières lignes en Feuil2, il suffira de
tirer vers le bas pour remplir la feuil2
http://www.cijoint.fr/cjlink.php?file=cj201101/cijpxfXp8u.xls

Bon , mais ça remplace pas une macro bien pensée qui irait te chercher
directement ton fichier CSV

Michel

"" a écrit dans le message de news:
4d260f11$0$796$
Bonsoir,

J'ai bien essayé de tester vos macros mais sans résultats même en
modifiant quelques paramètres.
Je joins donc un fichier exemple pour mieux me faire comprendre.

Dans ce fichier en feuil1 l'extraction (le changment de couleur est pour
montrer les données relatives a la même source)
En feuil2 un traitement (en manuel) du résultat souhaité

J'ai fais cela pour 3 exemples en sachant que mon fichier extract (feuil1)
comporte plus de 500 données

Merci de votre aide
http://cjoint.com/?0bgtSxLQDs7







"isabelle" a écrit dans le message de news:
ifva97$b19$
bonjour ,

en supposant que les données soient sur la feuil1 et le résultat mit sur
la feuil2

Sub Macro1()
With Sheets("Feuil1")
For i = 2 To .Range("A65536").End(xlUp).Row Step 3
For y = 0 To 2
For p = 1 To 10
If Not .Cells(i + y, p) = "" Then
x = x + 1
Sheets("Feuil2").Cells(i, x) = .Cells(i + y, p)
End If
Next
Next
x = 0
Next
End With
End Sub

isabelle

Le 2011-01-04 07:47, a écrit :
Bonjour et tous mes voeux

Voici mon Pb.
Je récupère un fichier CSV de cette forme :

ligne1 (en tete) : a,b,c,d,e,f,g,h,i,k

ligne 2 (data) : 100,101,102,103,104,105
ligne 3 (data suite) : 106,107,108
ligne 4 (data suite) : 109,110

ligne 5 (data) : 200,201,202,203,204,205
ligne 6 (data suite) : 206,207,208
ligne 7 (data suite) : 209,210

ligne 8 (data) : 300,301,302,303,304,305
ligne 9 (data suite) : 306,307,308
ligne 10 (data suite) : 309,310

etc ....

Je souhaiterai que mes données soient sous la forme suivante :

a b c d e f g h i
j k
100 101 102 103 104 105 106 107 108 109
110
200 201 202 203 204 205 206 207 208 209
210
300 301 302 303 304 305 306 307 308 309
310

etc ...

le principe étant de récupérer les valeurs des 2 lignes en dessous et de
les
mettrent a la suite de la premiere ligne.
Les données étant sur 3 lignes

si vous avez une idée pour automatiser ce que je fais manuellement !!
GRAND
MERCI









1 2