limiter le nombre de caractères.

vince51

XLDnaute Nouveau
bonjour à tous,

après avoir visité le forum en long, en large et en travers, j ai décidé de prendre les devants pour trouver une réponse.
j'ai un fichier qui me sert à faire du publipostage. les normes de la poste limitant à 38 caractères par ligne, je souhaitera :

-limiter ne nombre de caractères à 38 par cellule (données/validation ne me convient pas)
-que lorsque je dépasse les 38 caractères ca passe dans la colonne suivante
-et dernière contrainte que les mots ne soient pas coupés et que le mot passe donc dans la colonne suivante plutôt que d'être coupé au 38eme caractère.

le problème c'est que je n'y connais rien aux macros. donc j'apprecierai si quelqu'un a un peu de temps à me consacrer. merci d'avance.
 

mromain

XLDnaute Barbatruc
Re : limiter le nombre de caractères.

bonjour et bienvenu,

voici un code liée à la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim maxLen As Integer
maxLen = 38
If Len(Target.Value) > maxLen Then
    Target.Offset(0, 1).Value = Mid(Target.Value, maxLen + 1, Len(Target.Value) - maxLen) & Target.Offset(0, 1).Value
    Target.Value = Mid(Target.Value, 1, maxLen)
End If
End Sub

à tester...

a+
 

vince51

XLDnaute Nouveau
Re : limiter le nombre de caractères.

j'ai essayé mais aucun résultat...
je t envoie un bout de mon fichier pour que tu vois...
 

Pièces jointes

  • essai excel vince.xls
    18 KB · Affichages: 181
  • essai excel vince.xls
    18 KB · Affichages: 187
  • essai excel vince.xls
    18 KB · Affichages: 191

mromain

XLDnaute Barbatruc
Re : limiter le nombre de caractères.

re,

en fait la macro ne s'exécute que quand on modifie la cellule.
je te renvoie le fichier avec la macro et le résultat.

a+
 

Pièces jointes

  • essai excel vince.xls
    36.5 KB · Affichages: 132
  • essai excel vince.xls
    36.5 KB · Affichages: 146
  • essai excel vince.xls
    36.5 KB · Affichages: 146

CISCO

XLDnaute Barbatruc
Re : limiter le nombre de caractères.

Bonjour à tous

Une possibilité, sans VBA, mais avec des colonnes à cacher, et en supposant qu'il ni a pas plus de 8 mots dans les 38 1ers caractères.

@ plus
 

Pièces jointes

  • essai 38.xls
    18.5 KB · Affichages: 118

vince51

XLDnaute Nouveau
Re : limiter le nombre de caractères.

je te remercie, c est déjà un bon début...
bon je reussi pas a le faire par moi même mais en reprenant ton fichier c'est bon...
et est ce que tu sais si c est possible de faire en sorte que les mots ne soient pas coupés? et commen faire pour ne l appliquer qu'à certaines colonnes?
je sais j'en demande beaucoup...
 

mromain

XLDnaute Barbatruc
Re : limiter le nombre de caractères.

re,

voici un code qui à l'air de marcher, mais à tester :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
Dim maxLen As Integer, tabStr, i As Integer, tempStr
maxLen = 38

tabStr = Split(Target.Value, " ")
tempStr = ""
For i = LBound(tabStr) To UBound(tabStr)
    If Len(tempStr & " " & tabStr(i)) < maxLen Then
        If tabStr(i) <> "" Then tempStr = tempStr & " " & tabStr(i)
    Else
        If tempStr = "" Then tempStr = tabStr(i)
        tempStr = Right(tempStr, Len(tempStr) - 1)
        Target.Offset(0, 1).Value = Mid(Target.Value, Len(tempStr) + 2, Len(Target.Value) - Len(tempStr)) & " " & Target.Offset(0, 1).Value
        Target.Value = tempStr
        i = UBound(tabStr) + 1
    End If
Next i
End Sub

a+
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : limiter le nombre de caractères.

re,

pour limiter à certaines colonnes, il faut rajouter une ligne :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
[B]If Not (Target.Column = [COLOR="Red"][I]n°Col 1[/I][/COLOR] Or Target.Column = [COLOR="Red"][I]n°Col 2[/I][/COLOR] Or Target.Column = [COLOR="Red"][I]n°Col 3 ...[/I][/COLOR]) Then Exit Sub[/B]
Dim maxLen As Integer, tabStr, i As Integer, tempStr
maxLen = 38

tabStr = Split(Target.Value, " ")
tempStr = ""
For i = LBound(tabStr) To UBound(tabStr)
    If Len(tempStr & " " & tabStr(i)) < maxLen Then
        If tabStr(i) <> "" Then tempStr = tempStr & " " & tabStr(i)
    Else
        If tempStr = "" Then tempStr = tabStr(i)
        tempStr = Right(tempStr, Len(tempStr) - 1)
        Target.Offset(0, 1).Value = Mid(Target.Value, Len(tempStr) + 2, Len(Target.Value) - Len(tempStr)) & " " & Target.Offset(0, 1).Value
        Target.Value = tempStr
        i = UBound(tabStr) + 1
    End If
Next i
End Sub

je n'ai pas testé le code.

a+
 

Discussions similaires

Statistiques des forums

Discussions
312 185
Messages
2 086 010
Membres
103 090
dernier inscrit
Createlier