OVH Cloud OVH Cloud

champ de longuer fixe

11 réponses
Avatar
Y V E L
Bonjour,

Comment obtenir viea "enregistrer sous..." un fichier csv avec longeur de
champ fixe (même nombre de caractères sur toute la colonne?

( ne pas confondre avec largeur de colonne ;-)


Merci pour votre aide

YVEL

10 réponses

1 2
Avatar
PMO
Bonjour,

La macro ci-dessous pourra peut-être résoudre votre problème.

QUE FAIT ELLE:
1) Elle recherche le mot le plus long
2) Elle ajoute des espaces devant les autres mots
3) Elle inscrit le résultat sur une feuille d'un nouveau classeur
4) Elle met une police proportionnelle pour faciliter la visualisation

Il ne vous restera plus qu'à enregister le classeur en format csv
et , lorsque vous l'ouvrirez, remettre une police proportionnelle (ex:
Courier)
car les formats ne sont pas conservés à l'enregistrement.

'********************************
Option Explicit
Sub LongueurFixe()
Dim var
Dim i&
Dim j&
Dim maxi&
Dim A$
Dim R As Range
Dim W As Workbook
Dim S As Worksheet
var = ActiveSheet.UsedRange
maxi& = -1
'---- Mot le plus long ----
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
If Len(var(i&, j&)) > maxi& Then
maxi& = Len(var(i&, j&))
End If
Next j&
Next i&
'---- On insère des espaces devant ----
For i& = 1 To UBound(var, 1)
For j& = 1 To UBound(var, 2)
A$ = CStr(var(i&, j&))
If Len(A$) < maxi& Then
A$ = Space(maxi& - Len(A$)) & A$
End If
If IsNumeric(A$) Then
A$ = "'" & A$
End If
var(i&, j&) = A$
Next j&
Next i&
'---- Récupère l'adresse de la plage concernée ----
Set R = Range(ActiveSheet.UsedRange.Address)
'---- Nouveau classeur ----
Set W = Workbooks.Add(xlWorksheet)
Set S = W.Sheets(1)
S.Range(R.Address) = var
'---- On prend une police proportionnelle ----
S.Range(R.Address).Font.Name = "Courier"
Columns.AutoFit
End Sub
'********************************

Est-ce que ça marche ?

Cordialement.

PMO
Patrick Morange




Bonjour,

Comment obtenir viea "enregistrer sous..." un fichier csv avec longeur de
champ fixe (même nombre de caractères sur toute la colonne?

( ne pas confondre avec largeur de colonne ;-)


Merci pour votre aide

YVEL





Avatar
Y V E L
PMO a fait l'effort de rédiger :
Bonjour,

La macro ci-dessous pourra peut-être résoudre votre problème.

QUE FAIT ELLE:
1) Elle recherche le mot le plus long
2) Elle ajoute des espaces devant les autres mots
3) Elle inscrit le résultat sur une feuille d'un nouveau classeur
4) Elle met une police proportionnelle pour faciliter la visualisation

Il ne vous restera plus qu'à enregister le classeur en format csv
et , lorsque vous l'ouvrirez, remettre une police proportionnelle (ex:
Courier)
car les formats ne sont pas conservés à l'enregistrement.

'********************************
Option Explicit


Impressionnant: ça marche!
Enfin presque: les données sont cadrées à droite même celles en
alphanumérique.
Et complétées par "espace" sur leur gauche.
J'ai relancé après avoir calé toutes les données à gauche même résultat.
Est-il possible d'y apporter une solution?

Précision : j'utilise Excel 2002 Sp2 sur XP pro SP2
Question: la ligne Option Explicit a quel rôle précis (pas de changement
apparant avec ou sans)

Dans tous les cas : merci infiniment



--
YVEL

Avatar
Y V E L
En complément de ma réponse précédente:
toutes les colonnes sont de taille fixe et de longueur identique calquée sur
la plus longue:
exemple : colonne code postal et ville ont toutes les deux 30 caractères de
long
Est-ce bien le résultat attendu?

--
YVEL
Avatar
PMO
Bonjour,

En premier lieu, réponses à vos 2 questions:
1) Les espaces à droite plutôt qu'à gauche ? C'est possible de faire.
2) Faire des longueurs fixes par colonne en se soumettant au mot
le plus long de la colonne (et non pas soumettre au mot le plus long
de toute la feuille) ? C'est possible de faire.

En second lieu, je suis actuellement (et heureusement) en mission et je
dois remettre à plus tard la modification de la macro selon les critères
définis ci-dessus.
Mais, promis, dès que je suis libéré je vous fais parvenir une solution.
Même si cela dure un peu allez consulter de temps en temps le MPFE.

Cordialement et à bientôt.

PMO
Patrick Morange



En complément de ma réponse précédente:
toutes les colonnes sont de taille fixe et de longueur identique calquée sur
la plus longue:
exemple : colonne code postal et ville ont toutes les deux 30 caractères de
long
Est-ce bien le résultat attendu?

--
YVEL





Avatar
jps
PMO étant actuellement (et heureusement) en mission, je mimimisce pour cette
histoire de ligne Option Explicit
en effet, si tu la supprimes, YVEL, tu ne verras pas de différence notoire
mais si tu la laisses (ou l'installes en début de proc), elle te permettra
une vérification de la bonne orthographe des variables au fil de la
rédaction de la proc...ce qui a, pour effet, de ne pas chercher
désespérément où ça coince lorsque tu as écrit Dim derLgn et qu'ensuite tu
parles de derlign...dont le L ne se mettra pas en majuscules du fait de
l'erreur...
bon, tu n'as rien compris : ça tombe bien, moi non plus
jps

"Y V E L" <yvel002[ä].free.fr> a écrit dans le message de
news:%
PMO a fait l'effort de rédiger :
Bonjour,

La macro ci-dessous pourra peut-être résoudre votre problème.

QUE FAIT ELLE:
1) Elle recherche le mot le plus long
2) Elle ajoute des espaces devant les autres mots
3) Elle inscrit le résultat sur une feuille d'un nouveau classeur
4) Elle met une police proportionnelle pour faciliter la visualisation

Il ne vous restera plus qu'à enregister le classeur en format csv
et , lorsque vous l'ouvrirez, remettre une police proportionnelle (ex:
Courier)
car les formats ne sont pas conservés à l'enregistrement.

'********************************
Option Explicit


Impressionnant: ça marche!
Enfin presque: les données sont cadrées à droite même celles en
alphanumérique.
Et complétées par "espace" sur leur gauche.
J'ai relancé après avoir calé toutes les données à gauche même résultat.
Est-il possible d'y apporter une solution?

Précision : j'utilise Excel 2002 Sp2 sur XP pro SP2
Question: la ligne Option Explicit a quel rôle précis (pas de changement
apparant avec ou sans)

Dans tous les cas : merci infiniment



--
YVEL





Avatar
Y V E L
jps a fait l'effort de rédiger :
PMO étant actuellement (et heureusement) en mission, je mimimisce
pour cette histoire de ligne Option Explicit
en effet, si tu la supprimes, YVEL, tu ne verras pas de différence
notoire mais si tu la laisses (ou l'installes en début de proc), elle
te permettra une vérification de la bonne orthographe des variables
au fil de la rédaction de la proc...ce qui a, pour effet, de ne pas
chercher désespérément où ça coince lorsque tu as écrit Dim derLgn et
qu'ensuite tu parles de derlign...dont le L ne se mettra pas en
majuscules du fait de l'erreur...
bon, tu n'as rien compris : ça tombe bien, moi non plus
jps



Y a que du bon dans ce NG est cela fait du bien.

Comme dit plus haut je n'ai rien compris mais mon intuition (et ta tentive)
me dis qu'il faut rien toucher à c'écrit PMO !!

Merci.


--
YVEL

Avatar
Y V E L
PMO a fait l'effort de rédiger :
Bonjour,

En premier lieu, réponses à vos 2 questions:
1) Les espaces à droite plutôt qu'à gauche ? C'est possible de faire.
2) Faire des longueurs fixes par colonne en se soumettant au mot
le plus long de la colonne (et non pas soumettre au mot le plus
long de toute la feuille) ? C'est possible de faire.

En second lieu, je suis actuellement (et heureusement) en mission et
je
dois remettre à plus tard la modification de la macro selon les
critères définis ci-dessus.
Mais, promis, dès que je suis libéré je vous fais parvenir une
solution.
Même si cela dure un peu allez consulter de temps en temps le MPFE.

Cordialement et à bientôt.

PMO
Patrick Morange




Je vous suis gré d'avoir bien voulu tenir compte de mes remarques
Je ne sais pour combien de temps vous êtes actuellement (et heureusement) en
mission: je ferai donc comme soeur Anne ;-) .

