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
A voir également:
- Insérer un tiret tous les 3 caractères
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Caractères spéciaux - Guide
- Ai suite 3 - Télécharger - Optimisation
- 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