Insérer un tiret tous les 3 caractères
Carol
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Insérer un tiret tous les 3 caractères
- Insérer video powerpoint - Guide
- Insérer signature word - Guide
- Ai suite 3 - Télécharger - Optimisation
- Caractères ascii - Guide
- Insérer liste déroulante excel - Guide
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)
=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)
Bonne journée
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 :
Il y a surement quelques trucs à corriger mais l'idée est là. En espérant que cela t'apporte un peu d'aide...
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
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ée
bonne suite
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ée
Dim c As Range For Each c In Selection c.Value = InsereCar(c.Value, "-", 3, "g") Next c
bonne suite