IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

remplacer une sous-chaine dans une expression regulière


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut remplacer une sous-chaine dans une expression regulière
    Bonjour,

    Voilà la problématique que je n'arrive pas à résoudre avec une expression régulière: je cherche à remplacer une sous-chaine du motif matché par une autre chaine (et pas tout le motif matché: ce que j'arrive seulement à faire)

    Exemple:

    Dans la chaine: "bonjourX5toto5" ", si je recherche le caractère "X" suivi d'un numérique, je vais récupérer "X5"

    Je voudrais modifier juste le "5" et pas "X5",
    par exemple par 3: "bonjourX3toto5"

    mais je n'y arrive pas avec la fonction replace du module RegExp

    Merci de votre aide.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Une proposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    'Mot: Mot dans lequel s'opère la recherche
    'Rech: Occurence recherchée
    'Remp: Mot de remplacement
    'Glb: Paramètre optionnel, la recherche se fait sur la globalité ou sur la première occurence. par défaut false
     
    Function Remplace(ByVal Mot As String, ByVal Rech As String, ByVal Remp As String, Optional ByVal Glb As Boolean) As String
    Dim Reg As New VBScript_RegExp_55.RegExp
    Dim blGlobal As Boolean
     
    If IsMissing(Glb) Then
        blGlobal = False
    Else
        blGlobal = Glb
    End If
    With Reg
        .Pattern = "(" & Rech & ")(\d{1,})"
        .Global = blGlobal
        Mot = .Replace(Mot, "$1" & Remp)
    End With
    Set Reg = Nothing
    Remplace = Mot
    End Function
     
    Public Sub Essai()
    Dim stMot As String, stRech As String, stRemp As String
     
    stMot = "bonjour X1971 toto5 X3 X Xa"
    stRech = "X"
    stRemp = 2011
    Debug.Print Remplace(stMot, stRech, stRemp, True)
    End Sub
    Ci-joint lien intéressant
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

Discussions similaires

  1. [RegEx] Remplacement de chaine dans une sous chaine
    Par fpouget dans le forum Langage
    Réponses: 4
    Dernier message: 23/02/2010, 08h49
  2. Réponses: 4
    Dernier message: 09/03/2008, 15h36
  3. je cherche une sous chaine dans une chaine
    Par avprive dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2005, 01h48
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo