Coupure de texte

Le
eric-fore
Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant plus de 38 caractères 2 cellules : la première avec maximum 38 caractères sans couper les mots, la deuxième avec le solde, si possible sans espace devant le premier mot, d'un maximum de 38 caractères en excluant les caractères en surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules d'une désignation de plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2 = "Ils doivent réaliser le découpage" (= 33 caractères ou 34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux cellules d'une désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra pas mais je n'ai que la possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #17578251
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore"
Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant plus de 38
caractères 2 cellules : la première avec maximum 38 caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le premier
mot,
d'un maximum de 38 caractères en excluant les caractères en surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2 =
"Ils
doivent réaliser le découpage" (= 33 caractères ou 34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.


eric-fore
Le #17595851
Daniel.C a écrit le 19/10/2008 à 15h32 :
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2 =
"Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.





Bonjour Daniel,

Je ne suis pas très fort sur les macros aussi lorsque j'ai voulu en créer une pour y insérer ton texte cela n'a pas fonctionné. Si cela n'est pas trop long pourrais-tu m'indiquer la procédure pour insérer ta macro dans ce que tu appelles le module de la feuille ? ensuite cette macro fonctionne-t-elle pour un fichier déjà saisi ?

Merci pour tout
Éric
Jacky
Le #17597181
Bonjour,
Avec 2 fonctions perso. à insérer dans un module simple
Alt+f11 insertion/module et coller les 2 fonctions
'-------------
Function Phrase1(Mot As String)
Application.Volatile
Mot = Trim(Mot): temp = 38
If Len(Mot) <= 38 Then Phrase1 = Mot: Exit Function
If IsError(Application.Search(" ", Mot)) Then Phrase1 = Left(Mot, 38): Exit
Function
For i = 1 To 38
If Mid(Mot, i, 1) = " " Then temp = i - 1
Phrase1 = Phrase1 & Mid(Mot, i, 1)
Next
If Mid(Mot, 39, 1) <> " " Then Phrase1 = Left(Mot, temp)
End Function
'----------
Function Phrase2(Mot As String)
Application.Volatile
temp2 = 38
temp = Trim(Mid(Mot, Len(Phrase1(Mot)) + 1, Len(Mot)))
If Len(temp) <= 38 Then Phrase2 = temp: Exit Function
For i = 1 To 39
If Mid(temp, i, 1) = " " Then temp2 = i - 1
temp = temp & Mid(temp, i, 1)
Next
temp = Trim(temp)
If Mid(temp, 39, 1) <> " " Then temp = Left(temp, temp2)
Phrase2 = temp
End Function
'---------------
Sur la feuille
La phrase à découper en A2
Pour la première partie de la phrase
=Phrase1(A2)
Pour la deuxième partie de la phrase
=Phrase2(A2)
Voir ici
http://cjoint.com/?kvk7dWZswW
--
Salutations
JJ


"eric-fore"
Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant plus de 38
caractères 2 cellules : la première avec maximum 38 caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le premier
mot,
d'un maximum de 38 caractères en excluant les caractères en surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2 > "Ils
doivent réaliser le découpage" (= 33 caractères ou 34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.


Daniel.C
Le #17597371
eric-fore a écrit :
Daniel.C a écrit le 19/10/2008 à 15h32 :
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2 >>> "Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.





Bonjour Daniel,

Je ne suis pas très fort sur les macros aussi lorsque j'ai voulu en créer une
pour y insérer ton texte cela n'a pas fonctionné. Si cela n'est pas trop long
pourrais-tu m'indiquer la procédure pour insérer ta macro dans ce que tu
appelles le module de la feuille ? ensuite cette macro fonctionne-t-elle pour un
fichier déjà saisi ?

Merci pour tout
Éric



Bonjour
Clic droit sur l'onglet de la feuille concernée, clic sur "Visualiser le
code". Copie la macro dans la partie droite de la fenêtre qui vient de
s'ouvrir. La macro ne s'applique pas aux cellules déjà saisies. Si tu en
as peu, clique dedans et appuie sur "Entrée". Si tu en as beaucoup,
dis-le, je posterai une autre macro.
Daniel
eric-fore
Le #17599881
Daniel.C a écrit le 21/10/2008 à 11h18 :
eric-fore a écrit :
Daniel.C a écrit le 19/10/2008 à 15h32 :
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
>>> "Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères"
n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.







Bonjour Daniel,

Je ne suis pas très fort sur les macros aussi lorsque j'ai voulu en
créer une
pour y insérer ton texte cela n'a pas fonctionné. Si cela n'est
pas trop long
pourrais-tu m'indiquer la procédure pour insérer ta macro dans
ce que tu
appelles le module de la feuille ? ensuite cette macro fonctionne-t-elle pour
un
fichier déjà saisi ?

Merci pour tout
Éric




Bonjour
Clic droit sur l'onglet de la feuille concernée, clic sur
"Visualiser le
code". Copie la macro dans la partie droite de la fenêtre qui vient
de
s'ouvrir. La macro ne s'applique pas aux cellules déjà saisies.
Si tu en
as peu, clique dedans et appuie sur "Entrée". Si tu en as
beaucoup,
dis-le, je posterai une autre macro.
Daniel


Re,

Cela fonctionne. J'ai même réussi, au joie, à modifier ta macro pour ranger les infos dans les deux cellules à droite et non en dessous.
Par contre je ne comprends pas pourquoi, pour les infos déjà enregistrées dans le fichier la deuxième partie est tronquée à 15 pour une première phrase et à 5 pour la suivante alors que lorsque j'entre ma phrase "Ils doivent réaliser le découpage en deux cellules d'une désignation de plus de 76 caractères" en copier/coller les coupures se font à 36 caractères pour la 1ère partie et 34 caractères pour la 2ème partie.

J'ai effectivement un fichier d'un millier de lignes. Je pourrais le ranger en comptant le nombre de caractères des cellules incriminées puis ne couper que celles dépassant 38 caractères. Toutefois si cela ne t'ennuie pas j'accepte ta proposition d'une macro pouvant résoudre automatiquement mon problème.

Encore merci de ton aide.
Éric
eric-fore
Le #17600181
Jacky a écrit le 21/10/2008 à 11h06 :
Bonjour,
Avec 2 fonctions perso. à insérer dans un module simple
Alt+f11 insertion/module et coller les 2 fonctions
'-------------
Function Phrase1(Mot As String)
Application.Volatile
Mot = Trim(Mot): temp = 38
If Len(Mot) <= 38 Then Phrase1 = Mot: Exit Function
If IsError(Application.Search(" ", Mot)) Then Phrase1 = Left(Mot,
38): Exit
Function
For i = 1 To 38
If Mid(Mot, i, 1) = " " Then temp = i - 1
Phrase1 = Phrase1 & Mid(Mot, i, 1)
Next
If Mid(Mot, 39, 1) <> " " Then Phrase1 = Left(Mot, temp)
End Function
'----------
Function Phrase2(Mot As String)
Application.Volatile
temp2 = 38
temp = Trim(Mid(Mot, Len(Phrase1(Mot)) + 1, Len(Mot)))
If Len(temp) <= 38 Then Phrase2 = temp: Exit Function
For i = 1 To 39
If Mid(temp, i, 1) = " " Then temp2 = i - 1
temp = temp & Mid(temp, i, 1)
Next
temp = Trim(temp)
If Mid(temp, 39, 1) <> " " Then temp = Left(temp, temp2)
Phrase2 = temp
End Function
'---------------
Sur la feuille
La phrase à découper en A2
Pour la première partie de la phrase
=Phrase1(A2)
Pour la deuxième partie de la phrase
=Phrase2(A2)
Voir ici
http://cjoint.com/?kvk7dWZswW
--
Salutations
JJ


"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
> "Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.





Bonjour Jacky,

J'ai essayé tes macros mais je ne suis pas un pro. Pour l'instant cela ne fonctionne pas mais peut-être ai-je effectué une mauvaise manip. J'ai mis l'info "=phrase1(a2)" dans la cellule B2 et "=phrase2(a2)" en C2 mais ne s'inscrit que #NOM? dans les cellules
Pour info dans Visual Basic la fonction "If IsError(Application.Search(" ", Mot)) Then Phrase1 = Left(Mot, 38): Exit Function" apparaissait en rouge car Function était à la ligne. Je l'ai rétablie mais toujours identique quant au résultat.

Aurais-tu une idée sur ma mauvaise manip ?

Merci pour ton aide
Éric
Jacky
Le #17600561
Re...
Que donne l'exemple joint ??

--
Salutations
JJ


"eric-fore"
Jacky a écrit le 21/10/2008 à 11h06 :
Bonjour,
Avec 2 fonctions perso. à insérer dans un module simple
Alt+f11 insertion/module et coller les 2 fonctions
'-------------
Function Phrase1(Mot As String)
Application.Volatile
Mot = Trim(Mot): temp = 38
If Len(Mot) <= 38 Then Phrase1 = Mot: Exit Function
If IsError(Application.Search(" ", Mot)) Then Phrase1 = Left(Mot,
38): Exit
Function
For i = 1 To 38
If Mid(Mot, i, 1) = " " Then temp = i - 1
Phrase1 = Phrase1 & Mid(Mot, i, 1)
Next
If Mid(Mot, 39, 1) <> " " Then Phrase1 = Left(Mot, temp)
End Function
'----------
Function Phrase2(Mot As String)
Application.Volatile
temp2 = 38
temp = Trim(Mid(Mot, Len(Phrase1(Mot)) + 1, Len(Mot)))
If Len(temp) <= 38 Then Phrase2 = temp: Exit Function
For i = 1 To 39
If Mid(temp, i, 1) = " " Then temp2 = i - 1
temp = temp & Mid(temp, i, 1)
Next
temp = Trim(temp)
If Mid(temp, 39, 1) <> " " Then temp = Left(temp, temp2)
Phrase2 = temp
End Function
'---------------
Sur la feuille
La phrase à découper en A2
Pour la première partie de la phrase
=Phrase1(A2)
Pour la deuxième partie de la phrase
=Phrase2(A2)
Voir ici
http://cjoint.com/?kvk7dWZswW
--
Salutations
JJ


"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
> "Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères" n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.





Bonjour Jacky,

J'ai essayé tes macros mais je ne suis pas un pro. Pour l'instant cela ne
fonctionne pas mais peut-être ai-je effectué une mauvaise manip. J'ai mis
l'info
"=phrase1(a2)" dans la cellule B2 et "=phrase2(a2)" en C2 mais ne
s'inscrit que
#NOM? dans les cellules
Pour info dans Visual Basic la fonction "If IsError(Application.Search("
",
Mot)) Then Phrase1 = Left(Mot, 38): Exit Function" apparaissait en rouge
car
Function était à la ligne. Je l'ai rétablie mais toujours identique quant
au
résultat.

Aurais-tu une idée sur ma mauvaise manip ?

Merci pour ton aide
Éric


Daniel.C
Le #17600941
eric-fore a écrit :
Daniel.C a écrit le 21/10/2008 à 11h18 :
eric-fore a écrit :
Daniel.C a écrit le 19/10/2008 à 15h32 :
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
"Ils






doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères"
n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.






Bonjour Daniel,

Je ne suis pas très fort sur les macros aussi lorsque j'ai voulu en
créer une
pour y insérer ton texte cela n'a pas fonctionné. Si cela n'est
pas trop long
pourrais-tu m'indiquer la procédure pour insérer ta macro dans
ce que tu
appelles le module de la feuille ? ensuite cette macro fonctionne-t-elle




pour
un
fichier déjà saisi ?

Merci pour tout
Éric



Bonjour
Clic droit sur l'onglet de la feuille concernée, clic sur
"Visualiser le
code". Copie la macro dans la partie droite de la fenêtre qui vient
de
s'ouvrir. La macro ne s'applique pas aux cellules déjà saisies.
Si tu en
as peu, clique dedans et appuie sur "Entrée". Si tu en as
beaucoup,
dis-le, je posterai une autre macro.
Daniel


Re,

Cela fonctionne. J'ai même réussi, au joie, à modifier ta macro pour ranger les
infos dans les deux cellules à droite et non en dessous.
Par contre je ne comprends pas pourquoi, pour les infos déjà enregistrées dans
le fichier la deuxième partie est tronquée à 15 pour une première phrase et à 5
pour la suivante alors que lorsque j'entre ma phrase "Ils doivent réaliser le
découpage en deux cellules d'une désignation de plus de 76 caractères" en
copier/coller les coupures se font à 36 caractères pour la 1ère partie et 34
caractères pour la 2ème partie.

J'ai effectivement un fichier d'un millier de lignes. Je pourrais le ranger en
comptant le nombre de caractères des cellules incriminées puis ne couper que
celles dépassant 38 caractères. Toutefois si cela ne t'ennuie pas j'accepte ta
proposition d'une macro pouvant résoudre automatiquement mon problème.

Encore merci de ton aide.
Éric



Pour la découpe en direct, regarde le classeur :

http://cjoint.com/?kvqRK4ozKh

Je crée la macro pour récupérer l'existant.
Daniel
Daniel.C
Le #17601061
J'ai écrit la macro "Découpe" pour rattraper l'existant. Tu dois au
préalable sélectionner les cellules que tu veux scinder. La macro traite
la sélection.

Sub Découpe()
Dim c As Range, Tablo, Ctr As Integer, Txt As String, i As Integer
For Each c In Selection
If Len(c.Value) > 38 Then
If Not IsEmpty(c.Offset(, 1)) Then
MsgBox "La cellule de droite n'est pas vide"
GoTo Suivant
End If
Tablo = Split(c.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
c.Offset(, 1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(c.Offset(, 2)) Then
MsgBox "La cellule de droite n'est pas vide"
GoTo Suivant
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
c.Offset(, 2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
Suivant:
Next c
End Sub

Regarde le classeur exemple à l'adresse :

http://cjoint.com/?kvreJpipqi

Daniel

eric-fore a écrit :
Daniel.C a écrit le 21/10/2008 à 11h18 :
eric-fore a écrit :
Daniel.C a écrit le 19/10/2008 à 15h32 :
Bonjour.
Mets la macro suivante dans le module de ta feuille. Quand tu saisis un
texte de plus de 38 caractères dans un cellule quelconque, la macro
s'exécute en temps réel :

Private Sub Worksheet_Change(ByVal Target As Range)
If Len(Target.Value) > 38 Then
Application.EnableEvents = False
If Not IsEmpty(Target.Offset(1)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Dim Tablo, Ctr As Integer, Txt As String, i As Integer
Tablo = Split(Target.Value)
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(1).Value = Right(Txt, Len(Txt) - 1)
Txt = ""
Ctr = Len(Tablo(i))
If Not IsEmpty(Target.Offset(2)) Then
MsgBox "La cellule d'en dessous n'est pas vide"
Application.EnableEvents = True
Exit Sub
End If
Do
If i = UBound(Tablo) Then Exit Do
Txt = Txt & " " & Tablo(i)
i = i + 1
Ctr = Len(Txt) + Len(Tablo(i))
Loop Until Ctr >= 38
Target.Offset(2).Value = Right(Txt, Len(Txt) - 1)
Application.EnableEvents = True
End If
End Sub

--
Cordialement.
Daniel
"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
"Ils






doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères"
n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.






Bonjour Daniel,

Je ne suis pas très fort sur les macros aussi lorsque j'ai voulu en
créer une
pour y insérer ton texte cela n'a pas fonctionné. Si cela n'est
pas trop long
pourrais-tu m'indiquer la procédure pour insérer ta macro dans
ce que tu
appelles le module de la feuille ? ensuite cette macro fonctionne-t-elle




pour
un
fichier déjà saisi ?

Merci pour tout
Éric



Bonjour
Clic droit sur l'onglet de la feuille concernée, clic sur
"Visualiser le
code". Copie la macro dans la partie droite de la fenêtre qui vient
de
s'ouvrir. La macro ne s'applique pas aux cellules déjà saisies.
Si tu en
as peu, clique dedans et appuie sur "Entrée". Si tu en as
beaucoup,
dis-le, je posterai une autre macro.
Daniel


Re,

Cela fonctionne. J'ai même réussi, au joie, à modifier ta macro pour ranger les
infos dans les deux cellules à droite et non en dessous.
Par contre je ne comprends pas pourquoi, pour les infos déjà enregistrées dans
le fichier la deuxième partie est tronquée à 15 pour une première phrase et à 5
pour la suivante alors que lorsque j'entre ma phrase "Ils doivent réaliser le
découpage en deux cellules d'une désignation de plus de 76 caractères" en
copier/coller les coupures se font à 36 caractères pour la 1ère partie et 34
caractères pour la 2ème partie.

J'ai effectivement un fichier d'un millier de lignes. Je pourrais le ranger en
comptant le nombre de caractères des cellules incriminées puis ne couper que
celles dépassant 38 caractères. Toutefois si cela ne t'ennuie pas j'accepte ta
proposition d'une macro pouvant résoudre automatiquement mon problème.

Encore merci de ton aide.
Éric


eric-fore
Le #17607911
Jacky a écrit le 21/10/2008 à 16h01 :
Re...
Que donne l'exemple joint ??

--
Salutations
JJ


"eric-fore" a écrit dans le
message de news:

Jacky a écrit le 21/10/2008 à 11h06 :
Bonjour,
Avec 2 fonctions perso. à insérer dans un module simple
Alt+f11 insertion/module et coller les 2 fonctions
'-------------
Function Phrase1(Mot As String)
Application.Volatile
Mot = Trim(Mot): temp = 38
If Len(Mot) <= 38 Then Phrase1 = Mot: Exit Function
If IsError(Application.Search(" ", Mot)) Then Phrase1 = Left(Mot,
38): Exit
Function
For i = 1 To 38
If Mid(Mot, i, 1) = " " Then temp = i - 1
Phrase1 = Phrase1 & Mid(Mot, i, 1)
Next
If Mid(Mot, 39, 1) <> " " Then Phrase1 = Left(Mot, temp)
End Function
'----------
Function Phrase2(Mot As String)
Application.Volatile
temp2 = 38
temp = Trim(Mid(Mot, Len(Phrase1(Mot)) + 1, Len(Mot)))
If Len(temp) <= 38 Then Phrase2 = temp: Exit Function
For i = 1 To 39
If Mid(temp, i, 1) = " " Then temp2 = i - 1
temp = temp & Mid(temp, i, 1)
Next
temp = Trim(temp)
If Mid(temp, 39, 1) <> " " Then temp = Left(temp, temp2)
Phrase2 = temp
End Function
'---------------
Sur la feuille
La phrase à découper en A2
Pour la première partie de la phrase
=Phrase1(A2)
Pour la deuxième partie de la phrase
=Phrase2(A2)
Voir ici
http://cjoint.com/?kvk7dWZswW
--
Salutations
JJ


"eric-fore" a écrit dans le
message de news:

Bonjour,

Je dois créer, sous Excel, à partir d'une cellule comprenant
plus de 38
caractères 2 cellules : la première avec maximum 38
caractères sans couper
les
mots, la deuxième avec le solde, si possible sans espace devant le
premier
mot,
d'un maximum de 38 caractères en excluant les caractères en
surplus.

Exemple d'un texte à découper :
A1 = "Ils doivent réaliser le découpage en deux cellules
d'une désignation
de
plus de 76 caractères"

- Texte 1 doit avoir 38 caractères maximum sans coupure de mots : A2
> "Ils
doivent réaliser le découpage" (= 33 caractères ou
34 si espace en final)

- Texte 2 doit avoir 38 caractères maximum : A3 = "en deux
cellules d'une
désignation de "

Le solde du texte "plus de 76 caractères"
n'apparaîtra
pas mais je n'ai
que la
possibilité de deux cellules de 38 caractères chacune.

Merci de votre aide.







Bonjour Jacky,

J'ai essayé tes macros mais je ne suis pas un pro. Pour l'instant cela
ne
fonctionne pas mais peut-être ai-je effectué une mauvaise manip.
J'ai mis
l'info
"=phrase1(a2)" dans la cellule B2 et "=phrase2(a2)" en C2
mais ne
s'inscrit que
#NOM? dans les cellules
Pour info dans Visual Basic la fonction "If
IsError(Application.Search("
",
Mot)) Then Phrase1 = Left(Mot, 38): Exit Function" apparaissait en rouge
car
Function était à la ligne. Je l'ai rétablie mais toujours
identique quant
au
résultat.

Aurais-tu une idée sur ma mauvaise manip ?

Merci pour ton aide
Éric





Bonjour Jacky,

Super ! je n'avais tout simplement pas inséré tes macros au bon endroit.

Merci beaucoup.

Éric
Publicité
Poster une réponse
Anonyme