XL 2016 VBA Supprimer/Extraire/Séparer des valeurs avant/après caractères spéciaux

Matwix

XLDnaute Nouveau
Bonjour,

Je cherche une macro VBA pour Supprimer dans une colonne les caractères avant un caractère spécial et après un autre.
Le résultat pour ce faire dans la colonne directement ou dans la colonne suivante.

Exemple : XXX_YYY - Exemple A
Solution YYY

Merci,

Martin
 

Pièces jointes

  • Exemple Séparation.xlsx
    8 KB · Affichages: 7

laurent950

XLDnaute Barbatruc
Bonsoir @Matwix, @M12

Split avec Mutli Séparateur a l'aide d'une Regex.

Le résultat pour ce faire dans la colonne directement cel.Value = Tdate(1)
ou
dans la colonne suivante. cel.Offset(,1).Value = Tdate(1)

VB:
Option Explicit
Sub test()
Dim Rgn As Range
    Set Rgn = [A1:A12]
        'Rgn.Offset(, 1).Clear
Dim cel As Range
Dim Tdate() As String
Dim Separateurdate As String

Dim Match As Object
Dim Matches As Object
Dim StrPattern As String
Dim reg As Object
        Set reg = CreateObject("VBScript.RegExp")
    StrPattern = "[_-]"
    reg.Pattern = StrPattern
    reg.MultiLine = True: reg.IgnoreCase = False: reg.Global = True
    For Each cel In Rgn
        Set Matches = reg.Execute(cel.Value)
        ReDim Tdate(Matches.Count)
            For Each Match In Matches
                'Debug.Print "source >>", Match.Value
                Separateurdate = reg.Replace(cel.Value, " ")
            Next Match
        Tdate = Split(Separateurdate, " ")
        'Rgn = "'" & Join(Tdate, "/")
        cel.Value = Tdate(1)
    Next cel
 
' libération d'objets
    Set Matches = Nothing
    Set Match = Nothing
    Set reg = Nothing
    Erase Tdate
    Set Rgn = Nothing
    Set cel = Nothing
    Separateurdate = Empty
End Sub
 
Dernière édition:

laurent950

XLDnaute Barbatruc
Bonjour @job75
Dans ce genre de problème le plus simple est d'utiliser la commande Convertir.

Vous avez Raison @job75 c'est plus simple avec cette Option Convertir.

Le résultat pour ce faire dans la colonne directement cel.Value = Split(Cel.Value, " ")(1)
ou
dans la colonne suivante. cel.Offset(,1).Value = Split(Cel.Value, " ")(1)

VB:
Sub remplacerCaracteres()
    Dim Rgn, Cel As Range
    Set Rgn = [A1:A12]
    For Each Cel In Rgn
        Cel = Replace(Replace(Trim(Cel.Value), "_", " "), "-", " ")
        'Debug.Print Split(Cel.Value, " ")(1)
        Cel.Value = Split(Cel.Value, " ")(1)
    Next Cel
End Sub

Ou

VB:
Sub remplacerCaracteres()
    Dim Rgn, Cel As Range
    Set Rgn = [A1:A12]
    For Each Cel In Rgn
        Cel.Value = Split(Replace(Replace(Trim(Cel.Value), "_", " "), "-", " "), " ")(1)
    Next Cel
End Sub
 
Dernière édition:

Matwix

XLDnaute Nouveau
J'ai testé la première solution sans la commande convertir il me met un message d'erreur sur
cel.Value = Tdate(1)


Pour le reste (les deux autres solutuions) il me dit que "cel n'est pas défini"

J’essaie d'anonymiser mon vrai doc mais je ne peux pas le diffuser pour le moment tel quel.
u_u
 

Discussions similaires

Réponses
8
Affichages
411

Statistiques des forums

Discussions
314 630
Messages
2 111 365
Membres
111 114
dernier inscrit
ADA1327