Insérer un tiret tous les 3 caractères

Carol -  
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
A voir également:

4 réponses

Lentz
 
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)
0
cousinhub29 Messages postés 1074 Date d'inscription   Statut Membre Dernière intervention   361
 
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
0
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   102
 
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...
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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ée
Dim c As Range 
For Each c In Selection 
  c.Value = InsereCar(c.Value, "-", 3, "g") 
Next c

bonne suite
0