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

cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 16:20 - Dernière réponse : cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention
- 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
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 5 avril 2009 à 19:23
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
.

Merci jmf0 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de jmf0
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 5 avril 2009 à 16:51
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 17:05
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
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 5 avril 2009 à 17:23
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 17:28
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
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 5 avril 2009 à 17:33
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 17:37
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
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 5 avril 2009 à 17:38
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 17:46
0
Merci
OK mais franchement ça gonfle d'utiliser cette police à la con de Courrier...
@+

tolt
Commenter la réponse de cs_tolt
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 5 avril 2009 à 18:06
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 18:20
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 5 avril 2009 à 19:34
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
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 5 avril 2009 à 22:56
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
cs_tolt 268 Messages postés mardi 17 décembre 2002Date d'inscription 5 février 2014 Dernière intervention - 6 avril 2009 à 07:33
0
Merci
Félicitation jmf0 de mieux en mieux...
Qu'un mot pour ton aide MERCI.
@+++
Commenter la réponse de cs_tolt

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.