écrire un STRING sur deux lignes [Résolu]

Signaler
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014
-
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

J'essaye de coder un petit programme d'impression de chèque mais je rencontre un problème:
si le montant en lettre dépasse 45 caractères, il faut découper le string sur deux lignes car une ligne ne peux supporter que 45 caractères sur le chèque.

Quelqu'un peut m'aider??

Merci

8 réponses

Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

Ce code normalement doit gérer les deux possibilités:

 Dim chain1 As String
            Dim sChaine As String
            Dim chain2 As String
            Dim chain3 As String
            Dim split As Integer
            Dim occ_espace As Integer
            Dim occ_tiret As Integer

            sChaine = Resultat.Text
            Split = Len(sChaine) / 45
            chain1 = Mid$(sChaine, 1, 45)

            occ_espace = InStrRev(chain1, " ")
            occ_tiret = InStrRev(chain1, "-")
            If occ_espace > occ_tiret Then
                chain2 = Mid$(chain1, 1, occ_espace)
                chain3 = Mid$(sChaine, occ_espace + 1, 80)
            Else
                chain2 = Mid$(chain1, 1, occ_tiret)
                chain3 = Mid$(sChaine, occ_tiret + 1, 80)
            End If
            


            MsgBox(chain2)
            MsgBox(chain3)
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

en faite j'ai réussi à trouver un astuce qui est la suivante:

sChaine = Resultat.Text
            Split = Len(sChaine) / 45
            chain1 = Mid$(sChaine, 1, 45)
            chain2 = Mid$(sChaine, 46, 80)
            MsgBox(chain1)
            MsgBox(chain2)


Mais il faut contrôler quand couper "sChaine" de telle façon à ne pas avoir un chiffre qui est couper en deux lignes :

"neuf" # "ne-uf"
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bonjour,
Ton problème est peut-être plus compliqué que ce que tu penses :
Il ne s'agit pas seulement de "couper" et ajouter un retour-charriot au 45ème caractère.
Il faut encore vérifier que la coupure se fait à un endroit "acceptable".
Cela commence par une réflexion sur l'algo ou simplement le raisonnement à tenir en langage naturel pour savoir où et comment "couper".
Qu'as-tu commencé dans ce sens ('hors développement) ?
Quel est ton algo ou ton raisonnement ?
Commence par ce point (hors développement, encore une fois) et je te promets que je t'aiderai alors, sur le vu de tes efforts de réflexion.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

Merci bien,
ce que je pense est que :
1- la coupure doit se faire lors de la trouvaille d'un espace (déjà je m'assure qu'un mot est fini)
2-je dois vérifier l'emplacement de cet espace à ce qu'il soit le plus proche possible de la 45ème emplacement
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Mets cela en algo ou en langage naturel, s'il te plait.
Car tu te contentes là de dire ce que tu voudrais, "dans la foulée", mais sans dire par quel mécanisme logique ! Et là il n'y a pas d'effort fait !
J'appelle toutefois ton attention sur le fait
- qu'il ne suffit pas de penser aux espaces (réfléchis, au lieu de te précipiter). Les nombres en lettres comportent également d'autres possibilités de "coupures".... Lezsquelles ? ===>> il faut pour cela d'abord comprendre comment, en français, on écrit les nombres en lettres (quatre-vingt, par exemple).
- que :
je dois vérifier l'emplacement de cet espace à ce qu'il soit le plus proche possible de la 45ème emplacement

est très loin d'être satisfaisant ! un 47ème caractère "espace" peut être plus proche du 45ème, mais "déborde" déjà ta limite de 45 !*
Prends ton temps, au lieu de te précipiter, et reviens avec du logique complet et bien pensé
___________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
152
Date d'inscription
samedi 11 novembre 2006
Statut
Membre
Dernière intervention
5 décembre 2014

Je te demande ton avis à propos de ce code:

Dim chain1 As String
            Dim sChaine As String
            Dim chain2 As String
            Dim chain3 As String
            Dim split As Integer
            Dim occ_espace As Integer

            sChaine = Resultat.Text
            Split = Len(sChaine) / 45
            chain1 = Mid$(sChaine, 1, 45)
            occ_espace = InStrRev(chain1, " ")
            chain2 = Mid$(chain1, 1, occ_espace)
            chain3 = Mid$(sChaine, occ_espace + 1, 80)
            MsgBox(chain2)
            MsgBox(chain3)


Mais il ne gère que l'espace pour le moment
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Bravo

Mais enlève ces deux lignes qui ne servent à tien :

Dim split As Integer
et
Split = Len(sChaine) / 45

D'autant que Split est un mot réservé !

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
220
Lis quand même le MP que je viens de t'adresser à propos d'un autre aspect.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP