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.
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
Bonjour Daniel,
Pour info, car la solution de Jacky fonctionne et donc je ne veux pas prendre plus de ton temps, lorsque que je sélectionne mes cellules (A1, A2, A3, A4) et que j'exécute ta macro cela me fait une découpe bizarre : TexteA1 ="Hôpital Intercommunal du Beaugeois et de la Vallée" Coupure1 du texteA1="Hôpital Intercommunal du Beaugeois et" coupure2 du texte 1 ="de la" (il manque Vallée) TexteA2="ASSOCIATION D’HYGIENE SOCIALE DE LA SARTHE - HAD LE MANS" Coupure1 du texte2="de la HAD LE" (le texte démarre par "de la" qui représente la coupure2 du texte 1 toujours partielle et ce qui pourrait être la coupure2 du texteA2 également partielle) puis blocage Une fenêtre m'informe ""Erreur de procédure '5' Argument ou appel de procédure incorrect" et si j'effectue le débogage la ligne "c.Offset(, 2).Value = Right(Txt, Len(Txt) - 1)" de ta macro se surligne en jaune. Si j'exécute ton essai en ligne j'ai une "erreur de compilation : projet ou bibliothèque introuvable" et le mot Right de la ligne de macro "c.Offset(, 1).Value = Right(Txt, Len(Txt) - 1)" qui est surligné en bleu puis si je fais OK le texte "Sub Découpe()" est surligné en jaune.
Si cela peut te permettre de résoudre le problème c'est volontiers que j'effectuerai l'essai car j'apprends en m^me temps. Mais peut être est-ce lié à mon amateurisme en matière de macro.
En tous les cas merci de ton aide Éric
Daniel.C a écrit le 21/10/2008 à 17h06 :
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
Bonjour Daniel,
Pour info, car la solution de Jacky fonctionne et donc je ne veux pas prendre plus de ton temps, lorsque que je sélectionne mes cellules (A1, A2, A3, A4) et que j'exécute ta macro cela me fait une découpe bizarre :
TexteA1 ="Hôpital Intercommunal du Beaugeois et de la Vallée" Coupure1 du texteA1="Hôpital Intercommunal du Beaugeois et" coupure2 du texte 1 ="de la" (il manque Vallée)
TexteA2="ASSOCIATION D’HYGIENE SOCIALE DE LA SARTHE - HAD LE MANS" Coupure1 du texte2="de la HAD LE" (le texte démarre par "de la" qui représente la coupure2 du texte 1 toujours partielle et ce qui pourrait être la coupure2 du texteA2 également partielle) puis blocage Une fenêtre m'informe ""Erreur de procédure '5' Argument ou appel de procédure incorrect" et si j'effectue le débogage la ligne "c.Offset(, 2).Value = Right(Txt, Len(Txt) - 1)" de ta macro se surligne en jaune.
Si j'exécute ton essai en ligne j'ai une "erreur de compilation : projet ou bibliothèque introuvable" et le mot Right de la ligne de macro "c.Offset(, 1).Value = Right(Txt, Len(Txt) - 1)" qui est surligné en bleu puis si je fais OK le texte "Sub Découpe()" est surligné en jaune.
Si cela peut te permettre de résoudre le problème c'est volontiers que j'effectuerai l'essai car j'apprends en m^me temps. Mais peut être est-ce lié à mon amateurisme en matière de macro.
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
Bonjour Daniel,
Pour info, car la solution de Jacky fonctionne et donc je ne veux pas prendre plus de ton temps, lorsque que je sélectionne mes cellules (A1, A2, A3, A4) et que j'exécute ta macro cela me fait une découpe bizarre : TexteA1 ="Hôpital Intercommunal du Beaugeois et de la Vallée" Coupure1 du texteA1="Hôpital Intercommunal du Beaugeois et" coupure2 du texte 1 ="de la" (il manque Vallée) TexteA2="ASSOCIATION D’HYGIENE SOCIALE DE LA SARTHE - HAD LE MANS" Coupure1 du texte2="de la HAD LE" (le texte démarre par "de la" qui représente la coupure2 du texte 1 toujours partielle et ce qui pourrait être la coupure2 du texteA2 également partielle) puis blocage Une fenêtre m'informe ""Erreur de procédure '5' Argument ou appel de procédure incorrect" et si j'effectue le débogage la ligne "c.Offset(, 2).Value = Right(Txt, Len(Txt) - 1)" de ta macro se surligne en jaune. Si j'exécute ton essai en ligne j'ai une "erreur de compilation : projet ou bibliothèque introuvable" et le mot Right de la ligne de macro "c.Offset(, 1).Value = Right(Txt, Len(Txt) - 1)" qui est surligné en bleu puis si je fais OK le texte "Sub Découpe()" est surligné en jaune.
Si cela peut te permettre de résoudre le problème c'est volontiers que j'effectuerai l'essai car j'apprends en m^me temps. Mais peut être est-ce lié à mon amateurisme en matière de macro.