OVH Cloud OVH Cloud

Creation d'un fichier plat

7 réponses
Avatar
Michel
Bonjour a tout le monde,

Je voudrais contruire un fichier plat a partir d'excel.

Tout marche bien sauf que je voudrais reduire le nombre de cellules
impactees.

voila mon code qui marche tres bien :

Sub B_CREATION_FICHIER_PLAT()
Dim Arr, i&
ChDir "T:\Multifonds-Interfaces\Spot-Transaction\"
sauvnom Range("J3", Range("J10000").End(xlUp)),
"T:\Multifonds-Interfaces\Spot-Transaction\" & "Spot-" & Date & ".DAT"
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
End Sub
Private Sub sauvnom(Plage As Range, NomFich$)
Open NomFich For Output As 1
For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next
Close
End Sub



Ce que je voudrais faire c'est de remplacer :la ligne :

Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value

par :

Print #1, CELL.Text & Range("K" & CELL.Row).Value


Ce qu'il faut savoir c'est que la longueur en colonne texte est de 1780.

Si je ne split pas ma formule en 3 cellules (K&L&M) et je concatenetes le
tout en une (K)

le resultat de :

Print #1, CELL.Text & Range("K" & CELL.Row).Value

me donne un fichier ne comportant que entre 1024 et 1030 colonne il oublie
de me transcrire les 750 autres colonnes.

Je ne sais pas pourquoi..... Quelqu'un aurait-il une idee ?

Pour l'instant ca marche mais ce n'ai pas tres jolie.... et surtout pro....

P.S. : L'instruction write et via word ne donne rien non plus.....

Merci d'avance pour votre aide.

@+

Michel.

7 réponses

Avatar
Daniel
Bonsoir.
Pas sûr d'avoir bien compris; essaie :

Print #1, CELL.Text & Left(Range("K" & CELL.Row).Value, 1000) & _
Right(Range("K" & CELL.Row).Value, Len(Range("K" & CELL.Row).Value) -
1000)

Cordialement.
Daniel
"Michel" a écrit dans le message de
news: OuRlPo%
Bonjour a tout le monde,

Je voudrais contruire un fichier plat a partir d'excel.

Tout marche bien sauf que je voudrais reduire le nombre de cellules
impactees.

voila mon code qui marche tres bien :

Sub B_CREATION_FICHIER_PLAT()
Dim Arr, i&
ChDir "T:Multifonds-InterfacesSpot-Transaction"
sauvnom Range("J3", Range("J10000").End(xlUp)),
"T:Multifonds-InterfacesSpot-Transaction" & "Spot-" & Date & ".DAT"
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
End Sub
Private Sub sauvnom(Plage As Range, NomFich$)
Open NomFich For Output As 1
For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next
Close
End Sub



Ce que je voudrais faire c'est de remplacer :la ligne :

Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value

par :

Print #1, CELL.Text & Range("K" & CELL.Row).Value


Ce qu'il faut savoir c'est que la longueur en colonne texte est de 1780.

Si je ne split pas ma formule en 3 cellules (K&L&M) et je concatenetes le
tout en une (K)

le resultat de :

Print #1, CELL.Text & Range("K" & CELL.Row).Value

me donne un fichier ne comportant que entre 1024 et 1030 colonne il oublie
de me transcrire les 750 autres colonnes.

Je ne sais pas pourquoi..... Quelqu'un aurait-il une idee ?

Pour l'instant ca marche mais ce n'ai pas tres jolie.... et surtout
pro....

P.S. : L'instruction write et via word ne donne rien non plus.....

Merci d'avance pour votre aide.

@+

Michel.





Avatar
Michel
Desole...
En fait CELL.Text est deja la selection de la colonne J.

Le fait de definir un nombre de colonne au niveau de VBA de change rien
quand a la fonction PRINT....

Bien que tu puisses definir un range de 4000, n'empeche que la fonction
PRINT/WRITE va te remplir ton fichier plat que de 1024/1030
positions/colonnes.

Faits le test tu verra bien...

Mon code fonction tres bien sauf que je voudrais le faire qu'a partir d'une
cellule et pas de 4 cellules....

