Imprimer un recordset ( zone numerique) [Résolu]

Signaler
Messages postés
149
Date d'inscription
samedi 28 mai 2005
Statut
Membre
Dernière intervention
10 mars 2014
-
JeanMarcus
Messages postés
149
Date d'inscription
samedi 28 mai 2005
Statut
Membre
Dernière intervention
10 mars 2014
-
Bonjour tout le monde !

Je suis en vb6 et "bricole" avec adodc et datagrid.
Certes tout va bien à l'ecran .. afficage cadré etc et surtout dans des zones numerique.
Jarrive a imprimer toutes les zones mais je n'arrive pas a imprimer la zone numerique ( 120,00 )
J'ai essaye avec les differents format et meme en type"courrier", je ne parvient pas a avoir une belle colonnne ..
Je pense que mon probleme sera compris.
Dans l'attente
Amicalement
JeanMarcus

7 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,
Je pense que mon probleme sera compris

A peine (très à peine) deviné (et nous n'aimons pas avoir à deviner)
Alors :
1) explique de sorte à ne pas avoir à penser que l'on pourrait deviner
2) montre la partie concernée de ton code. Nous ne savons même pas quelle méthode tu as choisie (et il en existe au moins 3 différentes possibles !)!!!!

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
149
Date d'inscription
samedi 28 mai 2005
Statut
Membre
Dernière intervention
10 mars 2014

re bonsoir ..

ok desolé et vous comprends parfaitement .. Je ne suis
pas seul et je pense que vs avez saisi mon soucis, mais à moi, de preciser ma demande et attendre votre reponse en fonction de ce que j'ai deja fait et recherche.


Je suis en vb6 et j utilise access avec adodc et datagrid .. j'ai plusieurs fields dans une table
dont un qui est du style numerique ( montant d'une facture ).. Dans le datagrid , tous les fields sont
affiches correctement meme cette zone numerique affiche avec l'option : format # ##0.00 " " qui permet l'affichage du style :

date .. etc .... 123,45
date .. etc .. 1 234,56
date .. etc ..... 98,76

Mon objectif est d'imprimer cet état sous cette forme

J'ai essayé d'imprimer ainsi ( pour cette zone num ):

ESSAI 1

If Len(Format adodc1.Recordset.Fields4),"##,##0.00")) < 15 Then esp = 15 - Len(Format(Adodc1.Recordset.Fields(4), "##,##0.00"))
esp2 = Space(esp)
End If

Printer.Print esp2 & Format(Adodc1.Recordset.Fields(4), "##,##0.00")

- pour essayer de forcer le debut d'ecriture

ESSAI 2

DataGrid1.Columns(4).DataFormat.Format = "##,##0.00"
Printer.Print DataGrid1.Columns(4)

le resultat est ( pour les 2 methodes ):

date .. etc .. 123,45
date .. etc .. 1 234,56
date .. etc .. 98,76

Bref, je voudrais que cette colonne soit imprimé
comme sur l'ecran .

J'espere avoir ete + precis ..

Dans l'attente

Amicalement
JeanMarcus
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Tu imprimes donc directement (avec l'objet Printer). C'était cela, qu'il suffisait de dire, en ce qui concernait la méthode utilisée pour l'impression.
Alors :
Si tu veux aligner tes nombres : 2 solutions :
1) (mais à condition d'affecter à l'objet Printer une police à espacement fixe) :
ajouter devant tes nombres des espaces dont le nombre est à calculer en fonction de la longueur de la chaîne à imprimer. Un calcul à faire, donc.
2) bien plus souple, car bon quelle que soit la police utilisée :
Extraire (voir TextWidth dans ton aide VB6) la largeur graphique de la chaîne à afficher et déterminer le CurrentX (ouvre ton aide vb6 sur ce mot également), tel qu'égal à la position du dernier caractère - cette largeur.

Pour faire tes essais sans gaspiller du papier : je te rappelle que l'objet Printer réagit très exactement comme le composant PictureBox. Entraîne-toi donc avec une picturebox, puis, une fois la chose maîtrisée, fais la même chose avec l'objet Printer.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Et tu devrais mieux te pencher sur l'utilisation de Format.

