[résolu] Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

zildjian71

XLDnaute Nouveau
Bonsoir à tous,

je fais appel à vous, car depuis le debut d'après midi, je cherche un moyen pour limiter le nombre de caractere d'une cellule.

J'aimerai taper un compte rendu d'intervention et que des que la cellule franchi le cap des 70 caracteres maximum, le curseur passe à la ligne en dessous pour continuer le compte rendu.

J'aimerai avec ceci, quel e decoupe du texte, ne coupe pas un mot à deux partie.

Possible ?

J'ai essayé avec textbox, zone de texte, cellule + VBA.

Si vous avec des idées.
 
Dernière édition:

Victor21

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonjour, zildjian71,

Et merci pour le fichier joint qui nous permet de voir vos essais, et de tester nos propositions... ou pas.
Renvoyez à la ligne automatiquement, et ajustez la largeur de la colonne.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonsoir zildjian71, Victor21 :),

Un essai en VBA dans le fichier joint. Comme il n'y avait pas de fichier joint à votre demande, c'est une interprétation libre et toute personnelle de l'énoncé de la question.

Tapez au kilomètre dans une cellule de la colonne A. Quand vous validez par la touche "entrée", le texte de la cellule est mis en forme.
 

Pièces jointes

  • decouper1.xlsm
    17.6 KB · Affichages: 58
Dernière édition:

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonsoir zildjian71, Patrick, ma pomme,

J'aimerai taper un compte rendu d'intervention et que des que la cellule franchi le cap des 70 caracteres maximum, le curseur passe à la ligne en dessous pour continuer le compte rendu.

J'aimerai avec ceci, quel e decoupe du texte, ne coupe pas un mot à deux partie.

Pour que cela se passe pendant la frappe il faut une TextBox dans la feuille.

Avec sa propriété "Multiline" à True et une largeur permettant au moins 70 caractères.

Essayez-la avec ce code :

Code:
Private Sub TextBox1_Change()
Static flag As Boolean
If flag Then Exit Sub
Dim s, i%, x$, t$
s = Split(Replace(TextBox1, vbCrLf, ""))
For i = 0 To UBound(s)
  x = LTrim(t & " " & s(i))
  t = LTrim(t & " " & vbLf & s(i))
  t = IIf(Len(x) - InStrRev(x, vbLf) > 70, t, x)
Next
flag = True: TextBox1 = t: flag = False
End Sub
Bonne nuit.
 

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Re,

L'ennui de la macro précédente c'est qu'on ne peut pas faire de retour à la ligne (Ctrl+Entrée).

Alors on peut utiliser :

Code:
Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)
If Len(TextBox1) - InStrRev(TextBox1, vbCr) > 70 Then _
  TextBox1 = Application.Replace(TextBox1, InStrRev(TextBox1, " ") + 1, 0, vbLf)
End Sub
Mais bien sûr si l'on fait du copier-coller le texte ne sera pas traité...

Re bonne nuit.
 

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonjour le fil, le forum,

On peut utiliser la méthode du post #4 pour une cellule :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%, P As Range, r As Range, s, i%, x$, t$
n = 70 'nombre maximum de caractères par ligne, paramétrable
Set P = Range("B6:B" & Rows.Count) 'à adapter
Set r = Intersect(Target, P, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False = False
Application.EnableEvents = False 'désactive les événements
For Each r In r 'si entrées multiples (copier-coller)
  s = Split(RTrim(Replace(r, vbLf, " "))) 'tableau des mots
  For i = 0 To UBound(s)
    x = t & IIf(i, " ", "") & Left(s(i), n)
    t = t & vbLf & Left(s(i), n)
    t = IIf(Len(x) - InStrRev(x, vbLf) > n, t, x)
  Next
  r = t
Next
'---ajustement des lignes et colonnes---
P.WrapText = False
P.RowHeight = 10
P.ColumnWidth = 255
P.WrapText = True
P.Rows.AutoFit
P.Columns.AutoFit
Application.EnableEvents = True 'réactive les événements
End Sub
Mais bien sûr la mise en forme n'a lieu qu'après validation du texte par <Entrée>.

Aucune macro ne peut s'exécuter quand le curseur est dans la cellule (mode Edition).

Fichier joint.

Edit : par sécurité j'ai limité chaque mot à 70 caractères, comme les lignes (le séparateur est l'espace).

A+
 

Pièces jointes

  • Renvois à la ligne(1).xls
    47 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Re,

Si l'on veut pouvoir créer par Alt+Entrée plusieurs paragraphes dans une même cellule :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%, P As Range, r As Range, s1, i%, s2, x$, t$, j%
n = 70 'nombre maximum de caractères par ligne, paramétrable
Set P = Range("B6:B" & Rows.Count) 'à adapter
Set r = Intersect(Target, P, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False = False
Application.EnableEvents = False 'désactive les événements
For Each r In r 'si entrées multiples (copier-coller)
  s1 = Split(r, vbLf) 'tableau des paragraphes
  For i = 0 To UBound(s1)
    s2 = Split(RTrim(s1(i))) 'tableau des mots
    x = "": t = ""
    For j = 0 To UBound(s2)
      x = t & IIf(j, " ", "") & Left(s2(j), n)
      t = t & vbLf & Left(s2(j), n)
      t = IIf(Len(x) - InStrRev(x, vbLf) > n, t, x)
    Next j
    s1(i) = t
  Next i
  r = Join(s1, vbLf)
Next r
'---ajustement des lignes et colonnes---
P.WrapText = False
P.RowHeight = 10
P.ColumnWidth = 255
P.WrapText = True
P.Rows.AutoFit
P.Columns.AutoFit
Application.EnableEvents = True 'réactive les événements
End Sub
Cela rejoint donc le travail fait par mapomme.

Fichier (2).

A+
 

Pièces jointes

  • Renvois à la ligne plusieurs paragraphes(1).xls
    50 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Re,

Notez une différence notable entre les méthodes des posts #6 et #7.

Si l'on fait passer n de 70 à 100, la mise en forme se modifie au post #6 (après revalidation bien sûr).

Elle ne se modifie pas au post #7 car les renvois à la ligne restent tous en place.

A+
 

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Re,

L'insertion de renvois à la ligne est un cas d'école pour les amateurs de VBA.

Dans la pratique ce n'est pas d'un grand intérêt :rolleyes:

Voyez le fichier joint qui utilise une police à chasse fixe (caractères de même largeur).

Pas besoin de macro, juste un petit réglage manuel au départ.

A+
 

Pièces jointes

  • Police à chasse fixe(1).xls
    28.5 KB · Affichages: 38

zildjian71

XLDnaute Nouveau
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Merci à tous pour vos reponse rapides.

Je n'ai pas mes essai, tout simplement parce que j'ai essayer au boulot entre 12h et 13h et que je n'ai pas internet sur mon PC.
Et ce n'ai que hier soir que je me suis décider de faire appel.

le réponse #6 me satisfait presque, le decoupage s'effectue bien, mais j'aimerai que le decoupage s'effectue en changeant de cellule.

si le texte fait 150 caractere, que la cellule C6 fasse 70 caractères , C7 fasse 70 caractères et la C8 le reste.
Possible ou impossible ?
 

VIARD

XLDnaute Impliqué
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonjour zildjian71, Job75, Mapomme, Victor21 et à tous

Voici ma solution, que j'ai réalisé il y a quelque temps pour m'entrainer.
Si ça peut aider, taille caractère ajustable ainsi que leur nombre, la colonne s'adapte.
Bien sur ceci est perfectible.

A+ Jean-Paul
 

Pièces jointes

  • TexteFormulaire.xls
    63 KB · Affichages: 37
  • TexteFormulaire.xls
    63 KB · Affichages: 43
  • TexteFormulaire.xls
    63 KB · Affichages: 34

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonsoir zildjian71
(...) le réponse #6 me satisfait presque, le decoupage s'effectue bien, mais j'aimerai que le decoupage s'effectue en changeant de cellule. si le texte fait 150 caractere, que la cellule C6 fasse 70 caractères , C7 fasse 70 caractères et la C8 le reste. (...)

Une adaptation de mon précédent code dans le fichier joint.
 

Pièces jointes

  • decouper2.xlsm
    18.7 KB · Affichages: 50

job75

XLDnaute Barbatruc
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonjour zildjian71, Patrick, mapomme, le forum, [Edit] bonjour aussi à VIARD,

j'aimerai que le decoupage s'effectue en changeant de cellule.

Cette macro utilise la méthode de mon post #6 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%, r As Range, c As Range, t$, s, i&, x$
n = 70 'nombre maximum de caractères par cellule, paramétrable
On Error Resume Next
'---1ère cellule à traiter---
Set r = Intersect(Target, Range("B6:B" & Rows.Count))(1) 'à adapter
'---concaténation des textes à partir de la 1ère cellule---
For Each c In r.Resize(Rows.Count - r.Row + 1).SpecialCells(xlCellTypeConstants)
  t = t & " " & c
Next
On Error GoTo 0
If t = "" Then Exit Sub
'---analyse du texte---
t = Application.Trim(t) 'SUPPRESPACE
s = Split(t) 'tableau des mots
t = ""
For i = 0 To UBound(s)
  x = t & IIf(i, " ", "") & Left(s(i), n)
  t = t & vbLf & Left(s(i), n)
  t = IIf(Len(x) - InStrRev(x, vbLf) > n, t, x)
Next
'---restitution---
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les événements
r.Resize(Rows.Count - r.Row + 1).ClearContents 'RAZ
s = Split(t, vbLf) 'tableau des paragraphes
For i = 0 To UBound(s)
  r.Offset(i) = Trim(s(i)) 'un paragraphe par ligne
Next
Application.EnableEvents = True 'réactive les événements
Application.ScreenUpdating = True
End Sub
Noter que les renvois à la ligne sont conservés dans les textes, on peut donc en ajouter.

Fichier joint.

A+
 

Pièces jointes

  • Renvois sur nouvelles lignes(1).xls
    51 KB · Affichages: 67
Dernière édition:

VIARD

XLDnaute Impliqué
Re : Limiter à 70 caractere ou moins une cellule et allez à la ligne si > 70.

Bonjour à toutes et tous

Voilà je redéterre le sujet, comme j'ai trouvé que l'on pouvait faire mieux.
j'ai adjoint 2 tests, l'un normal limite du nombre de caractère par ligne,
l'autre avec possibilité de paragraphe avec le symbole (#).
De plus j'ai ajouté dans un module standard la possibilité de faire ressortir en gras un mot.

A+ Jean-Paul
 

Pièces jointes

  • TexteFormulaire.xls
    99 KB · Affichages: 28
  • TexteFormulaire.xls
    99 KB · Affichages: 53
  • TexteFormulaire.xls
    99 KB · Affichages: 42

Discussions similaires