Insérer un tiret tous les 3 caractères
Carol
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
Je travaille dans un fichier excel et je cherche à insérer automatiquement (via macro ou autre) un tiret - tous les 3 caractères dans des suites de caractères de nombre variable.
AAAYYYFFFGGGRRR doit devenir AAA-YYY-FFF-GGG-RRR
Merci d'avance pour vos conseils,
Carol
Je travaille dans un fichier excel et je cherche à insérer automatiquement (via macro ou autre) un tiret - tous les 3 caractères dans des suites de caractères de nombre variable.
AAAYYYFFFGGGRRR doit devenir AAA-YYY-FFF-GGG-RRR
Merci d'avance pour vos conseils,
Carol
4 réponses
-
Voilà à condition que AAAYYYFFFGGGRRR soit en C6 !!!
=GAUCHE(C6;3) & "-" &GAUCHE(DROITE(C6;12);3) & "-" &GAUCHE(DROITE(C6;9);3) & "-" &GAUCHE(DROITE(C6;6);3) & "-" &DROITE(C6;3) -
Bonjour,
Par code macro :
(Plage à adapter)
Sub tirets() Dim Cel As Range Dim I As Byte, J As Byte Dim Tblo As Object Set Tblo = CreateObject("Scripting.Dictionary") For Each Cel In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) J = 1 For I = 1 To Application.RoundUp(Len(Cel) / 3, 0) Tblo(I) = Mid(Cel, J, 3) J = J + 3 Next I Cel.Offset(, 1) = Join(Tblo.Items, "-") Tblo.RemoveAll Next Cel End Sub
Bonne journée -
Bonjour Carol.
Vite fait, j'ai essayé le code suivant dans une macro. Sur un évènement de bouton, ou sur un évènement de la feuille :Dim imax Dim i, j Dim ilongueur_cellule Dim stexte_cellule Dim stexte_resultat imax = Range("A65536").End(xlUp).Row For i = 1 To imax stexte_cellule = Range("A" & i).Value ilongueur_cellule = Len(stexte_cellule) j = 1 If Len(stexte_cellule) < 3 Then stexte_resultat = stexte_cellule Else stexte_resultat = Mid(stexte_cellule, j, 3) Do While j <= ilongueur_cellule If j > 1 Then stexte_resultat = stexte_resultat & "-" & Mid(stexte_cellule, j, 3) End If j = j + 3 Loop stexte_resultat = stexte_resultat & "-" & Mid(stexte_cellule, j, j - ilongueur_cellule) End If Range("B" & i).Value = stexte_resultat Next i
Il y a surement quelques trucs à corriger mais l'idée est là. En espérant que cela t'apporte un peu d'aide...
-
bonjour
une autre version avec une fonction à mettre dans un module
Option Explicit ' ch = chaine a traiter ' car = caractere de separation ' saut = nb de caracteres entre deux car ' dir = "d" ou "g" on commence par la droite ou la gauche Public Function InsereCar(ByVal ch As String, car As String, saut As Long, dir As String) As String If Len(ch) <= saut Then InsereCar = ch Else If dir = "g" Then InsereCar = Left(ch, saut) & car & InsereCar(Right(ch, Len(ch) - saut), car, saut, dir) Else InsereCar = InsereCar(Left(ch, Len(ch) - saut), car, saut, dir) & car & Right(ch, saut) End If End If End Function
Utilisation dans la feuille
si A1 = azertyuiop
B1 =inserecar($A1;"-";3;"g") donne aze-rty-uio-p
C1 =inserecar($A1;"-";3;"d") donne a-zer-tyu-iop
Utilisation via une procedure VBA sur une plage selectionnéeDim c As Range For Each c In Selection c.Value = InsereCar(c.Value, "-", 3, "g") Next c
bonne suite