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 :

Expression régulière en vba?


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut Expression régulière en vba?
    Bonjour,
    j'ai actuellement une macro que j'ai crée qui teste des noms de fichiers et qui surveille la forme de ceux ci. Là ou j'ai un problème c'est que je voudrais pouvoir détecter des chiffres de 0 à n fois ( l'équivalent de * en expression régulière ).
    Voici ma fonction (simplifiée) qui teste le nom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'Fonction qui verifier si le nom du fichier est un nom de fichier valide
    Function NomFichierValide(NomFichier) As Boolean
    NomFichierValide = 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]#*") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]##*") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]###*") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]####*")
    End Function
    J'en suis rendu à 8 chiffres maximum dans ma fonction complète et je voudrais bien pouvoir mettre une fonction généraliste. J'ai déjà pensé faire une boucle sur toute la fin et tester caractère par caractère si celui ci est un chiffre ou alors d'utiliser la fonction val pour reconnaitre le nombre à partir du 5eme caractère.
    J'attend vos conseils pour une solution plus légère.
    Merki beaukoup

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    si je comprend, ton fichier doit avoir 4 lettres de A à Z, puis une suite de chiffres ?
    Pour l'instant, ta fonction n'est pas bonne :
    Si le nom est juste pour la dernière condition, il est forcément juste pour la seconde(4 lettres+ 1 chiffre+ tout le reste)
    Donc, si tu expliquais ce que tu veux obtenir comme résultat ?
    Quel fichier ne sont pas bons, et surtout pourquoi !
    A+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Autant pour moi, à trop simplifier j'ai mis des bétises.
    Ce que je veux en fait c'est 4 lettres (constant ca) et ensuite ca se complique.
    Pour mieux comprendre voilà le code plus réel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Fonction qui verifier si le nom du fichier est un nom de fichier valide
    Function NomFichierValide(NomFichier) As Boolean
    NomFichierValide = 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]#") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]#_*") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]##") Or
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]##_*") Or 
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]###") Or
    (NomFichier Like "[A-Z][A-Z][A-Z][A-Z]###_*") Or 
    End Function
    Ce qui en francais ferait:
    - 4 lettres
    - 0 à n chiffres
    - un tiret-bas (suivi de n'importe quoi) ou rien

    Exemple:
    FACT002 : Valide
    FACT0004_blablabla : Valide
    FACT00S : Non Valide
    FACT0D4_blabla : Non Valide

  4. #4
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Salut,

    Si ça peut t'aider, il y a un tutoriel sur les expressions régulières ici

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Kikumaru et le forum
    un petit essai
    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
     
    Function NomFichierValide(NomFichier As String) As Boolean
    Dim Txt As String
    Application.Volatile
    NomFichierValide = True
    If Len(NomFichier) < 4 Or _
                Not (Left(NomFichier, 4) Like "[A-Z][A-Z][A-Z][A-Z]") Then _
                NomFichierValide = False
    If Len(NomFichier) > 4 Then
        If InStr(1, NomFichier, "_") > 0 Then
            Txt = Mid(NomFichier, 5, InStr(1, NomFichier, "_") - 5)
        Else
            Txt = Right(NomFichier, Len(NomFichier) - 4)
        End If
        If Not (Txt Like Left("########################################", Len(NomFichier))) Then _
           NomFichierValide = False
    End If
    End Function
    J'ai tester le fonctionnement en sub et Range, mais pas en Function.
    Mais y a pas de raison

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup Gorfael d'avoir passé du temps pour ma solution mais j'ai trouvé le moyen de faire des expressions régulières grâce à zoidy et du coup je retombe sur ce que je connais. Voilà en gros ce que ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function NomFichierValide(nomFichier As String) As Boolean
        Dim reg As New VBScript_RegExp_55.RegExp
        reg.Pattern = "^[A-Z][A-Z][A-Z][A-Z](\d)*(($)|_)"
        NomFichierValide = reg.Test(nomFichier)
    End Function
    Pour ceux qui décrypte pas ca bien (ca peut servir à quelqu'un d'autre qui sait),
    ^ donne le début de chaine
    (\d)* définit la suite de 0 à n chiffres
    ( ($) | _ ) définit soit la fin de chaine [FACT0003] soit un tiret-bas suivi de n'importe quoi [FACT01_blablabla]
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Expression régulière en VBA
    Par abso_ dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 22/01/2014, 13h46
  2. [XL-2007] Expression régulière vba excel
    Par jeanne2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2010, 06h27
  3. Expression régulière et vba
    Par qltmi dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/12/2008, 17h49
  4. VBA et expressions régulières
    Par zoidy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/08/2007, 15h29
  5. [RegEx] Traduire des "expression régulières" VBA en PHP
    Par jcachico dans le forum Langage
    Réponses: 13
    Dernier message: 19/01/2006, 14h02

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