Césure d'un texte selon conditions

Résolu/Fermé
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 14 avril 2016 à 12:39
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 - 14 avril 2016 à 15:00
Bonjour,

Voilà le souci auquel je suis confronté :

Dans une application comptable je convertis un nombre en texte, par ex. : "1 998,28" devient "Mille neuf cents quatre-vingt-dix-huit € et vingt-huit centimes".
D'aucun aura compris que cette application est destinée à remplir automatiquement des chèques pré-imprimés... ;)

Tout ce qui concerne la conversion d'un nombre en lettres, pas de problème, ça fonctionne nickel !

Là où je butte maintenant, c'est de réaliser la césure de mon texte s'il dépasse un certain nombre de caractères, sachant que :
- le nombre maximum de caractères pouvant s'afficher sur la ligne est de 66,
- que la césure ne doit se faire que si le caractère rencontré est un espace " " ou un tiret "-"
- donc, par déduction et pour ne pas couper un mot, il ne faut pas faire de césure si le caractère rencontré est une lettre entre a et z. Dans ce cas, il convient d'aller au caractère précédent pour vérifier s'il s'agit d'une lettre entre a et z ou d'un espace ou d'un tiret...
- enfin, une fois la césure réalisée, compléter la seconde ligne du chèque avec le reste du texte !

J'ai cherché un peu partout sans trouver, j'ai fait des essais mais ne suis pas assez (encore) calé en VBA pour coder cela de façon rapide et aisée...

Quelqu'un/e pourrait me donner une piste ?

Merci d'avance !


1 réponse

Bonjour,

Cette fonction peut convenir s'il n'y a pas de majuscules en milieu de phrase
Function cesure(txt As String, n As Integer) As Integer
If n > Len(txt) Then
cesure = Len(txt)
Else
cesure = n
While Mid(txt, cesure, 1) >= "a" And Mid(txt, cesure, 1) <= "z"
cesure = cesure - 1
Wend
End If
End Function


pour essayer
Sub test()
Dim texte As String
Dim cs As Integer, L1 As String, L2 As String
texte = "Mille neuf cents quatre-vingt-dix-huit € et vingt-huit centimes"

'appel à la fonction césure
cs = cesure(texte, 62) 'ici réglé à 62 maxi

MsgBox "césure à " & cs
L1 = Mid(texte, 1, cs)
L2 = Mid(texte, cs + 1, Len(texte) - cs)
MsgBox L1 & Chr(10) & L2
End Sub
0
Nospam54 Messages postés 152 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 15 novembre 2017 13
14 avril 2016 à 15:00
Bonjour Mosca,

Merci pour ce code, il fonctionne parfaitement ! J'avais bien saisi qu'il conviendrait de créer une fonction, mais entre l'idée et la réalisation... :)

Mon appli va pouvoir être utilisée à 100% !
0