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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
8
Affichages
551
Réponses
16
Affichages
2 K
Retour