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:

sousou

XLDnaute Barbatruc
bonjour
Etant donné que tes macros sont protégé, voici deux formule personnalisé sue tu pourrais intégrer dans ton fichier
coupe1() fabrique la ligne 1
coupe2() fabrique la seconde
 

Pièces jointes

  • coupe.xlsm
    14.7 KB · Affichages: 24

zozo

XLDnaute Occasionnel
Bonjour sousou,
Je m'excuse, je viens de désactiver la macro, je vous renvoi le fichier, la macro ne sert que pour l'impression.
La coupure se joue sur la feuille impression, je n'ai pas su où mettre la fonction envoyée.
 

Pièces jointes

  • EMISSION CHEQUE.xlsm
    24.3 KB · Affichages: 29

zozo

XLDnaute Occasionnel
Re,
Peut-être que je me suis mal exprimé.
La feuille "impression", l'utilisateur ne la voit pas ("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.
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Re,
Peut-être que je me suis mal exprimé.
La feuille "impression", l'utilisateur ne la voit pas ("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.
Bourjour,
Essaye ceci
Il faudra agrandir la ligne H14
VB:
Sub ImprimeCHQ()
    Dim x, c, y
    Application.ScreenUpdating = False
    With Worksheets("Impression")
        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) & Chr(10) & Mid(Feuil1.[c16], Len(y), Len(Feuil1.[c16]))
        '
        .Visible = True
        .PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
        .Visible = False
    End With
    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

zozo

XLDnaute Occasionnel
Bourjour,
Essaye ceci
Il faudra agrandir la ligne H14
VB:
Sub ImprimeCHQ()
    Dim x, c, y
    Application.ScreenUpdating = False
    With Worksheets("Impression")
        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) & Chr(10) & Mid(Feuil1.[c16], Len(y), Len(Feuil1.[c16]))
        '
        .Visible = True
        .PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
        .Visible = False
    End With
    Application.ScreenUpdating = True
End Sub
Bonjour,
Malheureusement, ce n'est pas le résultat que je cherche, sachant que le montant est variable, et les zones d'impression sont relatives au zones du chèque qu'on utilise et que je doit respecter.
Merci
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®;)
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.
il s'agit ici d'un rare cas ou la fusion de cellule devient utile ...:cool:
fusion de F14 à K15,
renvoie à la ligne auto
alignement haut et gauche
1570373467366.png
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

VB:
x = Feuil1.[c16].Value
If Len(x) <= 62 Then x = x & "|" Else Mid(x, InStrRev(x, " ", 62), 1) = "|"
.[h14:H15] = Application.Transpose(Split(x, "|"))
Mais la proposition de modeste est maligne ;-)
eric
 
Dernière édition:

sousou

XLDnaute Barbatruc
Re,
Peut-être que je me suis mal exprimé.
La feuille "impression", l'utilisateur ne la voit pas ("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.
il te faut simplement la masquée la fonction coupe2() fait le travail
 

patricktoulon

XLDnaute Barbatruc
Bonjour
je vois pas le page printarea du chèque a l’aperçu le format ne correspond a aucun chèques

sinon oui la fusion des 2 cellules est requise
le mieux c'est que tu photocopie un cheques et que tu le mette en fond d'écran dans excel et que tu adapte tes (largeur hauteur) ligne et colonne par rapport au fond d’écran tu pourra l'enlever ensuite
et pour info ta fonction xla nous l'avons pas donc des que l'on a touché ben plus de conversion
j'ai donc mis ma fonction perso nBlettre_methode_globale très concentrée a la place

je la donne pour ceux qui voudraient t'aider et qui eux aussi n'ont pas ton xla

pour info dans cette fonction j'ai fait en sorte que l'orthographe soit respecté ;)


et la formule c'est
=nBlettre_methode_globale(K11;"Euro";1)
et dans les lignes fusionnées dans le sheets d'impression c'est =cheque!C16

en vba on l'utilisera comme ceci
Code:
msgbox(nBlettre_methode_globale("1998525,99";"Euro";true)


ma fonction perso

VB:
Option Explicit

Function nBlettre_methode_globale(nombres As String, Optional ByVal sstr As String = "virgule", Optional ByVal finance As Boolean = False)
    Dim en_dec(2), unit1, unit10, ms, cms As Long, decs As Long, ex As Long, ddd As String, centi As String, e As Long, i As Long, a As Long, dix As Long
    Dim nombre As String, u As String, c As String, ct As String, et As String, ss As String, neg As Boolean
    unit1 = Array("", " Un", " Deux", " Trois", " Quatre", " Cinq", " Six", " Sept", " Huit", " Neuf", " Dix", " Onze", " Douze", " treize", " Quatorze", " Quinze", " Seize", " Dix-Sept", " Dix-Huit", " Dix-Neuf", " cent", " zéro")
    unit10 = Array("", " dix", " vingt", " trente", " quarante", " cinquante", " soixante", " soixante-dix", " quatre-vingt", " quatre-vingt-dix", " cent")
    ms = Array("", " sextillion", " Quintillion", " Quatrillion", " Trillion", " Billiard", " Billion", " milliard", " million", " mille", ""): cms = UBound(ms)

    If Left(nombres, 1) = "-" Then nombres = Mid(nombres, 2, Len(nombres)): neg = True
    decs = 0: nombres = Replace(nombres, ".", ","): en_dec(0) = Split(nombres, ",")(0): If InStr(nombres, ",") > 0 Then en_dec(1) = Split(nombres, ",")(1): decs = 1    'on separe le decimal de l'entier
    If Len(en_dec(0)) Mod 3 <> 0 Then en_dec(0) = Application.Rept("0", 3 - Len(en_dec(0)) Mod 3) & en_dec(0)    'on formate l'entier a 3 chiffre par tranche
    If decs = 1 Then en_dec(1) = Right("00" & Round(Val("0." & en_dec(1)), 2) * 100, 3)  ' NOUVELLE METHODE POUR ADAPTER LE DECIMAL on formate a 3 chiffres
    ex = cms - (Len(en_dec(0)) / 3) + 1    ' index de point de depart des expressions dans l'array ms
    ddd = IIf(Val(en_dec(0)) > 999000 And Val(Right(en_dec(0), 6)) = 0, IIf("aAeEiIoOuUyY" Like "*" & Left(sstr, 1) & "*", " d' ", " de"), " ")
    centi = IIf(sstr <> "dollar", " centime", " cent")
    If sstr = "virgule" Then centi = ""
    sstr = IIf(Val(en_dec(0)) > 1, sstr & "s", sstr)
    If decs = 1 Then centi = IIf(Val(en_dec(1)) > 1, centi & "s", centi)
    For e = 0 To decs
        For i = 1 To Len(en_dec(e)) Step 3
            a = ex + Round(i / 3)    'position actuelle de ms
            nombre = Mid(en_dec(e), i, 3)    ' la tranche
            dix = Mid(nombre, 2, 1): u = Right(nombre, 1): c = Left(nombre, 1): If c > 1 Then c = c: ct = unit1(20) & IIf(Val(dix & u) > 0, "", "s") Else: ct = "": If c = 1 Then c = 20
            If dix = 1 Or dix = 7 Or dix = 9 And Right(u, 1) > 0 Then dix = dix - 1: u = u + 10   'on corrige le 1,7,9
            If dix > 1 And dix <> 8 And Right(u, 1) = 1 Then et = " et" Else: If dix = 0 Or u = 0 Then et = "" Else et = "-"  ' on accorde de 1 a 99

            If u = 0 Then If dix = 8 Then If ms(a) = " mille" Then et = "" Else et = "s"     'le s a quatre-vingt tout seul

            If nombre = 0 And Len(en_dec(0)) = 3 Then u = 21: dix = 0    ' le zéro si l'entier vaut 0 tout simplement
            If nombre = 0 And i <> 1 Then a = 0
            If nombre = 1 And i = 1 And a = cms - 1 Then u = 0
            If e = 0 And nombre > 1 And a < cms - 1 Then ss = "s" Else ss = ""
            nBlettre_methode_globale = nBlettre_methode_globale & Replace(unit1(c) & ct & unit10(dix) & et & unit1(u), "- ", "-") & IIf(e = 0, ms(a), "") & ss
        Next i
        If finance = False Then
            nBlettre_methode_globale = nBlettre_methode_globale & IIf(e = 0 And decs = 1, " virgule ", "")
        Else
            nBlettre_methode_globale = nBlettre_methode_globale & IIf(e = 0 And decs = 1, ddd & " " & sstr & " et ", IIf(decs = 0, " " & sstr, "")) & IIf(e = 1, centi, "")
        End If
    Next e
    If neg = True Then nBlettre_methode_globale = "moins " & nBlettre_methode_globale
End Function

cela dit je réitère mon conseil a savoir déterminer ta plage d'impression en fonction de la vrai forme du chèque
;)
 
