Insérer un tiret tous les 3 caractères

Carol -  
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

4 réponses

  1. 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
  2. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   380
     
    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
  3. Heremion Messages postés 564 Statut Membre 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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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