scinder cellule en deux si trop de caracteres

  • Initiateur de la discussion Initiateur de la discussion koewin
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

koewin

XLDnaute Junior
Bonjour,

je cherche à intégrer un fichier client dans une de nos applications métiers. Une des contraintes est que le champ adresse ne doit pas avoir plus de 30 caractères.

Par contre, nous pouvons avoir un champ adresse1, adresse2. Quelqu'un a_t_il une macro ou une autre solution pour :
- sélectionner la colonne adresse1
-compter le nombre de caractères
-si caractères > 30, coupez et coller dans la colonne adresse2

Si possible, quand on coupe, coupez après un espace et pas au milieu d'un mot 🙂

Merci d'avance de votre aide.

Cdt.

koewin
 
Re : scinder cellule en deux si trop de caracteres

Bonjour koewin,

On suppose que la colonne "adresse1" est nommée (menu Insertion-Nom-Définir) et que la colonne "adresse2" est juste à sa droite.

La macro suivante se lance quand on entre une donnée dans "adresse1". Elle est à placer dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [adresse1]) Is Nothing Or Target.Count > 1 Then Exit Sub
If Len(Trim(Target)) < 31 Then Exit Sub
Dim i As Byte, coupe As Byte
For i = 1 To 30
If Mid(Trim(Target), i, 1) = " " Then coupe = i
Next
If coupe Then
Target.Offset(, 1) = Mid(Trim(Target), coupe + 1, 1000)
Target = Left(Trim(Target), coupe - 1)
End If
End Sub

A noter que si aucun espace n'est trouvé dans les 30 premiers caractères, l'adresse n'est pas scindée...

A+
 
Dernière édition:
Re : scinder cellule en deux si trop de caracteres

Re,

Bon, les espaces superflus posaient problème, je les supprime donc d'emblée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [adresse1]) Is Nothing Or Target.Count > 1 Then Exit Sub
[COLOR="Red"]Application.EnableEvents = False
Target = Application.Trim(Target) 'équivalent de SUPPRESPACE
Application.EnableEvents = True[/COLOR]
If Len(Target) < 31 Then Exit Sub
Dim i As Byte, coupe As Byte
For i = 1 To 31
If Mid(Target, i, 1) = " " Then coupe = i
Next
If coupe Then
Target.Offset(, 1) = Mid(Target, coupe + 1, 1000)
Target = Left(Target, coupe - 1)
End If
End Sub

Edit : l'espace pour la coupe peut être le 31ème caractère.

A+
 
Dernière édition:
Re : scinder cellule en deux si trop de caracteres

Bonjour,

merci de ton aide. J'ai essayé ta solution mais je dois faire une erreur car cela ne change rien. Faut dire, je suis nul en VBA

Donc ma colonne adresse1 est en C, j'ai nommé toute la colonne adresse1, clic droit sur l'onglet, j'ai copié-collé ton code et la, je fais quoi ????

Désolé de mon ignorance.

Cdt.

koewin
 
Re : scinder cellule en deux si trop de caracteres

Re,

Pour éviter de tourner en rond, envoyez le fichier avec ce que vous avez fait.

Je compléterai éventuellement.

PS. Quelle est votre version d'Excel ?

A+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour