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

insertion fichier CSV

13 réponses
Avatar
Gildo
Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là c’est
corsé…)
J’ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les lignes
en fonction de la colonne E et bien entendu le petit + tout ça à partir de la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées que
les noms de champ peuvent être différents de ceux du csv que les colonnes ne
sont pas forcément dans le même ordre et enfin que je n’importe pas toutes
les colonnes.
Ouf …
Si quelqu’un voit une soluce même partielle je suis preneur parce que là je
suis dans le bleu par avance merci …

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées que
les noms de champ peuvent être différents de ceux du csv que les colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce que là
je
suis dans le bleu par avance merci .



Avatar
Gildo
Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle dans
une feuille import puis une faire une macro qui réparti à posteriori les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées que
les noms de champ peuvent être différents de ceux du csv que les colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce que là
je
suis dans le bleu par avance merci .








Avatar
Daniel.C
En recopiant la première colonne du fichier csv en colonne A et ainsi de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle dans
une feuille import puis une faire une macro qui réparti à posteriori les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là
c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à partir
de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce que

je
suis dans le bleu par avance merci .










Avatar
Daniel.C
Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et ainsi de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle
dans
une feuille import puis une faire une macro qui réparti à posteriori les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là
c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce que

je
suis dans le bleu par avance merci .














Avatar
Gildo
Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et ainsi de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle
dans
une feuille import puis une faire une macro qui réparti à posteriori les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là
c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce que

je
suis dans le bleu par avance merci .



















Avatar
Daniel.C
Ca peut venir d'une différence de casse entre le nom d'onglet et le nom
indiqué dans le 5e champ d'une ligne du fichier csv; ça peut également venir
d'un enregistrement qui a moins de 5 champs. Ajoute les lignes :
MsgBox "nbre de champs : " & UBound(Tablo)
MsgBox "champ onglet : " & Tablo(4)
avant la ligne qui plante.
Renvoie-moi les résultats des msgboxes et vérifie que le champ onglet est
bien strictement identique au nom d'onglet (majuscules et minuscules).
Daniel
"Gildo" a écrit dans le message de news:

Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et ainsi
de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms
d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de
news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent
pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle
dans
une feuille import puis une faire une macro qui réparti à posteriori
les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent
pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là
c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un
fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI
les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont
préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce
que

je
suis dans le bleu par avance merci .





















Avatar
Gildo
Allons y
pour la casse j'ai cop/col avec les propriétés

1/ nombre de champs 44
2/Champ onglet Acn