Fais des essais !

Tiens ! Regarde par exemple ce que fais ceci :
Private Sub Command1_Click()
    Me.FontName = "Courier"
    Me.Print Format(1.22, "@@@@@@@@")
    Me.Print Format(11.22, "@@@@@@@@")
    Me.Print Format(10.44, "@@@@@@@@")
    Me.Print Format(333.22, "@@@@@@@@")
End Sub

Que je ne te conseille toutefois pas réellement (relis mon précédent message à propos de souplesse)

Voilà : fais tous tes essais. Tâtonne au besoin ... C'est à ce pris-là que tu y parviendras avec l'objet Printer.






________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Autre essai (on prend cette fois-ci une Picturebox, pour coller d'un peu plus près à la simulation de l'objet Printer) :
Private Sub Command1_Click()
    Picture1.FontName = "Courier"
    Picture1.Print Format(Format(10, "### ###.00"), "@@@@@@@@")
    Picture1.Print Format(Format(2, "### ###.00"), "@@@@@@@@")
    Picture1.Print Format(Format(1234.56, "### ###.00"), "@@@@@@@@")
    Picture1.Print Format(Format(4.2, "### ###.00"), "@@@@@@@@")
End Sub

Mais (je me répète) tu gagnerais à utiliser ce que je t'ai exposé plus haut (TextWidth, CurrentX, CurrentY à bûcher)
Bonne étude.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Maintenant, mais à condition d'être suffisamment "avancé" :
Tu trouveras parmi les sources que j'ai déposée, un source concernant l'édition et l'impression d'étiquettes.
Les procédés que j'y utilise libèrent de tout un tas de calculs arithmétiques à l'aide de TextWidth et de CurrentX et CurrentY pour faire face aux difficultés résultant des polices de caractère.
Je vais te "mâcher le travail" ===>>> Regarde ce que ferait ceci avec un form et une picturebox (pour simuler l'objet Printer).
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function OffsetRect Lib "user32" (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Private R1 As RECT, R2 As RECT, R3 As RECT

Private Sub Form_Paint()
    Me.ScaleMode = vbPixels
    Picture1.Cls
    picture1autoredraw = True
    Picture1.ScaleMode = vbPixels
    SetRect R1, 0, 0, 60, 20
    SetRect R2, 70, 0, 150, 20
    SetRect R3, 160, 0, 240, 20
    ajout_a_droite "Rubrique 1", R1
    ajout_a_droite "Rubrique 2", R2
    ajout_a_droite "Rubrique 3", R3
    ajout_a_droite 11, R1
    ajout_a_droite 1111.23, R2
    ajout_a_droite 2, R3
    ajout_a_droite 22140.1, R1
    ajout_a_droite 11, R2
    ajout_a_droite 56, R3
    ajout_a_droite 14.54, R1
    ajout_a_droite 4228.23, R2
    ajout_a_droite 2, R3
End Sub
Private Sub ajout_a_droite(nombre As Variant, rectangle As RECT)
    Dim a_traiter As String
    a_traiter = Format(nombre, "### ###.00")
    DrawText Picture1.hdc, a_traiter, Len(a_traiter), rectangle, 2
    OffsetRect rectangle, 0, 15
End Sub


Voilà ! J'ai fait le tour, en ce qui me concerne. Le reste ne peut qu'être entre tes seules mains et ne dépendre que de ta volonté à t' "accrocher".

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
149
Date d'inscription
samedi 28 mai 2005
Statut
Membre
Dernière intervention
10 mars 2014

bonjour a tous.

merci ucfoutu.

merci de tes reponses . j'ai essaye en creant des
espace et avec caracter "courrier" ( esp2 dans exemple)
j' ai meme essaye avec currentX et de le positionner
en fonction de l'espacement et la forme de la zone.
Je vais continuer a bosser la dessus mais avant de
te contacter, j' ai qd meme buche dessus et cherché
sans trop de resultat car, a priori, cela semble
etre un "beau" probleme !

Je vais suivre tes conseils et voir ou ca va !

En atendant ... merci et desole de ma mauvaise demande
initiale

Amicalement
[b][b]/bJeanMarcus/b