Dernière édition:

zozo

XLDnaute Occasionnel
Bonjour
je vois pas le page printarea du chèque a l’aperçu le format ne correspond a aucun chèques

sinon oui la fusion des 2 cellules est requise
le mieux c'est que tu photocopie un cheques et que tu le mette en fond d'écran dans excel et que tu adapte tes (largeur hauteur) ligne et colonne par rapport au fond d’écran tu pourra l'enlever ensuite
et pour info ta fonction xla nous l'avons pas donc des que l'on a touché ben plus de conversion
j'ai donc mis ma fonction perso nBlettre_methode_globale très concentrée a la place

je la donne pour ceux qui voudraient t'aider et qui eux aussi n'ont pas ton xla

pour info dans cette fonction j'ai fait en sorte que l'orthographe soit respecté ;)


et la formule c'est

et dans les lignes fusionnées dans le sheets d'impression c'est =cheque!C16

en vba on l'utilisera comme ceci
Code:
msgbox(nBlettre_methode_globale("1998525,99";"Euro";true)


ma fonction perso

VB:
Option Explicit

Function nBlettre_methode_globale(nombres As String, Optional ByVal sstr As String = "virgule", Optional ByVal finance As Boolean = False)
    Dim en_dec(2), unit1, unit10, ms, cms As Long, decs As Long, ex As Long, ddd As String, centi As String, e As Long, i As Long, a As Long, dix As Long
    Dim nombre As String, u As String, c As String, ct As String, et As String, ss As String, neg As Boolean
    unit1 = Array("", " Un", " Deux", " Trois", " Quatre", " Cinq", " Six", " Sept", " Huit", " Neuf", " Dix", " Onze", " Douze", " treize", " Quatorze", " Quinze", " Seize", " Dix-Sept", " Dix-Huit", " Dix-Neuf", " cent", " zéro")
    unit10 = Array("", " dix", " vingt", " trente", " quarante", " cinquante", " soixante", " soixante-dix", " quatre-vingt", " quatre-vingt-dix", " cent")
    ms = Array("", " sextillion", " Quintillion", " Quatrillion", " Trillion", " Billiard", " Billion", " milliard", " million", " mille", ""): cms = UBound(ms)

    If Left(nombres, 1) = "-" Then nombres = Mid(nombres, 2, Len(nombres)): neg = True
    decs = 0: nombres = Replace(nombres, ".", ","): en_dec(0) = Split(nombres, ",")(0): If InStr(nombres, ",") > 0 Then en_dec(1) = Split(nombres, ",")(1): decs = 1    'on separe le decimal de l'entier
    If Len(en_dec(0)) Mod 3 <> 0 Then en_dec(0) = Application.Rept("0", 3 - Len(en_dec(0)) Mod 3) & en_dec(0)    'on formate l'entier a 3 chiffre par tranche
    If decs = 1 Then en_dec(1) = Right("00" & Round(Val("0." & en_dec(1)), 2) * 100, 3)  ' NOUVELLE METHODE POUR ADAPTER LE DECIMAL on formate a 3 chiffres
    ex = cms - (Len(en_dec(0)) / 3) + 1    ' index de point de depart des expressions dans l'array ms
    ddd = IIf(Val(en_dec(0)) > 999000 And Val(Right(en_dec(0), 6)) = 0, IIf("aAeEiIoOuUyY" Like "*" & Left(sstr, 1) & "*", " d' ", " de"), " ")
    centi = IIf(sstr <> "dollar", " centime", " cent")
    If sstr = "virgule" Then centi = ""
    sstr = IIf(Val(en_dec(0)) > 1, sstr & "s", sstr)
    If decs = 1 Then centi = IIf(Val(en_dec(1)) > 1, centi & "s", centi)
    For e = 0 To decs
        For i = 1 To Len(en_dec(e)) Step 3
            a = ex + Round(i / 3)    'position actuelle de ms
            nombre = Mid(en_dec(e), i, 3)    ' la tranche
            dix = Mid(nombre, 2, 1): u = Right(nombre, 1): c = Left(nombre, 1): If c > 1 Then c = c: ct = unit1(20) & IIf(Val(dix & u) > 0, "", "s") Else: ct = "": If c = 1 Then c = 20
            If dix = 1 Or dix = 7 Or dix = 9 And Right(u, 1) > 0 Then dix = dix - 1: u = u + 10   'on corrige le 1,7,9
            If dix > 1 And dix <> 8 And Right(u, 1) = 1 Then et = " et" Else: If dix = 0 Or u = 0 Then et = "" Else et = "-"  ' on accorde de 1 a 99

            If u = 0 Then If dix = 8 Then If ms(a) = " mille" Then et = "" Else et = "s"     'le s a quatre-vingt tout seul

            If nombre = 0 And Len(en_dec(0)) = 3 Then u = 21: dix = 0    ' le zéro si l'entier vaut 0 tout simplement
            If nombre = 0 And i <> 1 Then a = 0
            If nombre = 1 And i = 1 And a = cms - 1 Then u = 0
            If e = 0 And nombre > 1 And a < cms - 1 Then ss = "s" Else ss = ""
            nBlettre_methode_globale = nBlettre_methode_globale & Replace(unit1(c) & ct & unit10(dix) & et & unit1(u), "- ", "-") & IIf(e = 0, ms(a), "") & ss
        Next i
        If finance = False Then
            nBlettre_methode_globale = nBlettre_methode_globale & IIf(e = 0 And decs = 1, " virgule ", "")
        Else
            nBlettre_methode_globale = nBlettre_methode_globale & IIf(e = 0 And decs = 1, ddd & " " & sstr & " et ", IIf(decs = 0, " " & sstr, "")) & IIf(e = 1, centi, "")
        End If
    Next e
    If neg = True Then nBlettre_methode_globale = "moins " & nBlettre_methode_globale
End Function

cela dit je réitère mon conseil a savoir déterminer ta plage d'impression en fonction de la vrai forme du chèque
;)
Bonjour,
Concernant notre chèque, c'est un chèque Banque Extérieur d'Algérie (BEA).
Les 2 ligne du chèque sont respectées par rapport au chèque, à condition que j'intervienne personnellement pour éviter que la coupure du dernier mot de la 1ère ligne.

Je cherche : Comment savoir si le dernier mot de la 1ère ligne n'est pas coupé, si c'est le cas, je dois éliminer l'intégralité de ce mot et l'insérer au début de la 2ème ligne.
Merci pour vos efforts
 

Discussions similaires

Statistiques des forums

Discussions
312 271
Messages
2 086 686
Membres
103 370
dernier inscrit
pasval