pour comprendre :
pourquoi indique t'on 4 sur cette ligne Set sh = Sheets(Tablo(4)) et pas 1
ou 0 ?
(je prends tout ce fichier et le déposerai à partir de la ligne 6 dans
l'autre feuille)

en tout cas merci de ton aide

"Daniel.C" wrote:

Ca peut venir d'une différence de casse entre le nom d'onglet et le nom
indiqué dans le 5e champ d'une ligne du fichier csv; ça peut également venir
d'un enregistrement qui a moins de 5 champs. Ajoute les lignes :
MsgBox "nbre de champs : " & UBound(Tablo)
MsgBox "champ onglet : " & Tablo(4)
avant la ligne qui plante.
Renvoie-moi les résultats des msgboxes et vérifie que le champ onglet est
bien strictement identique au nom d'onglet (majuscules et minuscules).
Daniel
"Gildo" a écrit dans le message de news:

Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et ainsi
de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms
d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de
news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent
pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel quelle
dans
une feuille import puis une faire une macro qui réparti à posteriori
les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne correspopndent
pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et là
c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou TITI.

Comment spécifier en VBA une importation de ce fichier vers un
fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou TITI
les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont
préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur parce
que

je
suis dans le bleu par avance merci .


























Avatar
Daniel.C
Je n'ai pas commencé à partir de la ligne 6, mis de la ligne 1, c'est
peut-être le problème. Je te mets ci-dessous une macro qui commence à la
ligne 6. Pour le champ onglet, je cherche une feuille nommée "Acn"; si elle
n'existe pas, je plante.
le "4" de "Set sh = Sheets(Tablo(4))" correspond au 5e champ de la ligne (le
premier est le champ 0)
Voici la macro commentée commençant en ligne 6 :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long, Ctr As Long
'Ouverture du fichier
Open "e:donneesdanielmpfetest.csv" For Input As #1
'boucle tant qu'on n'est pas à la fin de fichier
Do While Not EOF(1)
'lecture d'une ligne dans la variable "Enrgt"
Line Input #1, Enrgt
'Incrément du compteur d'enregistrement
Ctr = Ctr + 1
'On traite à partir de la 6e ligne
If Ctr > 5 Then
'La ligne est découpée dans la matrice "Tablo"
Tablo = Split(Enrgt, ";")
'Affectation à "sh" de la feuille indiquée au 5e champ de la ligne
Set sh = Sheets(Tablo(4))
'Calcul de la position où l'on va écrire la ligne
Ligne = sh.Range("A65000").End(xlUp).Row + 1
'Pour chaque champ
For i = 0 To UBound(Tablo)
'on recopie le champ dans la colonne correspondante
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
End If
Loop
Close #1
End Sub

Daniel
"Gildo" a écrit dans le message de news:

Allons y
pour la casse j'ai cop/col avec les propriétés

1/ nombre de champs 44
2/Champ onglet Acn


pour comprendre :
pourquoi indique t'on 4 sur cette ligne Set sh = Sheets(Tablo(4)) et pas 1
ou 0 ?
(je prends tout ce fichier et le déposerai à partir de la ligne 6 dans
l'autre feuille)

en tout cas merci de ton aide

"Daniel.C" wrote:

Ca peut venir d'une différence de casse entre le nom d'onglet et le nom
indiqué dans le 5e champ d'une ligne du fichier csv; ça peut également
venir
d'un enregistrement qui a moins de 5 champs. Ajoute les lignes :
MsgBox "nbre de champs : " & UBound(Tablo)
MsgBox "champ onglet : " & Tablo(4)
avant la ligne qui plante.
Renvoie-moi les résultats des msgboxes et vérifie que le champ onglet est
bien strictement identique au nom d'onglet (majuscules et minuscules).
Daniel
"Gildo" a écrit dans le message de
news:

Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et
ainsi
de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms
d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de
news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent
pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence
des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel
quelle
dans
une feuille import puis une faire une macro qui réparti à
posteriori
les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne
correspopndent
pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence
des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message
de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et

c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à
AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou
TITI.

Comment spécifier en VBA une importation de ce fichier vers un
fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou
TITI
les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont
préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe
pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur
parce
que

je
suis dans le bleu par avance merci .




























Avatar
Gildo
c'est Idem !

Je pense qu’il faut que je te donne plus de détails
Le fichier csv s’appelle AirAustral.csv
La feuille de ce fichier Air_Austral
Acn est un des 44 noms de champ (le 5 eme) de cette feuille
J’essaie de transférer toutes les données de ce .csv vers un fichier nommé
Testeur.xls/feuille import, c'est dans ce fichier que j'ai déposé la macro
Merci encore de ton attention


"Daniel.C" wrote:

Je n'ai pas commencé à partir de la ligne 6, mis de la ligne 1, c'est
peut-être le problème. Je te mets ci-dessous une macro qui commence à la
ligne 6. Pour le champ onglet, je cherche une feuille nommée "Acn"; si elle
n'existe pas, je plante.
le "4" de "Set sh = Sheets(Tablo(4))" correspond au 5e champ de la ligne (le
premier est le champ 0)
Voici la macro commentée commençant en ligne 6 :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long, Ctr As Long
'Ouverture du fichier
Open "e:donneesdanielmpfetest.csv" For Input As #1
'boucle tant qu'on n'est pas à la fin de fichier
Do While Not EOF(1)
'lecture d'une ligne dans la variable "Enrgt"
Line Input #1, Enrgt
'Incrément du compteur d'enregistrement
Ctr = Ctr + 1
'On traite à partir de la 6e ligne
If Ctr > 5 Then
'La ligne est découpée dans la matrice "Tablo"
Tablo = Split(Enrgt, ";")
'Affectation à "sh" de la feuille indiquée au 5e champ de la ligne
Set sh = Sheets(Tablo(4))
'Calcul de la position où l'on va écrire la ligne
Ligne = sh.Range("A65000").End(xlUp).Row + 1
'Pour chaque champ
For i = 0 To UBound(Tablo)
'on recopie le champ dans la colonne correspondante
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
End If
Loop
Close #1
End Sub

Daniel
"Gildo" a écrit dans le message de news:

Allons y
pour la casse j'ai cop/col avec les propriétés

1/ nombre de champs 44
2/Champ onglet Acn


pour comprendre :
pourquoi indique t'on 4 sur cette ligne Set sh = Sheets(Tablo(4)) et pas 1
ou 0 ?
(je prends tout ce fichier et le déposerai à partir de la ligne 6 dans
l'autre feuille)

en tout cas merci de ton aide

"Daniel.C" wrote:

Ca peut venir d'une différence de casse entre le nom d'onglet et le nom
indiqué dans le 5e champ d'une ligne du fichier csv; ça peut également
venir
d'un enregistrement qui a moins de 5 champs. Ajoute les lignes :
MsgBox "nbre de champs : " & UBound(Tablo)
MsgBox "champ onglet : " & Tablo(4)
avant la ligne qui plante.
Renvoie-moi les résultats des msgboxes et vérifie que le champ onglet est
bien strictement identique au nom d'onglet (majuscules et minuscules).
Daniel
"Gildo" a écrit dans le message de
news:

Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de news:
uw$
En recopiant la première colonne du fichier csv en colonne A et
ainsi
de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms
d'onglet
sont en majuscule, ils doivent l'être également dans le fichier csv.
Daniel
"Gildo" a écrit dans le message de
news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne correspopndent
pas à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence
des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel
quelle
dans
une feuille import puis une faire une macro qui réparti à
posteriori
les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne
correspopndent
pas
à
ceux du classeur Excel ? tu dois au minimum fournir l'équivalence
des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le message
de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel et

c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A à
AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou
TITI.

Comment spécifier en VBA une importation de ce fichier vers un
fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou
TITI
les
lignes
en fonction de la colonne E et bien entendu le petit + tout ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont
préformatées
que
les noms de champ peuvent être différents de ceux du csv que les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je n'importe
pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur
parce
que

je
suis dans le bleu par avance merci .

































Avatar
Daniel.C
Le mieux serait que tu déposes ton classeur et ton fichier csv (ou du mons
une partie) sur www.cjoint.com. Fais-le en deux fois (une pour chaque
fichier) ou faix une seule archive avec winzip ou winrar. Poste ici les
adresses générées.
Daniel
"Gildo" a écrit dans le message de news:

c'est Idem !

Je pense qu'il faut que je te donne plus de détails
Le fichier csv s'appelle AirAustral.csv
La feuille de ce fichier Air_Austral
Acn est un des 44 noms de champ (le 5 eme) de cette feuille
J'essaie de transférer toutes les données de ce .csv vers un fichier nommé
Testeur.xls/feuille import, c'est dans ce fichier que j'ai déposé la macro
Merci encore de ton attention


"Daniel.C" wrote:

Je n'ai pas commencé à partir de la ligne 6, mis de la ligne 1, c'est
peut-être le problème. Je te mets ci-dessous une macro qui commence à la
ligne 6. Pour le champ onglet, je cherche une feuille nommée "Acn"; si
elle
n'existe pas, je plante.
le "4" de "Set sh = Sheets(Tablo(4))" correspond au 5e champ de la ligne
(le
premier est le champ 0)
Voici la macro commentée commençant en ligne 6 :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long, Ctr As Long
'Ouverture du fichier
Open "e:donneesdanielmpfetest.csv" For Input As #1
'boucle tant qu'on n'est pas à la fin de fichier
Do While Not EOF(1)
'lecture d'une ligne dans la variable "Enrgt"
Line Input #1, Enrgt
'Incrément du compteur d'enregistrement
Ctr = Ctr + 1
'On traite à partir de la 6e ligne
If Ctr > 5 Then
'La ligne est découpée dans la matrice "Tablo"
Tablo = Split(Enrgt, ";")
'Affectation à "sh" de la feuille indiquée au 5e champ de la
ligne
Set sh = Sheets(Tablo(4))
'Calcul de la position où l'on va écrire la ligne
Ligne = sh.Range("A65000").End(xlUp).Row + 1
'Pour chaque champ
For i = 0 To UBound(Tablo)
'on recopie le champ dans la colonne correspondante
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
End If
Loop
Close #1
End Sub

Daniel
"Gildo" a écrit dans le message de
news:

Allons y
pour la casse j'ai cop/col avec les propriétés

1/ nombre de champs 44
2/Champ onglet Acn


pour comprendre :
pourquoi indique t'on 4 sur cette ligne Set sh = Sheets(Tablo(4)) et
pas 1
ou 0 ?
(je prends tout ce fichier et le déposerai à partir de la ligne 6 dans
l'autre feuille)

en tout cas merci de ton aide

"Daniel.C" wrote:

Ca peut venir d'une différence de casse entre le nom d'onglet et le
nom
indiqué dans le 5e champ d'une ligne du fichier csv; ça peut également
venir
d'un enregistrement qui a moins de 5 champs. Ajoute les lignes :
MsgBox "nbre de champs : " & UBound(Tablo)
MsgBox "champ onglet : " & Tablo(4)
avant la ligne qui plante.
Renvoie-moi les résultats des msgboxes et vérifie que le champ onglet
est
bien strictement identique au nom d'onglet (majuscules et minuscules).
Daniel
"Gildo" a écrit dans le message de
news:

Merci de la réponse
y a un truc que je ne comprends pas (pas qu'un ...)
j'ai une erreur 9 (l'indice nappartient pas à la sélection) arrivé à

Set sh = Sheets(Tablo(4))

???

"Daniel.C" wrote:

Erratum :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = sh.Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Daniel
"Daniel.C" a écrit dans le message de
news:
uw$
En recopiant la première colonne du fichier csv en colonne A et
ainsi
de
suite :

Sub test()
Dim Enrgt As String, Tablo, sh As Worksheet
Dim Ligne As Long
Open "e:donneesdanielmpfetest.csv" For Input As #1
Do While Not EOF(1)
Line Input #1, Enrgt
Tablo = Split(Enrgt, ";")
Set sh = Sheets(Tablo(4))
Ligne = Range("A65000").End(xlUp).Row + 1
For i = 0 To UBound(Tablo)
sh.Cells(Ligne, i + 1) = Tablo(i)
Next i
Loop
Close #1
End Sub

Fais attention à la casse pour les noms de feuille : si les noms
d'onglet
sont en majuscule, ils doivent l'être également dans le fichier
csv.
Daniel
"Gildo" a écrit dans le message
de
news:

Merci de tes questions

Le fichier csv possède une ligne avec des noms de champ ?
Oui le fichier possède des noms de champ

Comment faire la répartition si ces noms de champ ne
correspopndent
pas à
ceux du classeur Excel ? tu dois au minimum fournir
l'équivalence
des
colonnes.
Là je réfléchis à importer tout en vrac ranger par colonne tel
quelle
dans
une feuille import puis une faire une macro qui réparti à
posteriori
les
colonnes au bon endroit dans les feuilles dédiés

Quel est le séparateur de champ du fichier csv ?
Le séparateur est un ;

Merci


"Daniel.C" wrote:

Bonjour.
Précisions :
Le fichier csv possède une ligne avec des noms de champ ?
Comment faire la répartition si ces noms de champ ne
correspopndent
pas
à
ceux du classeur Excel ? tu dois au minimum fournir
l'équivalence
des
colonnes.
Quel est le séparateur de champ du fichier csv ?
Cordialement.
Daniel
"Gildo" a écrit dans le
message
de
news:

Bonjour,

(ce serait si simple dans ACCESS mais je dois utiliser Excel
et

c'est
corsé.)
J'ai un fichier data.csv de 5000 lignes et des colonnes de A
à
AR.
Une colonne E avec trois libellés de champ soit TOTO TUTU ou
TITI.

Comment spécifier en VBA une importation de ce fichier vers
un
fichier
Excel
qui
insérerait dans des feuilles existantes nommées TOTO TUTU ou
TITI
les
lignes
en fonction de la colonne E et bien entendu le petit + tout
ça à
partir de
la
ligne 6.
A savoir que les feuilles du fichier Excel receveur sont
préformatées
que
les noms de champ peuvent être différents de ceux du csv que
les
colonnes
ne
sont pas forcément dans le même ordre et enfin que je
n'importe
pas
toutes
les colonnes.
Ouf .
Si quelqu'un voit une soluce même partielle je suis preneur
parce
que

je
suis dans le bleu par avance merci .



































1 2