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 :

Regexp et VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut Regexp et VBA
    RE RYU
    pas de mess technique par MP
    pour ton problème

    il y a plusieurs techniques

    en voici quelques unes le nom des fonctions est explicite
    methode avec la fonction replace de vbscript regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
     Dim txt As String, Txt2 As String
        txt = UCase("TOTO_01_REL.Txt")
        MsgBox chiffre_seulement(txt)
    End Sub
    Function chiffre_seulement(txt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "[a-z-A-Z-_?.]": chiffre_seulement = .Replace(txt, ""): End With
    End Function
    methode avec la fonction execute de vbscript.regexp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub test2()
    Dim txt As String, Txt2 As String
        txt = UCase("TOTO_01_REL.Txt")
        MsgBox chiffre_seulementbis(txt)
    End Sub
    Function chiffre_seulementbis(txt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(\d+)": Set Matches = .Execute(txt): chiffre_seulementbis = Matches(0): End With
    End Function
    apres si ta chaine est totalement numeric ou string c'est simple avec VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if isnumeric(chaine) then ......' si elle est numerique ??.
    apres si tu veut savoir avec VBA si il elle est string et si il y a quand meme des numériques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isnumeric(chaine) =false and chaine like "[0-9]" then  msgbox "cette chaine n'est pas numerique mais comporte des chiffre "
    voila t'a tout
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Merci Patrick ,

    En plus la partie regex m’intéresse
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re c'est un object assez facile a utiliser quand on connais les constantes a utiliser dans le pattern


    ca peut résoudre des problème très complexe dans le traitement d'une chaine que les fonctions interne vba ne font pas

    ici on est dans des exemples hyper simples

    re
    voila un exemple a peine un peu plus complexe bien qu'avec vba on aurait pu faire pareil c'est juste pour te montrer regarde bien les pattern

    tu veux savoir ce que fait toto

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub que_fait_toto()
        Dim txt As String, patt As String
        txt = UCase("TOTO va a la picine 3 fois par semaine et 10 fois par mois au judo ")
        patt = "(\d){1} (\D+) "
        rep1 = extractionchaine_precise(txt, patt)
        patt = "(\d){2} (\D+)"
        rep2 = "il va " & extractionchaine_precise(txt, patt)
        MsgBox "toto va  a la picine " & rep1 & vbCrLf & rep2
     
    End Sub
     
    Function extractionchaine_precise(txt As String, patt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = patt: Set Matches = .Execute(txt): extractionchaine_precise = Matches(0): End With
    End Function
    maintenant imaginons que tu veuille supprimer tout les caractères spéciaux du genre ",;:§./\" etc.... dans tes cellules en un coup, imagine avec des replace VBA

    avec vbscript.regexp c'est plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test2()
    Dim i As Long, Txt As String, Txt2 As String
      For i = 2 To ThisWorkbook.ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
        Txt = StrConv(Cells(i, 1).Value, vbProperCase)
        With CreateObject("VBScript.RegExp")
          .Global = True
          '.IgnoreCase = True
          .Pattern = "[^\w]"
          Txt2 = .Replace(Txt, "")
        End With
        Cells(i, 1).Value = Txt2
      Next i
    End Sub
    voila un bon debut pour commencer a te familiariser avec cet object
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    oui j'imagine, avec un peu d entrainement ça doit pas être trop compliqué, mais bon faut pas se tromper quand on fait son regex
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    tiens un des plus dificile les dates!!
    regarde bien le texte de depart et comme regex fait bien la difference entre la date et le budjet vacance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub a_quelle_date_toto_est_parti()
        Dim txt As String, patt As String
        txt = UCase("TOTO s'ennuyait alors le 25/07/2016 il est partie en colonie avec 1/3 de son budjet vacance ")
        patt = "(\d){2}/(\d){2}/(\d){4}"
        rep1 = extractionchaine_precise2(txt, patt)
         MsgBox "il est partie le : " & rep1 & vbCrLf & rep2
     
    End Sub
    Function extractionchaine_precise2(txt As String, patt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = patt: Set Matches = .Execute(txt): extractionchaine_precise2 = Matches(0): End With
    End Function
    tu devrais comprendre le pattern la

    tiens le texte de depart est encore plus precis et vbregexp va bien faire la difference pour la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub a_quelle_date_toto_est_parti()
        Dim txt As String, patt As String
        txt = UCase("TOTO s'ennuyait alors le 25/07/2016 il est partie en colonie il a dit 1/2/3 bye bye !!")
        patt = "(\d){2}/(\d){2}/(\d){4}"
        rep1 = extractionchaine_precise2(txt, patt)
         MsgBox "il est partie le : " & rep1 
    End Sub
    Function extractionchaine_precise2(txt As String, patt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = patt: Set Matches = .Execute(txt): extractionchaine_precise2 = Matches(0): End With
    End Function
    toi c'est les tableaux ton dada moi c'est ca

    si j'avais du chercher la date en VBA le plus simple aurais été ceci: ca te donne une idée de la puissance de vbscript.regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    txt = UCase("TOTO s'ennuyait alors le 25/07/2016 il est partie en colonie il a dit 1/2/3 bye bye !!")
     For i = 1 To Len(txt)
     If IsNumeric(Mid(txt, i, 1)) Or Mid(txt, i, 1) = "/" Then madate = madate & Mid(txt, i, 1)
    Next
    MsgBox Mid(madate, 1, 10)
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    Merci Patrick, là j'ai de quoi faire pour un débur
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. VBA Regexp et couleur
    Par cadjer dans le forum Excel
    Réponses: 3
    Dernier message: 26/09/2016, 11h59
  2. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  3. [VBA-E] [Excel] Tri automatique
    Par bovi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/10/2002, 10h19
  4. [VBA-E] [Excel] Filtrer le donnees d'une sheet
    Par donia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/09/2002, 10h55
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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