Bonjour,

J'utilise au travail un petit programme me permettant de saisir dans un commentaires la liste d'actions que j'ai réalisé.
Ce commentaire est limité en nombre de caractère (250)
Je cherche depuis un moment à réaliser une fonction qui permette à stocker dans le presse papier le contenu d'une variable et de le décomposer en plusieurs commentaires de - de 250 caractères.
Par principe j'utilise une fonction personnelle qui coupe à partir de 224 caractères au premier espace disponible.
J'ai définit 10 commentaires possibles.

Ma première fonction fonctionne très bien jusqu'à 2 commentaires mais elle déconne après, dont en voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
Sub contactosr(interloc As String, contenu As String)
 
a = Len(contenu) 'compte le nombre de caractère du contact - max 250
 
If a > 249 Then
 
    liste = contacts(contenu)
    b = liste(1)
    For c = 1 To b
        d = c + 1
 
        inter1 = interloc & " " & c & "/" & b ' interlocuteur et ajouter numero / nombre de contacts
        MyData.SetText inter1
        MyData.PutInClipboard
        Load contact
            contact.Image3.Visible = True
            contact.Label1.Visible = True
            contact.Label5.Caption = inter1
        contact.Show vbModal
 
        Unload contact
 
        MyData.SetText liste(d)
        MyData.PutInClipboard
 
        Load contact
            contact.Image2.Visible = True
            contact.Label2.Visible = True
            contact.Label5.Caption = liste(d)
        contact.Show vbModal
 
        Unload contact
    Next c
 
Else
 
    MyData.SetText interloc
    MyData.PutInClipboard
    Load contact
        contact.Image3.Visible = True
        contact.Label1.Visible = True
        contact.Label5.Caption = interloc
    contact.Show vbModal
 
    Unload contact
 
    MyData.SetText contenu
    MyData.PutInClipboard
    Load contact
        contact.Image2.Visible = True
        contact.Label2.Visible = True
        contact.Label5.Caption = contenu
    contact.Show vbModal
 
    Unload contact
 
End If
 
End Sub
 
Function contacts(contens As String)
 
    '************************* LIMITER A 10 CONTACTS ***************************************
       '------- procedure pour scinder la requete -------------
    'La chaine sera scindée si sa longueur est supérieure à 80 caractères
    Dim requete(10) As String
    Dim compteu As Integer
    Dim compter As Integer
    Dim nombcont As Single
    Dim debut As Integer
    Dim debus As Integer
 
 
    If Len(contens) > 249 Then
        nombcont = (Len(contens) / 250)                                 'nombre de contacts
        If nombcont > Int(nombcont) Then nombcont = Int(nombcont) + 1   'arrondi au nombre supérieur si résultat division pas un nombre entier
        requete(1) = nombcont                                           'rentre dans le 1er argument le nombre de contact
        debut = InStr(224, contens, " ")                                'définit la fin du contact
        requete(2) = Left(contens, debut)                               'récupère le 1 er contact
        If nombcont > 1 Then
            For compteu = 2 To nombcont                                 'boucle enregistre les autres contact de 2 à infini
                compter = compteu + 1
                fin = debut + 224
                fin = InStr(fin, contens, " ")
                If fin = 0 Then fin = Len(contens)
                requete(compter) = Mid(contens, debut, fin)
                debut = debut + fin
            Next compteu
        End If
    End If
    contacts = requete
 
End Function
J'ai réécrit le module "contacts" qui est celui qui pose problème.

En voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Function contacts(contens As String)
 
    '************************* LIMITER A 10 CONTACTS ***************************************
       '------- procedure pour scinder la requete -------------
    'La chaine sera scindée si sa longueur est supérieure à 249 caractères
    Dim requete(10) As String
    Dim compteu As Integer
    Dim compter As Integer
    Dim nombcarac As Single
    Dim debut As Integer
    Dim debus As Integer
 
 
nombcarac = Len(contens)
If nombcarac > 249 Then
    requete(1) = 1                                          'rentre dans le 1er argument le nombre de contact
    debut = InStr(224, contens, " ")
    requete(2) = Left(contens, debut)
    If debut < nombcarac Then
        For compteu = 2 To 10                               'boucle enregistre les autres contact de 2 à 10
            compter = compteu + 1
            If debut + 249 > nombcarac Then                 'Création dernier contact et sorti de la boucle une fois tout le texte passé
                requete(compter) = Mid(contens, debut, nombcarac)
                requete(1) = compteu
                Exit For
            Else
                fin = InStr(debut + 224, contens, " ")          'recherche le numéro de lettre du point de sorti du contact
                requete(compter) = Mid(contens, debut, fin)     'saisi dans variable requete le texte
                requete(1) = compteu                            'augmente de +1 le nombre de contacts
                debut = fin                                     'saisi le numéro point de départ du prochain contact
                fin = 0
            End If
        Next compteu
    End If
End If
 
contacts = requete
 
End Function
Mon soucis est que l'avant dernier commentaires copie l'ensemble du texte restant.
Pourtant mon code fonctionne. J'ai surveillé les variables qui comptabilisent les données.

Voici le texte que j'ai utilisé pour mon essai :

"ce jour sans mesure cette infinité de possibilités de colères de mensonges et cette avalanche d'amours qui ne cesse de tarabuster les pirates sont de sortie et pourtant il paraît que ce n'est pas l'issue la plus secourable peut-on pourra-t-on un jour en finir dans la poussière des carlingues la rouille des guimbardes des tréteaux interminables comme ce très long texte où personne ne voit du feu où personne ne voit goutte où personne ne voit clair où il n'y a personne pour sauver son voisin pas un mot pour en rattraper l'autre pas un orgue pour mesurer l'infinité du temps qui passe pas un violon pour nous aider à grimper à la cime des ifs et sur ces dolmens rassemblés comme dans un jeu de cartes un très long texte s'avance et se déploie avec la sûreté pierreuse des dolmens la voilure des stèles la douceur ombrageuse des ifs dont les petites boules rouges d'une netteté aussi sidérante qu'elles sont minuscules sont comme des lampions funèbres un très long texte résonne rebondit ou s'éternise jusqu'à ce que la note tenue sous les ifs comme une mélodie silencieuse effraie même les autours les éperviers et même le busard en maraude à tel point que nous nous retrouvons tous vous et moi à déclamer des lambeaux de ce très long texte debout ou accroupis sur les lourdes pierres qui couvrent depuis des millénaires les"

Il produit 6 contacts.
Observez bien le contenu de chacun des contacts, je retrouve le contenu de la fin du texte dans les 2 derniers contact et je ne comprends pas pourquoi ?

Il faut un forms nommé contact pour faire fonctionner le module "contactosr".
Je peux créer un fichier test et le mettre à disposition si nécessaire.


Merci pour votre aide,