Merci d'avance

--
YVEL

Avatar
PMO
Bonjour,

Au cours de mes périgrinations RATPistes j'ai rectifié la macro.
Comme c'est du vite fait, prenez vos précautions pour la tester.
Sinon c'est dans le droit fil de vos remarques.
Remplacez l'ancien code (tout en le conservant précieusement des fois
que ça ne fonctionne pas) par le nouveau code ci-dessous.

'**********************************
Option Explicit
Sub LongueurFixe()
Dim var
Dim i&
Dim j&
Dim k&
Dim big&
Dim maxi&()
Dim A$
Dim R As Range
Dim W As Workbook
Dim S As Worksheet
var = ActiveSheet.UsedRange
'---- Mot le plus long par colonne ----
For j& = 1 To UBound(var, 2)
big& = 0
For i& = 1 To UBound(var, 1)
If Len(var(i&, j&)) > big& Then
big& = Len(var(i&, j&))
End If
Next i&
k& = k& + 1
ReDim Preserve maxi&(1 To k&)
maxi&(k&) = big&
Next j&
'---- On insère des espaces devant ----
For j& = 1 To UBound(var, 2)
For i& = 1 To UBound(var, 1)
A$ = CStr(var(i&, j&))
If Len(A$) < maxi&(j&) Then
A$ = A$ & Space(maxi&(j&) - Len(A$))
End If
If IsNumeric(A$) Then
A$ = "'" & A$
End If
var(i&, j&) = A$
Next i&
Next j&
'---- Récupère l'adresse de la plage concernée ----
Set R = Range(ActiveSheet.UsedRange.Address)
'---- Nouveau classeur ----
Set W = Workbooks.Add(xlWorksheet)
Set S = W.Sheets(1)
S.Range(R.Address) = var
'---- On prend une police proportionnelle ----
S.Range(R.Address).Font.Name = "Courier"
Columns.AutoFit
End Sub
'**********************************

Est-ce que ça correspond à votre attente ?

Cordialement.

PMO
Patrick Morange



PMO a fait l'effort de rédiger :
Bonjour,

En premier lieu, réponses à vos 2 questions:
1) Les espaces à droite plutôt qu'à gauche ? C'est possible de faire.
2) Faire des longueurs fixes par colonne en se soumettant au mot
le plus long de la colonne (et non pas soumettre au mot le plus
long de toute la feuille) ? C'est possible de faire.

En second lieu, je suis actuellement (et heureusement) en mission et
je
dois remettre à plus tard la modification de la macro selon les
critères définis ci-dessus.
Mais, promis, dès que je suis libéré je vous fais parvenir une
solution.
Même si cela dure un peu allez consulter de temps en temps le MPFE.

Cordialement et à bientôt.

PMO
Patrick Morange




Je vous suis gré d'avoir bien voulu tenir compte de mes remarques
Je ne sais pour combien de temps vous êtes actuellement (et heureusement) en
mission: je ferai donc comme soeur Anne ;-) .

Merci d'avance

--
YVEL






Avatar
Michel Pierron
Bonsoir Y V E L;
Il suffit de déclarer une variable String de la longueur voulue.
Exemple pour un champ de longueur 10:
Sub Transpose()
Dim i&, Champ As String * 10
i = 1
Do
If Cells(i, 1) = "" Then Exit Sub
Champ = Cells(i, 1)
Cells(i, 1) = Champ
i = i + 1
Loop
End Sub

Ne reste plus qu'à enregistrer au format csv.
MP

"Y V E L" <yvel002[ä].free.fr> a écrit dans le message de
news:ewq$bS%
Bonjour,

Comment obtenir viea "enregistrer sous..." un fichier csv avec longeur de
champ fixe (même nombre de caractères sur toute la colonne?

( ne pas confondre avec largeur de colonne ;-)


Merci pour votre aide

YVEL




Avatar
Y V E L
PMO a fait l'effort de rédiger :
Bonjour,

Au cours de mes périgrinations RATPistes j'ai rectifié la macro.
Comme c'est du vite fait, prenez vos précautions pour la tester.
Sinon c'est dans le droit fil de vos remarques.
Remplacez l'ancien code (tout en le conservant précieusement des fois
que ça ne fonctionne pas) par le nouveau code ci-dessous.



Vous pilotez le métro en développant?
Cela restera entre nous ;-)

La nouvelle version semble fonctionner nickel !

Merci infiniment.


--
YVEL

1 2