Une autre idee ?

si ce n'est pas claire dis moi ce que tu n'as pas compris ?

@+

Michel.


"Daniel" a écrit dans le message de news:
exiQKl$
Bonsoir.
Pas sûr d'avoir bien compris; essaie :

Print #1, CELL.Text & Left(Range("K" & CELL.Row).Value, 1000) & _
Right(Range("K" & CELL.Row).Value, Len(Range("K" & CELL.Row).Value) -
1000)

Cordialement.
Daniel
"Michel" a écrit dans le message de
news: OuRlPo%
Bonjour a tout le monde,

Je voudrais contruire un fichier plat a partir d'excel.

Tout marche bien sauf que je voudrais reduire le nombre de cellules
impactees.

voila mon code qui marche tres bien :

Sub B_CREATION_FICHIER_PLAT()
Dim Arr, i&
ChDir "T:Multifonds-InterfacesSpot-Transaction"
sauvnom Range("J3", Range("J10000").End(xlUp)),
"T:Multifonds-InterfacesSpot-Transaction" & "Spot-" & Date & ".DAT"
Rows("3:3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A1").Select
End Sub
Private Sub sauvnom(Plage As Range, NomFich$)
Open NomFich For Output As 1
For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next
Close
End Sub



Ce que je voudrais faire c'est de remplacer :la ligne :

Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value

par :

Print #1, CELL.Text & Range("K" & CELL.Row).Value


Ce qu'il faut savoir c'est que la longueur en colonne texte est de 1780.

Si je ne split pas ma formule en 3 cellules (K&L&M) et je concatenetes le
tout en une (K)

le resultat de :

Print #1, CELL.Text & Range("K" & CELL.Row).Value

me donne un fichier ne comportant que entre 1024 et 1030 colonne il
oublie de me transcrire les 750 autres colonnes.

Je ne sais pas pourquoi..... Quelqu'un aurait-il une idee ?

Pour l'instant ca marche mais ce n'ai pas tres jolie.... et surtout
pro....

P.S. : L'instruction write et via word ne donne rien non plus.....

Merci d'avance pour votre aide.

@+

Michel.









Avatar
JLuc
*Bonjour Michel*,
Et si tu mets :
For Each CELL In Plage
With CELL
texte = .Value & .Offset(0,1) & .Offset(0,2) & .Offset(0,3)
End With
Print #1, texte
Next


For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
Michel
Bonjour,
Ma question etait justement je ne veux qu'une seule cellule a la base... pas
trois ou quatres qui seraient concatenees.

Mon probleme et la fonction PRINT par rapport a une cellule contenant plus
que 1021 champs a l'interieur.

Si je split les 1700 champs sur 3 ou 4 cellules, cela veut dire que par
cellule j'obtiendrais moind de 1021 champs par cellules. Autrement dit la
fonction PRINT marchera impec.

Si ce n'est toujours pas clair, je suggeres a tout le monde d'essayer ma
macro....

Vous verez immediatement le resultat avec une seule cellule et avec 3/4
cellules concatenees.
Exemple dans la cellule :
=(rept("1";1700)&9)

Si vous faites ca dans une cellule il n'y aura pas de 9 a la fin
en splittant ce sur plusieurs cellules ce sera bon..

@+

Michel.





"JLuc" a écrit dans le message de news:

*Bonjour Michel*,
Et si tu mets :
For Each CELL In Plage
With CELL
texte = .Value & .Offset(0,1) & .Offset(0,2) & .Offset(0,3)
End With
Print #1, texte
Next


For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next


--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





Avatar
JLuc
Bonjour,
Ma question etait justement je ne veux qu'une seule cellule a la base... pas
trois ou quatres qui seraient concatenees.

Mon probleme et la fonction PRINT par rapport a une cellule contenant plus
que 1021 champs a l'interieur.

Si je split les 1700 champs sur 3 ou 4 cellules, cela veut dire que par
cellule j'obtiendrais moind de 1021 champs par cellules. Autrement dit la
fonction PRINT marchera impec.

Si ce n'est toujours pas clair, je suggeres a tout le monde d'essayer ma
macro....

Vous verez immediatement le resultat avec une seule cellule et avec 3/4
cellules concatenees.
Exemple dans la cellule :
=(rept("1";1700)&9)

Si vous faites ca dans une cellule il n'y aura pas de 9 a la fin
en splittant ce sur plusieurs cellules ce sera bon..

@+

Michel.
J'ai fais la manip, formule : =REPT("A";3000)&"9"

ecriture :
Sub test()
Open "essai.txt" For Output As #1
Print #1, Range("A1")
Close #1
End Sub
Resultat : sans probleme
fichier de 3ko avec le 9 a la fin
Excel 2000

--
JLuc

Avatar
Michel
Salut,

Efectivement sur une cellule ca marche, alors pourquoi sur une plage cela ne
marche pas ?

c-a-d si tu boucles par exemple de A1 jusqu'a A10

Merci,

@+

Michel.



"JLuc" a écrit dans le message de news:

Bonjour,
Ma question etait justement je ne veux qu'une seule cellule a la base...
pas trois ou quatres qui seraient concatenees.

Mon probleme et la fonction PRINT par rapport a une cellule contenant
plus que 1021 champs a l'interieur.

Si je split les 1700 champs sur 3 ou 4 cellules, cela veut dire que par
cellule j'obtiendrais moind de 1021 champs par cellules. Autrement dit la
fonction PRINT marchera impec.

Si ce n'est toujours pas clair, je suggeres a tout le monde d'essayer ma
macro....

Vous verez immediatement le resultat avec une seule cellule et avec 3/4
cellules concatenees.
Exemple dans la cellule :
=(rept("1";1700)&9)

Si vous faites ca dans une cellule il n'y aura pas de 9 a la fin
en splittant ce sur plusieurs cellules ce sera bon..

@+

Michel.
J'ai fais la manip, formule : =REPT("A";3000)&"9"

ecriture :
Sub test()
Open "essai.txt" For Output As #1
Print #1, Range("A1")
Close #1
End Sub
Resultat : sans probleme
fichier de 3ko avec le 9 a la fin
Excel 2000

--
JLuc





Avatar
Michel
J'ai trouve mon erreur....

Au lieu de :

Private Sub sauvnom(Plage As Range, NomFich$)
Open NomFich For Output As 1
For Each CELL In Plage
'i = i + 1
Print #1, CELL.Text & Range("K" & CELL.Row).Value & Range("L" &
CELL.Row).Value & Range("M" & CELL.Row).Value
Next
Close
End Sub

cela donne :


Private Sub sauvnom(Plage As Range, NomFich$)
Open NomFich For Output As 1
For Each CELL In Plage
'i = i + 1
Print #1, CELL.Value
Next
Close
End Sub

et la ca marche....

C'est vraoment trop con..... Chercher pendant 1 semaine pour ca......

Mais bon l'essentiel c'est que ca marche....


Un grand merci a tout le monde.

@+

Michel.




"JLuc" a écrit dans le message de news:

Bonjour,
Ma question etait justement je ne veux qu'une seule cellule a la base...
pas trois ou quatres qui seraient concatenees.

Mon probleme et la fonction PRINT par rapport a une cellule contenant
plus que 1021 champs a l'interieur.

Si je split les 1700 champs sur 3 ou 4 cellules, cela veut dire que par
cellule j'obtiendrais moind de 1021 champs par cellules. Autrement dit la
fonction PRINT marchera impec.

Si ce n'est toujours pas clair, je suggeres a tout le monde d'essayer ma
macro....

Vous verez immediatement le resultat avec une seule cellule et avec 3/4
cellules concatenees.
Exemple dans la cellule :
=(rept("1";1700)&9)

Si vous faites ca dans une cellule il n'y aura pas de 9 a la fin
en splittant ce sur plusieurs cellules ce sera bon..

@+

Michel.
J'ai fais la manip, formule : =REPT("A";3000)&"9"

ecriture :
Sub test()
Open "essai.txt" For Output As #1
Print #1, Range("A1")
Close #1
End Sub
Resultat : sans probleme
fichier de 3ko avec le 9 a la fin
Excel 2000

--
JLuc