XL 2010 Chèque

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

  • EMISSION CHEQUE.xlsm
    24.3 KB · Affichages: 65
Dernière édition:

patricktoulon

XLDnaute Barbatruc
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

;)
 

zozo

XLDnaute Occasionnel
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

  • EMISSION CHEQUE PROFESSIONNEL.xlsm
    24.3 KB · Affichages: 21

patricktoulon

XLDnaute Barbatruc
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
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Mais la proposition de modeste est maligne ;-)
o_O 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:

eriiic

XLDnaute Barbatruc
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

  • EMISSION CHEQUE).xlsm
    25.6 KB · Affichages: 12
Dernière édition:

zozo

XLDnaute Occasionnel
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé