1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

Recherche dans une chaine de caractère + extraction de la donnée

Discussion dans 'Forum Excel' démarrée par MERLIN, 12 Mars 2012.

  1. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Là il s'agit, dans cette fonction, d'un détail superfétatoire. Que cette mise en forme de la chaîne y soit ou pas, c'est strictement pareil quand on part du principe qu'à l'origine la chaîne a bien été "tapée" !
    C'est uniquement pour le fun. Mais pour comprendre, encore faut-il ouvrir la PJ.
    Allez Staple ! Un peu le sens de l'humour. La vie est courte tu sais !
    Mais si tu veux que l'on te cite à chaque occasion, pas de problème.

    PS : tu auras peut-être remarqué que dans les macros et autres UDF qui accompagnent mes PJ, je cite TOUJOURS les auteurs (parfois je m'y inclus, narcissisme oblige !). Vérifie !
    Mais de là à citer tout le monde depuis le début...
    On résumera ainsi : ¡GRACIAS AL FORUM DE EXCEL DOWNLOADS!
    Et comme ça tout le monde il est content !
     
    Dernière édition: 12 Janvier 2018
  2. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    22901
    "J'aime" reçus :
    861
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re

    Si c'est là, ta pratique usuelle, il manquait donc dans ton message par exemple, un truc du genre
    "Pour ce faire, j'ai repris la procédure de Staple et l'ai modifiée, comme j'ai pu."

    Voilà, donc j'ai vérifié pour le fun ;)

    NB: Ce qui m'intriguait c'est que tu ne cites que certains d'entre nous.
    Tu dois avoir tes préférences.
     
  3. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Staple, je vous ai compris !
    Code (Visual Basic):

    Function ExtractTelPortable(maChaine As String, x As Byte, sep As String, Optional tel As Boolean = True) As String
    'Supprime dans une chaîne certains caractères
    'Staple1600 Soló

    Dim MesBoSep, a, n As Byte

        '*************** Épurage de la chaîne initiale ***************
        MesBoSep = Array(".", ",", ";", "-", "/", "|", "~", "*", "+")
        For Each a In MesBoSep
            maChaine = Replace(maChaine, a, " ")
        Next
        '*************************************************************
        ExtractTelPortable = maChaine
    End Function
     

    Je n'ai aucun problème avec ta fonction.
    Mai j'en ai avec la mienne :
    Code (Visual Basic):

    Function ExtractTelPortable(maChaine As String, x As Byte, sep As String, Optional tel As Boolean = True) As String
    'Extraie des séries de Nº d'une chaîne
    'Magic_Doctor
    '- maChaine : la chaîne contenant des séries de Nº
    '- x : position du Nº que l'on recherche dans la chaîne
    '- sep : séparateur que l'on veut placer entre les groupes de chiffres d'un même Nº
    '- tel : par défaut "True" (--> portables). Si "False", alors il s'agit de Nº de postes fixes

    'J'ai privilégié les portables, car je pense que les postes fixes sont voués à disparaître... It's good for Big Brother!
    'Et pour bien nous casser les couilles quand on arrive en France et que l'on ne peut prévenir personne à la Gare du Nord où il n'y a plus une seule cabine téléphonique...!!!

    Dim n As Byte, i As Integer, j As Integer, trouve As String, cadena As String

    'En supposant que "maChaine" ait été bien écrite, à savoir :
    '- groupes de chiffres séparés uniquement par un seul espace
    '- Nº (ensembles de groupes de chiffres) séparés par n'importe quoi sauf un espace
     
        For n = 1 To x
            For i = 1 To Len(maChaine)
                trouve = Mid(maChaine, i, 1)
                If IsNumeric(trouve) Then
                    maChaine = Right(maChaine, Len(maChaine) - i + 1) 'on supprime tout ce qui n'est pas numérique à gauche de la chaîne
                    For j = 1 To Len(maChaine)
                        trouve = Mid(maChaine, j, 1)
                        If trouve <> " " And IsNumeric(trouve) = False Then
                            cadena = Trim(Left(maChaine, j - 1)) 'on récupère uniquement la 1ère série de chiffres (à gauche) de "maChaine" : celle qui nous intéresse
                            maChaine = Mid(maChaine, Len(cadena) + 1, Len(maChaine) - Len(cadena)) '"maChaine" est amputée de sa 1ère série de chiffres
                            Exit For
                        End If
                    Next
                    Exit For
                End If
            Next
        Next
     
        If sep = "Nada" Then sep = "" 'facultatif. Ici, uniquement pour les besoins de la liste déroulante de la feuille où "Nada" = rien du tout
     
        If tel Then 'on ne veut récupérer que les Nº de portables
            ExtractTelPortable = IIf(Left(cadena, 1) <> 0, "", Replace(cadena, " ", sep)) & "     | n = " & n
        Else 'on ne veut récupérer que les Nº de postes fixes
            ExtractTelPortable = IIf(Left(cadena, 1) = 0, "", Replace(cadena, " ", sep)) & "     | n = " & n
        End If
    End Function
     
     
    Dernière édition: 13 Janvier 2018
  4. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    22901
    "J'aime" reçus :
    861
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re

    Comme dit dans l'autre message, c'est un problème typique qui fleure bon les expressions régulières: à savoir RegExp
    Il suffit donc de trouver le bon pattern.

    Un exemple retrouvé dans mes archives en guise d'illustration
    Code (Visual Basic):

    Sub Macro_RegExp()
    Dim str$, n&, i&, cmat As Object, ws As Worksheet
    Set ws = ActiveSheet
    'générer données de test
    ws.Cells.Clear
    ws.Range("A1").FormulaR1C1 = _
            "=""toto""&ROW()&CHAR(10)&""toto1@domain.com""&""123-456-""&TEXT(ROW(),""0000"")&CHAR(10)&""1 rue des 1001 35000 RENNES""&CHAR(10)&""525-965-""&TEXT(ROW(),""0000"")"
    ws.Range("A1").AutoFill Destination:=Range("A1:A100"), Type:=xlFillDefault
    'extration numéro de tel
    With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        'Numéro de tel avec ce format : ###-###-####
        .Pattern = "[0-9,\-]{12}"
            For i = 2 To ws.Cells(Rows.Count, "A").End(xlUp).Row
            str = ws.Cells(i, "A").Value2
                If .Test(str) Then
                Set cmat = .Execute(str)
                For n = 0 To cmat.Count - 1
                ws.Cells(i, Columns.Count).End(xlToLeft).Offset(0, 1) = cmat.Item(n)
                Next n
                End If
            Next i
    End With
    ws.Range("A1:A100").WrapText = True
    End Sub
     
    Dernière édition: 12 Janvier 2018
  5. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Re,

    J'ai laissé tomber en ce moment les "Patterns".
    Ce que je voudrais comprendre, c'est pourquoi ce problème avec la fonction précédente qui, une fois le problème réglé (si tant est que ce soit possible de le régler...), marchera très bien, quel que soit le cas de figure.
     
    Dernière édition: 13 Janvier 2018
  6. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    22901
    "J'aime" reçus :
    861
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
  7. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Bonjour,

    Dommage que personne n'ait pu m'expliquer le pourquoi du comment la boucle de ma fonction ne marchait pas parfaitement. Même si finalement ce n'est pas bien grave, ça me turlupine quand même.
    Bref, plutôt que de tourner en rond, je pose la question sur un autre forum (loin, très loin pour les traqueurs de ceux qui osent poser la même question sur plusieurs forums...). Là, on ne me donne toujours pas d'explication au sujet de ce qui cloche dans ma fonction ; en revanche on me propose une solution, mais via les expressions rationnelles ("Patterns"), auxquelles j'avais fini par renoncer. J'avoue n'avoir pas très bien compris la syntaxe du "Pattern", mais enfin ça marche du tonnerre ! Et c'est court !!
    Code (Visual Basic):

    Function ExtractTelPortable(maChaine As String, pos As Long, sep As String, Optional tel As Boolean = True) As String
    'Extraie des Nº (séries de chiffres regroupés) d'une chaîne
    'pgc01
    '- maChaine : la chaîne contenant des séries de Nº
    '- pos : position du Nº que l'on recherche dans la chaîne
    '- sep : séparateur que l'on veut placer entre les groupes de chiffres d'un même Nº
    '- tel : par défaut "True" --> portables. Si "False" --> postes fixes

    Dim s As String

    On Error GoTo Exit_Function
    With CreateObject("VBScript.RegExp")
        .Pattern = "\b\d(\d| )*\b"
        .Global = True
        s = .Execute(maChaine)(pos - 1)
    End With

    ExtractTelPortable = Replace(IIf(tel Xor (Not s Like "0*"), s, ""), " ", sep)
    Exit_Function:
    End Function
     
     
  8. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    22901
    "J'aime" reçus :
    861
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Bonsoir le fil, le forum

    @Magi_Doctor
    Ça me rassure.
    J'avais donc le nez fin ;)

    PS: Tout bon amateur d'Excel connait MrExcel
    https://www.mrexcel.com/forum/excel-questions/1038790-problem-loop.html
     
  9. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Staple, freine ton égo.
    Tout le monde a le nez fin.
    Depuis le post #9 où je relance le fil en y rajoutant certaines conditions, je précise bien que je tente d'y parvenir au moyen de la procédure de BOISGONTIER, autrement dit des "Patterns".
    J'étais arrivé à quelque chose, mais de fort tordu. Normal, quand on n'est pas habitué à ce langage.
    Je me résigne en essayant de résoudre le problème par un autre moyen, et là j'y suis presque arrivé (cf. ma fonction qui marche presque).
    Qu'on se parachute sur un fil, je veux bien, mais encore faut-il survoler l'épistémologie du fil. Et là tu aurais compris que depuis le fil de BOISGONTIER, tout le monde a le nez fin !

    Tiens, pour te faire plaisir :

    Code (Visual Basic):

    Function ExtractTelPortable(maChaine As String, pos As Long, sep As String, Optional tel As Boolean = True) As String
    'Extraie des Nº (séries de chiffres regroupés) d'une chaîne
    'Staple1600
    '- maChaine : la chaîne contenant des séries de Nº
    '- pos : position du Nº que l'on recherche dans la chaîne
    '- sep : séparateur que l'on veut placer entre les groupes de chiffres d'un même Nº
    '- tel : par défaut "True" --> portables. Si "False" --> postes fixes

    Dim s As String

    On Error GoTo Exit_Function
    With CreateObject("VBScript.RegExp")
        .Pattern = "\b\d(\d| )*\b"
        .Global = True
        s = .Execute(maChaine)(pos - 1)
    End With

    ExtractTelPortable = Replace(IIf(tel Xor (Not s Like "0*"), s, ""), " ", sep)
    Exit_Function:
    End Function
     
    Et pour aller fouiner où j'ai bien pu poser la question... Tu as vraiment du temps à perdre !
    Parfois on se sent cerné...
     
  10. Staple1600

    Staple1600 XLDnaute Barbatruc

    Inscrit depuis le :
    24 Juin 2005
    Messages :
    22901
    "J'aime" reçus :
    861
    Habite à:
    Roahzon
    Utilise:
    Excel 2013 (PC)
    Re

    @Magic_Doctor
    Si je devais freiner au niveau ego, tu devrais accélérer au niveau humour et dérision.
    Je n'ai rien dit autre que ta question était une question typique RegExp
    simplement pour que tu ré-envisages cette piste que tu avais mis de côté.
    Et j'ai juste évoqué mes narines, pas mon ego.
    (Le tout sur ton de l'humour: d'où l'émoticone et les jeux de mots dans mon message précédent...)

    NB: Que vient faire ici l'épistémologie?

    PS:Je n'ai pas besoin de fouiner
    Je suis également membre du forum mrexcel
    (comme d'une grande part des forums anglophones)
     
  11. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Pour montrer quand même au pélerin qui passerait par là le résultat final.
     

    Pièces jointes:

  12. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    23565
    "J'aime" reçus :
    1781
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour le fil, le forum,

    Il y a une chose que peu de gens semblent avoir intégré : la création de l'objet RegExp prend du temps et avec une fonction entrée dans un grand nombre de cellules (10 ou 20000) c'est insupportable.

    Pour y remédier il suffit de mémoriser l'objet :
    Code (Text):
    Dim o As Object 'mémorisation pour gagner du temps sur la création

    Function ExtractTelPortable(maChaine As String, pos As Long, sep As String, Optional tel As Boolean = True) As String
    Dim s As String
    On Error GoTo Exit_Function
    If o Is Nothing Then
      Set o = CreateObject("VBScript.RegExp")
      o.Pattern = "\b\d(\d| )*\b"
      o.Global = True
      s = o.Execute(maChaine)(pos - 1)
    End If
    ExtractTelPortable = Replace(IIf(tel Xor (Not s Like "0*"), s, ""), " ", sep)
    Exit_Function:
    End Function
    https://www.excel-downloads.com/thr...nction-dun-intervalle.20013756/#post-20103355

    A+
     
  13. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Bonjour job, le forum,

    M'initiant depuis peu à ces histoires d'expressions régulières, je reconnais qu'en général, dans les quelques procédures que j'ai pu lire, l'objet Pattern est déclaré et mémorisé dès le début de la procédure.
    J'ai repris textuellement la routine qu'aimablement pgc01 m'avait rédigée, et j'avais été étonné que le l'objet Pattern n'ait pas été déclaré dès le départ. Je me suis dit, "tiens, une variable de moins déclarée..." Mais en fait, chaque fois il faut recréer cet objet, puisqu'il n'a pas été mémorisé. C'est sûr que quand on le recréé 10.000 fois d'affilé... :eek:

    Mais si quelqu'un pouvait m'expliquer pourquoi ma fonction déconne. Question d'honneur... :)
     

    Pièces jointes:

  14. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    23565
    "J'aime" reçus :
    1781
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Magic_Doctor,

    Ta fonction plante parce que l'objet o n'est pas déclaré en haut du module (mon message précédent).

    Par ailleurs créer la fonction SingleSpaceBetweenWonderfulWords est une pure hérésie.

    Car il y a la fonction Application.Trim : c'est la fonction Excel SUPPRESPACE (ESPACIOS).

    A+
     
  15. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Re,

    Tu as tout à fait raison, job. Mais je pensais que "Trim" virait uniquement les espaces en début et fin de chaîne. Autant pour moi !
    Mais reconnaissons que "SingleSpaceBetweenWonderfulWords" ça en jette !

    Je faisais allusion à une autre fonction (celle-ci n'étant pas de moi) ; celle du post #17, que j'avais rédigée, en désespoir de cause, ne sachant plus quoi faire evec les expressions régulières.

    Enfin, je viens de mettre, dans la procédure où tu viens d'intervenir, "Dim o As Object" sous "Option Explicit" (c'est bien ce que j'aurais dû faire ?). La fonction ne me renvoie plus rien. Où me serais-je encore planté ?
     
  16. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    23565
    "J'aime" reçus :
    1781
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Re,

    Bah j'ai fait une erreur grossière dans la fonction que j'ai mise au post #32.

    Le End If est mal placé, il faut le mettre bien sûr avant o.Execute :
    Code (Text):
    Dim o As Object 'mémorisation pour gagner du temps sur la création

    Function ExtractTelPortable(maChaine As String, pos As Long, sep As String, Optional tel As Boolean = True) As String
    Dim s As String
    On Error GoTo Exit_Function
    If o Is Nothing Then
      Set o = CreateObject("VBScript.RegExp")
      o.Pattern = "\b\d(\d| )*\b"
      o.Global = True
    End If
    s = o.Execute(maChaine)(pos - 1)
    ExtractTelPortable = Replace(IIf(tel Xor (Not s Like "0*"), s, ""), " ", sep)
    Exit_Function:
    End Function
    A+
     
  17. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    OK job,
    Donc au final, tout corrigé, ça donnera ceci (cf. PJ).

    ¡Ay Caramba! Mais pourquoi ma fonction (Post #17) ne marche pas ?
     

    Pièces jointes:

    Dernière édition: 14 Janvier 2018 à 19:40
  18. laurent950

    laurent950 XLDnaute Impliqué

    Inscrit depuis le :
    11 Janvier 2009
    Messages :
    618
    "J'aime" reçus :
    19
    Sexe :
    Masculin
    Bonjour Magic,

    J'ai substitué la fonction sélect case, c'est peux être plus simple de codé en tableau.
    Le principe est bien là, je récupère à présent les numéros de téléphones en fonction des conditions.
    Par contre il faut étudier les positions des numéros de téléphones dans l'ordre de la phrase en fonction du numéro de position choisie par votre fonction, je n'en suis pas encore arrivé là mais j'ai l'idée je vais y arriver.
    Est ce que ce début de code vous semble plus claire ?

    Le soucis de la fonction CreateObject("vbscript.regexp") restitue la cible ou les cibles sous forme de tableau mais pas dans un ordre. c'est a dire que :
    ce numéro de téléphone : 094 54 20 44 ---->>> à la position Numéro 2 dans la phrase mais qui en réalité et enregistré dans une variable tableau qui correspond a un autre numéro 0 pour la recherche CreateObject("vbscript.regexp") C'est a dire qu'il faut trouver une relation par la suite.
    a creuser !

    je ferais quelque choses avec cela plus tard d'ou mon idée mais a creuser encore !
    ' Debug.Print "[$" & j + 1 & "]", TabMatch(i).SubMatches(j)
    'Debug.Print TabRch(i), TabMatch(i).SubMatches(j)


    Code (Visual Basic):

    Option Base 1
    Sub Laurent1()
    ' initianlisation des variables
    Dim Chaine As String
    'Pitaluga a plusieurs Nº de téléphone : 06 66 99      55 76  &  094 54 20 44  &  099    925 301  &  06 300 200 11
        Chaine = "Pitaluga a plusieurs Nº de téléphone : 06 66 99      55 76  &  094 54 20 44  &  099    925 301  &  06 300 200 11"
    ' C'est la propriété qui définit le motif sur lequel se fait la recherche.
        'strPattern = "\d{2}\s"    '2 chiffres & espace(s)
        'strPattern = "\d{2,3}\s"  '2 ou 3 chiffres & espace(s)
        'strPattern = "\d{3}\s"    '3 chiffres & espace(s)
    'TabRch = Array("(\d{2}\s{1,6}){5}", "(\d{2,3}\s\*{4})", "(\d{3}\s\*{3})")
    'TabRch = Array("(\d{2}\s{1,6}){5}", "(\d{2,3}\s){4}", "(\d{3}\s{1,4}){3}")
    TabRch = Array("(\d{2}\s*){5}", "(\d{2,3}\s*){4}", "(\d{3}\s*){3}")

    '*** ------------------------------------------------------------------------------
    ' Tableau d'objet
    Dim Tabreg() As Object
    ReDim Tabreg(LBound(TabRch) To UBound(TabRch))
    Dim TabMatch() As Object
    ReDim TabMatch(LBound(TabRch) To UBound(TabRch))
    Dim TabMatches() As Object
    ReDim TabMatches(LBound(TabRch) To UBound(TabRch))
    '*** ------------------------------------------------------------------------------
    For i = LBound(Tabreg) To UBound(Tabreg)
        Set Tabreg(i) = CreateObject("vbscript.regexp")
            ' ici laissé pour l'ordre !
            'Chaine = "Pitaluga a plusieurs Nº de téléphone : 06 66 99      55 76  &  094 54 20 44  &  099    925 301  &  06 300 200 11"
            'Le Pattern est le motif que l'on recherche
            Tabreg(i).Pattern = TabRch(i)
            ' Active ou non la recherche sur plusieurs lignes à la fois / La propriété est mise sur False par défaut.
            Tabreg(i).MultiLine = False
            ' Précise si la recherche est sensible ou non à la casse (majuscules/minuscules) / La propriété est mise sur False par défaut.
            Tabreg(i).IgnoreCase = True
            ' Précise si la recherche porte sur la première occurence ou sur toutes / La propriété est mise sur False par défaut.
            Tabreg(i).Global = True
            'le test renvoie un Boolean (parfait pour notre fonction Booléenne!!!)
            MsgBox Tabreg(i).test(Chaine)
            ' Cette méthode permet d'explorer les occurences qui vérifient le Pattern.
            Set TabMatches(i) = Tabreg(i).Execute(Chaine)
                For Each TabMatch(i) In TabMatches(i)
                    Debug.Print "source >>", TabMatch(i).Value
                        For j = 0 To TabMatch(i).SubMatches.Count - 1
                            ' Debug.Print "[$" & j + 1 & "]", TabMatch(i).SubMatches(j)
                            'Debug.Print TabRch(i), TabMatch(i).SubMatches(j)
                    Next j
                Next TabMatch(i)
    Next i
    '*** ------------------------------------------------------------------------------
    End Sub
     
    Ps : C'est très intéressante mais pas si simple mais je cherche aussi, au plaisir de partager avec vous
    aussi le code est en dur donc pour test est compréhension j'adapterais plus tard au donné lié à votre feuille excel en relation avec votre fonction

    Laurent
     
    Dernière édition: 14 Janvier 2018 à 22:57
  19. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    Bonjour laurent950,

    Je ne sais pas si vous avez téléchargé la PJ de mon dernier post.
    Je pense que le problème est réglé par le biais d'un "Pattern" ad hoc (entre nous, il fallait le trouver celui-là... quand on ne maîtrise pas ce type de syntaxe). Quelle que soit la chaîne, les numéros sont prélevés théoriquement suivant que ce soient des portables ou des postes fixes.
    Je dis théoriquement, parce que j'avais complètement oublié qu'en France les numéros de postes fixes commencent eux aussi par "0", comme ceux des portables. Bon, on ne va pas refaire le monde, mais n'aurait-il pas été plus simple :
    - numéros qui commencent par 0 --> portables
    - numéros qui commencent par un autre chiffre --> poste fixe
    Comme ici en Uruguay.
    Et qu'on ne me dise pas que ce n'était pas possible ! Après tout, on a bien marché sur la lune...
    Au jour d'aujourd'hui, il me semble qu'en France (Wikipedia) les numéros de portables peuvent commencer par "06" ou "07" (le ou les Nº qui suivent sont des caractéristiques de l'opérateur).
    Donc, le casse-tête continue. Mais c'est en effet et intéressant (j'aurais appris des choses) et amusant. D'autant plus que ça ne sert à rien...
    Pour résumer, la procédure de la PJ marche très bien pour l'Uruguay, mais pour la France, ce n'est pas encore gagné.
    À noter que le classement des numéros, suivant qu'ils soient dédiés à des portables ou pas, n'a en fait que peu d'importance. L'essentiel est de récupérer ces numéros tout en les distingant.
     
    Dernière édition: 15 Janvier 2018 à 09:03
  20. Magic_Doctor

    Magic_Doctor XLDnaute Barbatruc

    Inscrit depuis le :
    2 Juin 2005
    Messages :
    2071
    "J'aime" reçus :
    19
    Habite à:
    Montevideo
    Utilise:
    Excel 2007 (PC)
    J'espère avoir réglé le problème pour la France.
     

    Pièces jointes:

Partager cette page