• Initiateur de la discussion Initiateur de la discussion zozo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

zozo

XLDnaute Occasionnel
Le bonjour à tous les membres du forum,
J'ai réalisé un utilitaire pour imprimer sur des chèques.

Le problème que je rencontre au niveau du montant en lettres, est comment imprimer la 2ème ligne sans couper le dernier mot de la 1ère ligne.
La 1ère a un maximum de 62 caractères, et tout le reste sur la 2ème ligne.

L'utilisateur ne voit pas la feuille "impression" ("feuille masquée").

Mon but et que ça se fasse automatique sans que l'utilisateur n'intervienne.
Je n'arrive pas comment détecter le dernier mot si la 1ère chaîne dépasse 62 Caractères, et si c'est le cas, comment commencer à imprimer la 2ème chaîne à partir du dernier mot de la 1ère chaîne.
Merci pour toute intervention de votre part.
 

Pièces jointes

Dernière édition:
re

bon ok comme tu veux

alors tu va mettre ceci dans ton module1
VB:
Function two_line_of_string(v As Range, X As Long)
    Dim limite&, A&
    limite = v.MergeArea.Width / v.MergeArea.ColumnWidth    'nombre de caractères possibles dans une cellule  avec des colonnes fusionnées
    A = InStrRev(Mid(v.Value, 1, limite), " ")' le premier espace avant cette limite 
    Select Case X
    Case 1: two_line_of_string = Left(v.Value, A) 'x=1 la première partie
    Case 2: two_line_of_string = Mid(v.Value, A + 1, Len(v.Value))'x=2 la 2d partie
    End Select
End Function

et dans tes cellules les formules
H14 tu met = two_line_of_string(cheque!C16;1)
G15
tu met = two_line_of_string(cheque!C16;2)

resultat
Capture.JPG

😉
 
re

bon ok comme tu veux

alors tu va mettre ceci dans ton module1
VB:
Function two_line_of_string(v As Range, X As Long)
    Dim limite&, A&
    limite = v.MergeArea.Width / v.MergeArea.ColumnWidth    'nombre de caractères possibles dans une cellule  avec des colonnes fusionnées
    A = InStrRev(Mid(v.Value, 1, limite), " ")' le premier espace avant cette limite
    Select Case X
    Case 1: two_line_of_string = Left(v.Value, A) 'x=1 la première partie
    Case 2: two_line_of_string = Mid(v.Value, A + 1, Len(v.Value))'x=2 la 2d partie
    End Select
End Function

et dans tes cellules les formules
H14 tu met = two_line_of_string(cheque!C16;1)
G15
tu met = two_line_of_string(cheque!C16;2)

resultat
Regarde la pièce jointe 1042756

😉
Bonjour,
je n'ai pas su à quel niveau l'insérer.
STP, peux-tu me le faire, je t'envoi mon fichier.
Merci pour ton intervention.
 

Pièces jointes

bonjour Jacky67
VB:
Sub ImprimeCHQ()
    Dim x, c, y,chaine
    Application.ScreenUpdating = False
    With Worksheets("Impression")
        chaine = Feuil1.[c16]
        'x = Split(Feuil1.[c16], " ")
        'For Each c In x
        ' If Len(y & " " & c) < 62 Then
        'y = y & " " & c
        'End If
        'Next
        '.[h14] = Right(y, Len(y) - 1)
        '.[g15] = Mid(Feuil1.[c16], Len(y), Len(Feuil1.[c16]))

        .[h14] = chaine
        If Len(chaine) > 62 Then
            x = InStrRev(Mid(chaine, 1, 62), " ")
            .[h14] = Left(chaine, x)
            .[g15] = Mid(chaine, x + 1, Len(chaine))
        End If

        '
        .Visible = True
        '.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
        '.Visible = False
    End With
    Application.ScreenUpdating = True
End Sub
 
Bonsour®
Mais la proposition de modeste est maligne ;-)
😵 contraire de bénigne ??? ... en quoi ma proposition peut-elle faire du mal ???
encore faut-il l'employer correctement ! 😉

c'est qui le zozo ???

elle ne réclame aucun code ou calcul de césure, Excel s'occupe de tout...
je n'ai même pas touché à la présentation initiale, hormis la zone F14:K15,
hauteur de ligne et largeur de colonne inchangées
la copie d'écran est explicite !!!
 
Dernière édition:
Peux-tu m'envoyer ton test, peut-être que je l'ai mal exploité.
Il suffit de coller ça en remplacement de tes lignes :
VB:
    With Worksheets("Impression")
        x = Feuil1.[c16].Value
        If Len(x) <= 62 Then x = x & "|" Else Mid(x, InStrRev(x, " ", 62), 1) = "|"
        .[h14:H15] = Application.Transpose(Split(x, "|"))
        .Activate
    End With

@Modeste : maligne dans le sens de astucieuse bien entendu ;-)
 

Pièces jointes

Dernière édition:
Il suffit de coller ça en remplacement de tes lignes :
VB:
    With Worksheets("Impression")
        x = Feuil1.[c16].Value
        If Len(x) <= 62 Then x = x & "|" Else Mid(x, InStrRev(x, " ", 62), 1) = "|"
        .[h14:H15] = Application.Transpose(Split(x, "|"))
        .Activate
    End With

@Modeste : maligne est le féminin de malin (=astucieuse ;-) )
Merci, problème résolu par patricktoulon.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
1 K
Réponses
8
Affichages
1 K
Réponses
11
Affichages
3 K
Réponses
3
Affichages
912
Guest
G
Retour