Mise en forme d' un champ texte [Résolu]

Signaler
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
LIBRE_MAX
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
-
Bonjour, Bonsoir,


J' ai un champ Texte qui est le résultat de la concaténation de cinq autres champs de type numériques.
Le problème se situe au niveau du formatage de ce champ résultat que je veux uniforme et de longueur fixe quelque soit les valeurs des champs
numériques.
Autre contrainte: Remplacer par des espaces les valeurs nulles ou égales à zéro.


Exemple:
   9.50    8.75   10.00   0.00   7.00
 10.00    0.00     8.00   6.75    0.00


Après concaténation, je dois avoir:
  9.80     8.75   10.00              7.00
10.00                 8.00   6.75    0.00


J' ai essayer avec
Format$(00.00), Format$(#.00), Format$(@@@@@)...etc
et en remplaçant 0.00 par "     " mais les résultats ne sont pas probants.

Merci de vouloir répondre.


Ps:espèrant que la mise en page sera parfaite.

                 
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />

18 réponses

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
au niveau de l'affichage il y aura décalage ou pas suivant le type de police que tu utilises c'est totalement ingérable au niveau du code sauf en choisissant une police de largeur constante pour tous les caracteres ce qui n'est que tres rarement le cas
faut aller chercher sur le net la police qui va bien
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
pardon, je voulais dire:
Format$(chp, "0.00" )...etc)

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
if valeur = 0 then
    texte = ""
else
    texte = cstr(valeur)
end if

for i = 0 to longeurchaine
    if len(texte)< longueurchaine then texte = " " & texte
next i

tu fais ça dans une boucle pour traiter toutes tes valeurs puis tu fais ensuite ta concaténation peinard
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
En attendant, je bosse ..

j' ai tout essayé,mais pour l' instant ça reste une bosse !
Le plus dur c' est d' avoir la même longueur avec 5 espaces qu' avec 5 caractères.
Alors ..,je laisse tomber ou quoi ?
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
salut pile_poil,
pardon, post croisé.
j' ai essayé ceci:
xChp " " & IIf(![UV_MOY] 0, " ", Format$(![UV_MOY], "0.00")) & " " & _
IIf(![UV_EX] = 0, " ", Format$(![UV_EX], "0.00")) & " " & _
IIf(![UV_MCC] = 0, " ", Format$(![UV_MCC], "0.00")) & " " & _
IIf(![MCC1] = 0, " ", Format$(![MCC2], "0.00")) & " " & _
IIf(![MCC2] = 0, " ", Format$(![MCC1], "0.00")) & " "

mais au niveau de l' affichage, il y' a décalage.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
A ma connaissance c' est Courrier new qui a la même casse.
Mais reste le problème de 10.00 et de tout autre nombre < 10 (9.00 par exemple.
il faudra soit avoir 09.00 soit " 9.00".
ce qui conduira à un autre test : <=10.
Mais bon , je crois que je vais chercher une autre approche.

Merci en tout cas et bonne fin de soirée.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
oK !
Merci encore ..
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
Tu peux regarder la fonction Space$ dans ton aide.
Ça pourrait servir...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
   Bonsoir MPi,
je viens de tester avec Space$() , voici ce que ça donne :



Private Sub Command1_Click()
 Text1.Text = "10.00" & "|" & Space$(1) & "8.50" & _
    "|" & Space$(5) & "|" & Space$(1) & "7.75"


 Text2.Text = Space$(1) & "7.00" & "|" & "10.00" & _
    "|" & Space$(1) & "9.50" & "|" & Space$(1) & "7.75"



End Sub



Résultat :
 Avec Courier New
10.00| 8.50|     | 7.75
 7.00|10.00| 9.50| 7.75 

Avec Garamond
10.00| 8.50|     | 7.75
 7.00|10.00| 9.50| 7.75 

Avec Times
10.00| 8.50|     | 7.75
 7.00|10.00| 9.50| 7.75 

le choix de la police de caractère reste impératif..
Merci .

 
<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
Et si tu ne veux pas utiliser de valeurs fixes comme Space$(1)
tu peux utiliser en plus Len

Si tu sais que tu as besoin de 5 espaces, tu pourrais y aller un peu comme ceci
text1 = MaValeur1 & (Space(5) - Len(MaValeur1)) & _
            MaValeur2 & (Space(5) - Len(MaValeur2))

Tu vois le principe ?
Tu mets autant d'espaces nécessaires pour combler la longueur de la variable à écrire pour atteindre les 5 caractères souhaités...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Oui mais le problème se situe au niveau de l' équivalence entre l' espace accupé par un espace par rapport à l' espace qu' occupera un caractère.
Pour preuve le résultat diffère selon la police choisi.Il faut que cette dernière ait la même casse.

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
mais ta dernière idée reste valable , en tout cas.
Merci encore.

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
reste que je dois remplacer 0.00 par 5 espaces

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
Si tu travailles sous VB6, il y aussi Textwidth qui pourrait éventuellement servir, mais le choix d'une police à espacement fixe demeure le plus simple...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
je travaille sous vb6, j' enregistre dans Access et j' édite en CrystalReport.
Tout un programme

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
16
des heures de plaisir...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Mais il faut que je t' explique le topo.
J' ai un etat avec 40 colonnes subdivisé par groupe de 5.
J' ai pensé qu' au lieu d' avoir 40 champs je pourrais les réduire à 8.
en les concaténant par 5.
Tu vois un peu le manège.?

<hr />
... Il y' en a même qui m' ont vu voler.
<hr />