Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

En VB, le mimétisme à ses limites...

4 réponses
Avatar
JMM21
Bonjour à toutes et à tous,

Dans un document comprenant exclusivement
des tableaux/formulaires (protégé), je souhaitais
inclure une zone de commentaires pouvant contenir
plusieurs lignes.
Accéder à un champ de formulaire pour y écrire
une prose n'est pas du plus aisé.
J'ai donc copieusement "pompé" le modèle de
formulaire d'Anacoluthe.
J'y suis presque…

Deux gros problèmes persistent
et je ne m'en sors pas:

1) comment limiter en caractères la TextBox
afin qu'elle corresponde à la taille du signet
de réception présent dans un tableau ?
2) comment éviter le plantage de la macro dans
certains cas que je n'arrive pas à reproduire systématiquement

Pour plus de clarté j'ai posté le modèle,
avec le message d'erreur et le code incriminé

http://cjoint.com/?lApoxSHhnj

Merci d'avance pour vos lumières.

On a beau se jurer qu'on n'agira jamais comme sa mère,
un jour ou l'autre, l'inexorable mimétisme se met en marche.
[Christiane Rancé]

--
[Jmm21]
☺♂

4 réponses

Avatar
Anacoluthe
Bonjour !

'JMM21' nous a écrit ...
Dans un document comprenant exclusivement
des tableaux/formulaires (protégé), je souhaitais
inclure une zone de commentaires pouvant contenir
plusieurs lignes.
Accéder à un champ de formulaire pour y écrire
une prose n'est pas du plus aisé.
J'ai donc copieusement "pompé" le modèle de
formulaire d'Anacoluthe.
J'y suis presque…
Deux gros problèmes persistent
et je ne m'en sors pas:
1) comment limiter en caractères la TextBox
afin qu'elle corresponde à la taille du signet
de réception présent dans un tableau ?


Limiter d'office la chaîne à une certaine longueur
- IF len(C) > 100 THEN C = left(C,100) - par exemple
ou donner une valeur fixe à la ligne de tableau

2) comment éviter le plantage de la macro dans
certains cas que je n'arrive pas à reproduire systématiquement


ça c'est un peu plus vicieux : à chaque saut de ligne dans votre
textbox la chaîne s'allonge d'un caractère 10 de trop par rapport
à une chaine normale où vbCR ne représente qu'un seul caractère 13.
Le décalage finit par faire sortir le signet des limites du document.
Il faut 'nettoyer' TextBox1.Text des chr(10) parasites

Merci d'avance pour vos lumières.


Anacoluthe
« Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière. »
- Philippe GELUCK

Avatar
JMM21
Un grand merci à "Anacoluthe" qui a
promptement et efficacement répondu :

1) comment limiter en caractères la TextBox
afin qu'elle corresponde à la taille du signet
de réception présent dans un tableau ?


Limiter d'office la chaîne à une certaine longueur
- IF len(C) > 100 THEN C = left(C,100) - par exemple
ou donner une valeur fixe à la ligne de tableau


Néanmoins, l'utilisateur peut engranger la Bible dans la TextBox
sans être bloqué.
Mais bon, "il" peut faire attention aussi...



2) comment éviter le plantage de la macro dans
certains cas que je n'arrive pas à reproduire systématiquement


ça c'est un peu plus vicieux : à chaque saut de ligne dans votre
textbox la chaîne s'allonge d'un caractère 10 de trop par rapport
à une chaine normale où vbCR ne représente qu'un seul caractère 13.
Le décalage finit par faire sortir le signet des limites du document.
Il faut 'nettoyer' TextBox1.Text des chr(10) parasites



Sur vos (sur tes) conseils, j'ai mis ceci

Public Sub RemplirSignet(S As String, C As String)
C = Replace(C, vbLf, "")
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
If Len(C) > 100 Then C = Left(C, 100)
ActiveDocument.Bookmarks(S).Range.Text = C
ActiveDocument.Bookmarks.Add Name:=S, _
Range:¬tiveDocument.Range(Place, Place + Len(C))
End Sub

Qu'en pensez-vous (penses-tu) ?

Merci


[Jmm21]
☺♂


Avatar
Anacoluthe
Bonjour !

'JMM21' nous a écrit ...
Néanmoins, l'utilisateur peut engranger la Bible dans la TextBox
sans être bloqué.


Sauf si on renseigne la propriété MaxLength de textbox1...
C'est une autre méthode pour limiter la saisie !

Public Sub RemplirSignet(S As String, C As String)
C = Replace(C, vbLf, "")
Dim Place As Long
Place = ActiveDocument.Bookmarks(S).Range.Start
If Len(C) > 100 Then C = Left(C, 100)
ActiveDocument.Bookmarks(S).Range.Text = C
ActiveDocument.Bookmarks.Add Name:=S, _
Range:¬tiveDocument.Range(Place, Place + Len(C))
End Sub


Ça me semble bon. Perso, j'aurais placé les lignes modifiant C
(2ème et 5ème) dans le CommandButton1_Click() sans rien changer
à la proc RemplirSignet, mébon c'est un détail ;-)

Bonne continuation !

Anacoluthe
« Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière. »
- Philippe GELUCK

Avatar
JMM21
'JMM21' avait écrit ...
Néanmoins, l'utilisateur peut engranger la Bible dans la TextBox
sans être bloqué.




Sauf si on renseigne la propriété MaxLength de textbox1...
C'est une autre méthode pour limiter la saisie !




avait répondu Anacoluthe


J'avais également lancé cette doléance chez nos amis Exceliens.

Daniel.C a proposé ceci :

Private Sub TextBox1_Change()
If Me.TextBox1.LineCount > 3 Then
MsgBox "Nombre de lignes plus grand que trois"
End If
End Sub

C'est très bien !!!

Encore merci
Cordialement

A+
--
[Jmm21]
☺♂