Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

 

zozo

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

Jacky67

XLDnaute Barbatruc
Bonjour patricktoulon
Oui, oui
Ce que je voulais savoir c'est qu'avec toutes les propositions qui ont été faites et qui pour la plupart (pour ne pas dire toutes) fonctionnent, zozo ne trouve pas son bonheur.
 

patricktoulon

XLDnaute Barbatruc
re
et puis pour être honnête la chaine en exemple étant un des exemples le plus long pour ne pas couper les tranches de 3 je couperais après mille
mille etant le primer séparateur changement de tranche
la lecture est plus aisée
je dis moi .......
 

Modeste geedee

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

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
Merci, problème résolu par patricktoulon.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…