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

Excel Discussion :

REGEX MATCH sur Teams en français


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Décembre 2020
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Décembre 2020
    Messages : 38
    Par défaut REGEX MATCH sur Teams en français
    Bonjour,

    Je ne parviens pas à utiliser la formule "REGEX_MATCH" sur Excel en français sur la plateforme entreprise Teams...
    Quand je mets ma formule =REGEX_MATCH(C2;"Q\d{​​8}​​") j'obtiens un #NOM?

    Sauriez-vous pourquoi et par quelle formule je peux la remplacer s'il vous plait ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    D'après le site Excel-pratique :
    Remarque : cette fonction nécessite l'installation du pack de fonctions XLP
    J'imagine que ce pack n'est pas accessible lorsque vous manipulez un fichier partagé via Teams.

    Côté solution de contournement, je n'ai rien de très propre à proposer. Le plus simple est de passer par les fonctions classiques, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SIERREUR(ET(NBCAR(C2)=9;GAUCHE(C2;1)="Q";ESTNUM(CNUM(DROITE(C2;8)));CNUM(DROITE(C2;8))=ENT(CNUM(DROITE(C2;8))));FAUX)
    Vérifiez bien sur quelques exemples que le comportement obtenu est bien celui attendu.

  3. #3
    Membre Expert Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 579
    Par défaut
    Bonjour,

    XLP est un add-ins Excel à installer - ça ne fait pas partie d'Excel.
    Ce qui peut être embêtant à l'usage. Les autres utilisateurs des feuilles contenant REGEX devront avoir ce ADD-INS.

    Curt

  4. #4
    Membre averti
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Décembre 2020
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Décembre 2020
    Messages : 38
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Bonjour,

    D'après le site Excel-pratique :

    J'imagine que ce pack n'est pas accessible lorsque vous manipulez un fichier partagé via Teams.

    Côté solution de contournement, je n'ai rien de très propre à proposer. Le plus simple est de passer par les fonctions classiques, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SIERREUR(ET(NBCAR(C2)=9;GAUCHE(C2;1)="Q";ESTNUM(CNUM(DROITE(C2;8)));CNUM(DROITE(C2;8))=ENT(CNUM(DROITE(C2;8))));FAUX)
    Vérifiez bien sur quelques exemples que le comportement obtenu est bien celui attendu.
    Merci beaucoup
    Par contre, la formule proposée plus haut ne fonctionne pas car je n'ai pas juste "Q12345678" dans la cellule, ça peut etre le bloc de départ ou de fin mais aussi le bloc en milieu de phrase. La cellule peut-être "truc bidule Q12345678 machin". @Ben_L


  5. #5
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 249
    Par défaut
    Bonjour

    Une possibilité pour renvoyer la liste des Q12345678 contenus dans une cellule est d'utiliser les fonctions STXT, SEQUENCE et FILTRE
    avec STXT et SEQUENCE on génère la liste de toutes les chaines de 9 caractères de la cellule
    puis on filtre avec FILTRE suivant les critères GAUCHE(...)="Q" et CNUM(DROITE(...))= est un entier

    Comme on a besoin plusieurs fois de l'ensemble des chaines de 9 caractères, on pourrait s'en passer mais l'utilisation de la fonction LET est intéressante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    =LET(
    chaîne_9_caractères;STXT(A1;SEQUENCE(NBCAR(A1));9);
    filtre_1er_caractère;GAUCHE(chaîne_9_caractères)="Q";
    caractères_num;CNUM(DROITE(chaîne_9_caractères;8));
    filtre_8_caractères_entier;SIERREUR(caractères_num=ENT(caractères_num);FAUX);
    FILTRE(chaîne_9_caractères;filtre_1er_caractère*filtre_8_caractères_entier))
    avec votre texte en A1, cela renverra la liste des chaînes répondant aux critères (y compris avec une "," au milieu des chiffres ou un "e" qui est considéré comme une puissance de 10)

    ajoutez un JOINDRE.TEXTE, un SIERREUR suivant le besoin
    Nom : 2021_05_31 Chaine de caractères _ fonction LET.JPG
Affichages : 1735
Taille : 61,2 Ko


    Stéphane

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 249
    Par défaut
    Bonsoir

    plus simple que ma solution précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    =SOMME(
    (STXT(A1;SEQUENCE(NBCAR(A1)-8);1)="Q")*
    SIERREUR(
         CNUM(STXT(A1;SEQUENCE(NBCAR(A1)-8)+1;8))
          =ENT(STXT(A1;SEQUENCE(NBCAR(A1)-8)+1;8));FAUX
         )
    )
    STXT(A1;SEQUENCE(NBCAR(A1)-8);1) pour récupérer le premier caractère d'un groupe de 9
    VRAI si "Q", FAUX sinon

    STXT(A1;SEQUENCE(NBCAR(A1)-8)+1;8) pour récupérer les 8 caractères suivants
    le CNUM(...)=ENT(...) renvoie VFRAI c'est bien une série de 8 chiffres et le SIERREUR remplace les #VALEUR! par des FAUX

    la SOMME du produit des deux termes précédents donne le nombre de chaines dans le texte répondant au critère souhaité.

    Stéphane

  7. #7
    Membre averti
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Décembre 2020
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité

    Informations forums :
    Inscription : Décembre 2020
    Messages : 38
    Par défaut
    Merci Raccourcix, mais je n'ai pas bien compris. Ma demande concerne un matching regex simple c'est à dire par exemple :
    "Q12345678" => TRUE
    "text Q12345678 text" => TRUE
    "text Q12345678 text Q87654321" => TRUE
    "text" (sans "Q12345678") => FALSE

    C'est à dire, simplement vérifier qu'on a un code dans la chaine de caractère et le code comme par Q et suivi de 8 chiffres.

    De plus, la formule proposée ne fonctionne pas, elle me renvoie "#CALC!"

  8. #8
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 249
    Par défaut
    Bonjour

    la formule renvoie une erreur s'il y a moins de 9 caractères auquel cas, elle ne peut évidemment pas contenir un code du type Q12345678
    sinon, le nombre de codes du type Q12345678 dans la chaîne : 0 si pas trouvé, 1, 2, 3...

    pour obtenir les VRAI/FAUX suivant votre besoin, il faut adapter la formule en ajoutant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SIERREUR(SOMME(....)>0;FAUX)
    l'argument FAUX sera renvoyé si la SOMME renvoie une erreur
    sinon, on compare la SOMME à 0 avec l'opérateur ">".
    Stéphane

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    @QuestionsGuy

    Pourrais-tu préciser ta version d'Excel? Vu que tu utilises Teams, je suppose que tu es en XL365 mais cela me plairait que tu le confirmes.

    Pourrais-tu également préciser ta demande? L'utilisation du regex laisse supposer que tu souhaites retrouver toutes les chaines Qxxxxxxxx, mais j'ai des doutes. Si tu souhaites voir si une chaine particulière Qxxxxxxxx est présente, une simple fonction CHERCHE ou TROUVE suffirait. Merci donc de préciser ton propos, en n'hésitant pas à placer l'une ou l'autre copie d'écran...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 668
    Par défaut
    Bonjour,

    J'arrive un peu tard mais il est possible d'utiliser une fonction personnalisée s'appuyant sur les regex de VBA (ce que fait sûrement l'add-in):

    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
    Public Function RegExTest(sourceRg As Range, patternTxt As String)
        Dim reg
        Dim i As Long, j As Long
        Dim tempTab()
     
        Set reg = CreateObject("VBScript.RegExp")
        reg.pattern = patternTxt
     
        If sourceRg.Cells.Count > 1 Then
            tempTab = sourceRg.Value
     
            For i = LBound(tempTab, 1) To UBound(tempTab, 1)
                For j = LBound(tempTab, 2) To UBound(tempTab, 2)
                    tempTab(i, j) = reg.Test(tempTab(i, j))
                Next j
            Next i
            RegExTest = tempTab
        Else
            RegExTest = reg.Test(sourceRg.Value)
        End If
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RegExTest(C2; "Q\d{8}")
    La fonction telle que je l'ai implémentée peut être utilisée de façon "normale" ou matricielle.

Discussions similaires

  1. [AJAX] Un bon livre sur AJAX en français?
    Par Davjack dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2006, 11h06
  2. Hardcore REGEX: surlignement sur une page
    Par FMaz dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2006, 16h43
  3. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24
  4. [Regex] Matching...
    Par billynirvana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/07/2005, 17h16
  5. Réponses: 2
    Dernier message: 13/06/2002, 14h50

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