Cadrer une chaine de carractére avec numérique [Résolu]

Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
- - Dernière réponse : cs_tolt
Messages postés
270
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
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
3
Merci
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
.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 153 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jmf0
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
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
Commenter la réponse de cs_casy
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
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
Commenter la réponse de cs_tolt
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
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
Commenter la réponse de cs_casy
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
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
Commenter la réponse de cs_tolt
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
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
Commenter la réponse de cs_casy
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
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
Commenter la réponse de cs_tolt
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
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 !
Commenter la réponse de jmf0
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
OK mais franchement ça gonfle d'utiliser cette police à la con de Courrier...
@+

tolt
Commenter la réponse de cs_tolt
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
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é ...)
Commenter la réponse de jmf0
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
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
Commenter la réponse de cs_tolt
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
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
Commenter la réponse de cs_tolt
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
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
Commenter la réponse de jmf0
Messages postés
270
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
4 avril 2019
0
Merci
Félicitation jmf0 de mieux en mieux...
Qu'un mot pour ton aide MERCI.
@+++
Commenter la réponse de cs_tolt