Cadrer une chaine de carractére avec numérique

Résolu
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019 - 5 avril 2009 à 16:20
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019 - 6 avril 2009 à 07:33
Bonjour,

Avez-vous svp la solution pour que dans une ListBox ma chaine Additem soit bien cadrée sans passer par une police Courrier ? Exemple ci-dessous avec mes chiffres bien cadrés ect...

Montant 1255,10
Montant   155,10
etc...

Je cherche depuis ce matin sans succé !!!
Merci

tolt

14 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
5 avril 2009 à 19:23
1) joue avec ce principe (ce sera de l'arithmétique , mais essaye d'y associer la tabulation (je te laisse faire...)

2) je disais que le résultat était "acceptable", et pour cause (il ne sera jamais parfait) : lorsque l'on "ajuste" la chaîne d'espaces, la finesse de l'ajustement est bien évidemment inversement proportionnelle à la taille de la police. Pluis la taille esdt petite et plus fin est l'ajustement. Le "pas" d'ajustement étant celui de la taille de la police, l'ajustement sera moins "fin" avec des grandes tailles (bien évidemment)...
Donc : acceptable mais pas parfait
.
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 16:51
Qu'appelle-tu cadré ???

Aligné à gauche, à droite, sur le symbole décimal ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 17:05
Une chaine cadrée quoi avec une ligne qui contient du texte, montant décimal cadré à droite comme il ce doit etc...Dans une ListBox il cadre rien !!!

Merci

tolt
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 17:23
Il te faut 2 choses
- Utiliser une police à espacement fixe, comme Courrier par exemple
- mettre autant d'espace entre montant et ton nombre, qu'il te manque de chiffres à gauche de la décimale.

Admettons que tu veuille un nombre avec 6 chiffres + 2 décimales soit jusqu'à au maximum 999999.99 (soit 9 caractères)

dim tmp as string
tmp = Space(9) & TaValeur
List1.AddItem "Montant " & Mid(tmp,Len(tmp)-9)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 17:28
Justement dans mon message j'indique que je veux pas de police Courrier car en effet dans ce cas la chose est très simple.
J'ai besoin de la poilice Arial size(11)
Personne n'a déjà ce cas de figure ? J'ai bien trouvé pour l'objet printer mais dans une listBox voir une chaine de carractère que nous aurions besoin de bien formater ?????????????????
Merci en tout cas.

tolt
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2009 à 17:33
Tu n'as pas le choix, il te faut obligatoirement utiliser une police à espacement fixe si tu veux aligner tes caractères.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 17:37
Je vais encore chercher car j'ai du mal à croire que l'on puissa pas faire un truc aussi evident que ce simple problème...
Sachant qu'avec l'objet printer ça marche impec comme le montre le code ci-dessous.
Merci encore.

P.CurrentY = 600 + (WchaineHauteur * WTotLignePage)
P.CurrentX = 8000 - P.TextWidth(CStr(FindParm(Wchaine, y + 3, Sp)))
P.Print CStr(FindParm(Wchaine, y + 3, Sp))

tolt
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
5 avril 2009 à 17:38
Rien à faire sans espacement fixe, c'est évident !
Une PictureBox ou l'objet Printer possèdent un hdc et tu y "dessines" en currentx en fonction de la largeur graphique
Une listbox ne possède pas de hdc et tu y écris (pas de currentx et pas de largeur graphique)
Tout ce que tu pourrais faire, c'est de l'à peu près, du genre :
- calculer la largeur graphique
- ajouter "devant" un nombre d'espaces tel que la largeur graphique de ces espaces serait la largeur d'affichage - la largeur du texte....
Ce ne sera jamais parfait, cependant !
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 17:46
OK mais franchement ça gonfle d'utiliser cette police à la con de Courrier...
@+

tolt
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
5 avril 2009 à 18:06
Et alorsd ?
Tu as essayé (tenté) ce que je t'ai dit ?
Moi oui ...
Et c'est acceptable :

Private Sub Command1_Click()
  List1.AddItem toto(2)
  List1.AddItem toto(123.2)
  List1.AddItem toto(1200.25)
End Sub

Private Function toto(nb As Single) As String
 Dim l As Integer, d As Integer, plus As String, cr As String
 cr = Format(nb, "0.00")
  Set Font = List1.Font
  l = TextWidth(cr)
  d = List1.Width - l - 40 ' il faut décompter les bordures (ici - 40 pour une form en pixels)
  While TextWidth(plus) <= d
    plus = plus & " "
  Wend
  toto = plus & cr
End Function

Principe de base en tout : se retrousser les manches et au moins tenter (surtout si guidé ...)
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 18:20
Plus qu'acceptable jmf0 pas mal du tout...
Reste à voir dans une chaine plus compliquée avec désignation d'article, quantité, tarif, TVA etc...

Merci beaucoup je vais m'en inspirer.
Bonne soirée.

tolt
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
5 avril 2009 à 19:34
J'avais bien compris jmf0 
Je suis deçu et j'espére pouvoir me passer de cette police Courrier...
Sincérement Merci pour votre aide.
Bonne semaine

tolt
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
5 avril 2009 à 22:56
Ecoute, ami tolt,

Je m'ennuyais à 100 sous l'heure et je me suis un peu amusé à faire des "bricoles"... pour me divertir un peu...

Ce n'est toujours pas parfait et j'allais jeter tout cela lorsque je me suis dit que certains de mes petits essais te seraient peut-être utiles ici ou là ...

je te livre cette futilité avant de l'effacer  :

Option Explicit



Private Sub Command1_Click()
 alignons "on centre sans ""cadrer""", List1, "C"
 alignons "--------------", List1, "C"
 alignons mef(2), List1, "C"
 alignons mef(121.3), List1, "C"
 alignons mef(2514.11), List1, "C"
 alignons "on aligne à droite en ""cadrant""", List1, "D"
 alignons "--------------", List1, "D"
 alignons mef(2), List1, "D"
 alignons mef(121.3), List1, "D"
 alignons mef(2514.11), List1, "D"
 alignons "on aligne à gauche sans ""cadrer""", List1, "G"
 alignons "--------------", List1, "G"
 alignons mef(2), List1, "G"
 alignons mef(121.3), List1, "G"
 alignons mef(2514.11), List1, "G"
End Sub



Private Sub alignons(ByVal ch As String, ByVal lst As ListBox, ByVal comment As String)
  Dim i As Long, plus As String
  i = -2
  plus = ch
  Set Font = lst.Font
  Do While TextWidth(plus) < lst.Width
    plus = plus & " "
    i = i + 1
  Loop
  Select Case comment
    Case "G"
      lst.AddItem ch
    Case "D"
      lst.AddItem Space(i - 1) & ch
    Case "C"
      lst.AddItem Space(i \ 2) & ch
    Case Else
      lst.AddItem ch
   End Select
End Sub
Private Function mef(nb As Single) As String
  mef = Format(nb, "#.00")
End Function
0
cs_tolt Messages postés 269 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 4 avril 2019
6 avril 2009 à 07:33
Félicitation jmf0 de mieux en mieux...
Qu'un mot pour ton aide MERCI.
@+++
0
Rejoignez-nous