Restructuration d'une chaîne de caractères

Bonjour,

Je recherche une manière pour effectuer le traitement suivant :

Compléter avec des "0" une chaîne de caractères pour respecter la structure suivante : 00-000-00-0000-000

Exemple

Avant :

81-003-EP-1-11

81-003-EP-100-1

81-003-EP-190-1

81-003-EP-20-1

Apres :

81-003-EP-0001-011

81-003-EP-0100-001

81-003-EP-0190-001

81-003-EP-0020-001

Merci.

Bonjour Florian, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim P(1 To 5) As String 'déclare le tableau 5 variables de P(1) à P(5) (Partie)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les ligne I du tabelau des valeurs TV
    P(1) = CStr(Format(Split(TV(I, 1), "-")(0), "00")) 'définit la partie 1 P(1)
    P(2) = CStr(Format(Split(TV(I, 1), "-")(1), "000")) 'définit la partie 2 P(2)
    P(3) = CStr(Format(Split(TV(I, 1), "-")(2), "00")) 'définit la partie 3 P(3)
    P(4) = CStr(Format(Split(TV(I, 1), "-")(3), "0000")) 'définit la partie 4 P(4)
    P(5) = CStr(Format(Split(TV(I, 1), "-")(4), "000")) 'définit la partie 5 P(5)
    TV(I, 1) = P(1) & "-" & P(2) & "-" & P(3) & "-" & P(4) & "-" & P(5) 'redéfinit la donnée TV(I,1)
Next 'prochaine ligne de la boucle
O.Range("A1").Resize(UBound(TV, 1), 1).Value = TV 'renvoie dans A1 le tableau TV
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Bonjour

Une autre façon :

Option Explicit
Sub Restructuration()
Dim LaFeuille As Worksheet
Dim Avant As String, Apres As String, Part1 As String, Part2 As String, Part3 As String, Part4 As String, Part5 As String
Dim Max As Integer, i As Integer
Dim Tbl

Set LaFeuille = ThisWorkbook.Worksheets("Feuil1") 'A adapter  selon le nom de la feuille où se trouve tes données
Max = LaFeuille.Range("A" & LaFeuille.Rows.Count).End(xlUp).Row 'A adapter selon la colonne où se trouve tes données

For i = 1 To Max 'A adapté si tes données ne commence pas à la première ligne
    Avant = LaFeuille.Cells(i, 1) 'A adapter selon la colonne où se trouve tes données
    Tbl = Split(Avant, "-")
    Part1 = Tbl(0)
    Part2 = Tbl(1)
    Part3 = Tbl(2)
    Part4 = Tbl(3)
    Part5 = Tbl(4)

    If Len(Part4) = 1 Then Part4 = "000" & Part4
    If Len(Part4) = 2 Then Part4 = "00" & Part4
    If Len(Part4) = 3 Then Part4 = "0" & Part4

    If Len(Part5) = 1 Then Part5 = "000" & Part5
    If Len(Part5) = 2 Then Part5 = "00" & Part5
    If Len(Part5) = 3 Then Part5 = "0" & Part5

    Apres = Part1 & "-" & Part2 & "-" & Part3 & "-" & Part4 & "-" & Part5
    LaFeuille.Cells(i, 1) = Apres 'A adapter selon la colonne où se trouve tes données
Next i

End Sub

Bonjour Florian,

Autre proposition :

Option Explicit
Function MEFnormalisee(zCell As Range) As String
    Const cForme = "00-000-00-0000-000"
    Dim aForme() As String
    Dim aIN() As String
    Dim aOUT() As String
    Dim i As Integer

    'On stocke le format dans un tableau mémoire
    aForme = Split(cForme, "-")
    'On stocke la valeur en entrée dans un autre tableau mémoire
    aIN() = Split(zCell.Value2, "-")

    'On boucle sur les valeurs contenues dans le tableau mémoire
    For i = 0 To UBound(aIN)
        'On redimentionne le tableau de sortie
        ReDim Preserve aOUT(i)
        'On stocke la valeur convertie au format dans le tableau de sortie
        aOUT(i) = Format(aIN(i), aForme(i))
    Next
    'On reformate la valeur de sortie
    MEFnormalisee = Join(aOUT(), "-")

End Function

Merci, c'est impeccable ! du travail de pro.

Rechercher des sujets similaires à "restructuration chaine caracteres"