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 :

Problème avec fonction VBA pour extraire un numéro de téléphone [XL-2010]


Sujet :

Macros et VBA Excel

  1. #21
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Comme demandé, les lignes correspondant à des numéros de téléphone sont les suivantes:
    31,32,33,35,36,37,39,42,44,47,48,50,51,56,57,59,60,61

  2. #22
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    donc elle ont bien toute "tel" ou "cel"?????? meme si il y a 2 numero sur la meme ligne
    on est d'accord???

  3. #23
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    OK
    2 remarque cette ligne 38 c'a m'étonnerais beaucoup que ca soit tapé par un utilisateur et de cette façon en plus

    donc conclusion si la requête t'envoie un fichier exel comme ca et que si on considère que les utilisateur entre n'importe quoi n'importe ou a mon avis il manques des colonnes dans ton fichier exel

    et donc des donnée présente dans le site même mal placé ,mais plus du tout présent dans le fichier excel
    La ligne 38 correspond à la reference dune attestation d'identité. Les lignes 41,45,49,53,55 de la capture correspondent aux numéros de pièces d'identité des clients. Il ressort dc que par défaut les utilisateurs saisissent les coordonnées téléphoniques des clients mais lorsque ces dernières ne sont pas disponibles ils saisissent les ref de la pièce d'identité. L'idéal aurait en effet été de réserver un champ pour les coordonnées téléphoniques et un autres pour les ref des pièces d'identité mais hélas. C donc ds ce fourre tout que ma fonction doit pouvoir récupérer ttes les suites numériques qui s'apparentent à des num de tel (succession de 8 chiffres précédée du prefixe cel ou tel ou d'aucun prefixe en dehors de c 2 là)

    Citation Envoyé par patricktoulon Voir le message
    donc elle ont bien toute "tel" ou "cel"?????? meme si il y a 2 numero sur la meme ligne
    on est d'accord???
    Elles ont soit tel ou cel soit aucun prefixe.
    Cas 1(avec tel) Tel 99.89.99.99/90909090 ou tel:99999999
    Cas 2 (avec cel) cel:55555555
    Cas 3 sans prefixe: 44444444-45454555.
    Pour toutes ces disparités jai choisi ds ma fonction de supprimer tous les caractères spéciaux et d'exploiter
    les groupes de caractere de meme type.

  4. #24
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    la solution que je t'avais donné fonctionnerait très bien dans ce cas
    il faut simplement lui ajouter la version sans préfixé
    sauf que la il y a un problème
    il y a des suite de 8 chiffre qui ne sont pas des tel alors que fait on hein
    je te l'ai dis et je te le redis pour la 3eme fois excel et vba ne devine PAS!!!!!!!

    soit tu accepte d'en perdre quelque un au passage soit tu fait ca ala main
    point barre !!

  5. #25
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Une première approche. C'est pas du 100%...

    Cordialement,

    Philippe
    Fichiers attachés Fichiers attachés

  6. #26
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    slut pjilben
    c'est bien ce que je dis c'est pas du 100%
    dans son cas ca n'est pas possible
    mais je dois parler chinois

  7. #27
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Bonjour
    @patricktoulon
    Mon objectif n'est pas forcément d'avoir du 100% de récupérer le maximum de "numéros"
    repondant aux critères des numéros de téléphone "conformes".
    La première approche de pjilben me donne des résultats très interessants.
    Merci à vous et à pjilben.
    Cela dit je me perds un peu en deroulant la fonction.
    Je ne perçois pas très bien l'utilisatio de paramarray.

    @pjilben,Pourriez vous m'expliquer la
    logique que vous avez implémentée?
    Merci

  8. #28
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    j'ai essayé la version que je t'avais donné j'ai un résultat de 97% sur les dernier exemple de fichier

    je vois pas pourquoi tu persiste
    enfin c'est toi qui vois
    je vais apprendre a parler Français vu que tu ne m'a pas compris

  9. #29
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    J'ai très bien compris. Pas besoin de prendre des cours de français supplémentaires.
    Les 97% sont plus que satisfaisants pour moi.
    Pourrais-je donc avoir la version finale de votre fonction (celle qui donne 97%)
    car la première appliquée à mes données ne me donnait pas un tel résultats.
    Merci pour votre aide.

  10. #30
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Une autre façon rendue possible grâce à la commande SPLIT.
    Fichiers attachés Fichiers attachés

  11. #31
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re une solution 99% voir 100
    re
    alors voila je me suis intéressé au problème que j'ai cité plus tôt dans mes réponses a savoir excel ne devine pas " c'est un fait

    mais il y a des solutions

    les premières versions que je t'avais proposé utilisaient la fonction "SPLIT" en post #7

    cela dit il y avait forcement des paramètres a prendre en compte qui n'allaient pas avec ce principe

    alors j'ai décidé une autre approche

    la fonction replace fera tout aussi bien l'affaire et en plus il n'y a pas d'option d'erreur a gérer

    j'ai donc procédé comme tel:

    1 mise de la colonne B dans une variable tableau , ca change pas par rapport a la version précédente

    2 test de chaque item de ce tableau sur la présence de "tel" ou "cel" : le résultat de ce test vas rendre une variable booléenne true ou false

    je l'ai appellé "cond1"

    3 en cas de non présence des 2 indices "tel" et "cel" :: test sur l'item de sa longueur de chaine (il nous faut 8) et de sa valeur numérique ou pas

    le résultat de ce test va rendre une 2eme variable booléenne a true ou false
    je l'ai appelé "cond2"

    4 test des 2 variables booléenne (cond1/cond2)

    si l'une ou l'autre est a "true " alors c'est bon c'est un numéro de téléphone

    5 sic'est un numéro de téléphone alors on modifie l'item avec un petit nettoyage par des multiple replace et en prime formatage du numéro

    6 a la fin il se peut que la boucle ai trouvé 2 numéros de tel sur la ligne :que cela te tienne formatage intelligible des 2 numéro dans l'item du tableau

    7 au final on pause la variable tableau dans la colonne" D" avec des jolis numéros formatés

    ET LE TOUT EN 9 LIGNES SI ON SUPPRIME LES COMMENTAIRES !!!

    j'ai encore bien bossé moi je vais prendre un café

    colle ca dans un module standard du dernier fichier que tu m'a envoyé
    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
    Sub test2()
     tabloA = Range("c2:c" & Range("c" & Rows.Count).End(xlUp).Row)
     For i = 1 To UBound(tabloA) - 1
    'condition n°1 presence de tel ou cel
    cond1 = IIf(LCase(tabloA(i, 1)) Like "tel*" = True Or LCase(tabloA(i, 1)) Like "cel*" = True, True, False)
    'condition n° 2 :8 caracteres au total  et tous numerique
    'si c'est le cas il peut y avoir des "." des "-" des " "
    cond2 = IIf(IsNumeric(tabloA(i, 1)) = True And Len(Replace(Replace(Replace(tabloA(i, 1), ".", ""), "-", ""), " ", "")) = 8, True, False)
    ' rassemblement des conditions dans une autre variable bolean
    condfinale = IIf(cond1 = True Or cond2 = True, True, False)
    'modification ou desinscription de l'item selon la variable condfinale
    tabloA(i, 1) = Format(IIf(condfinale = True, Replace(Replace(Replace(Replace(Replace(Replace(LCase(tabloA(i, 1)), "tel", ""), "cel", ""), ":", ""), ".", ""), "-", ""), "l", ""), ""), "00 00 00 00")
    '1 derniere verificatio au cas ou il y aurait 2 numero de tel dans la ligne
    tabloA(i, 1) = IIf(tabloA(i, 1) Like "* / *" = True, Format(Left(tabloA(i, 1), 8), "00 00 00 00") & " / " & Format(Right(tabloA(i, 1), 8), "00 00 00 00"), Format(tabloA(i, 1), "00 00 00 00"))
    Next
    Cells(2, 4).Resize(UBound(tabloA), 1) = tabloA
    ' comme tu peut le constater dans le resultat je me suis meme permis de formater le numero et le tout en 9 ligne
     End Sub
    si tu me dis que ca marche pas met toi a la couture

  12. #32
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut une autre solution qui me donne 100% de bon résultat
    voila une autre solution qui te donnera a mon avis satisfaction
    si on considère les critères
    1 présence de tel ou cel tout seul
    2 présence de tel ou cel dans du texte
    3 numéro tout seul 8 caractères ou plus
    voila un code de 10 lignes qui nous donne un résultat de 100%
    j'ai utiliser dans ce code la fonction "Replace","instr" "split","like"
    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
    Sub test4()
        tabloA = Range("c2:c" & Range("c" & Rows.Count).End(xlUp).Row)
        For i = 1 To UBound(tabloA) - 1
            'on supprime tout les caractères spéciaux non souhaités dans la chaine de la valeur de la cellule et on remplace "cel" par "tel"
            tabloA(i, 1) = Replace(Replace(Replace(Replace(Replace(Replace(Replace(LCase(tabloA(i, 1)), ".", ""), "-", ""), " ", ""), ":", ""), "cel", "tel"), "ll", "l"), "/", "")
            'on teste maintenant la présence de "tel" si cest oui alors on garde la partie après "tel
            If InStr(tabloA(i, 1), "tel") > 0 Then tabloA(i, 1) = Split(tabloA(i, 1), "tel")(1)
            ' on teste maintenant les 8 1er caractères si c'est numérique on garde puisque c'est donc un tel ou peut être 2 numéros de tel
            tabloA(i, 1) = IIf(IsNumeric(Left(tabloA(i, 1), 8)) = True, tabloA(i, 1), "")
            'il se peut que même en ayant 8 caractère numérique et plus ca ne corresponde pas a un numéro de tel alors un petit control avec la fonction like sur les lettres de l'alphabet complet décidera si c'est oui ou non
            If tabloA(i, 1) Like "*[a-z]*" = True Then tabloA(i, 1) = ""
            'on teste maintenant la longueur entière du numéro tel si c'est 8 caractères alors le format c'est "00 00 00 00"
            ' si c'est plus que 8 chiffre alors  le format c'est "00 00 00 00" et "tel2: " et "00 00 00 00"
            tabloA(i, 1) = IIf(Len(tabloA(i, 1)) < 9, Format(Left(tabloA(i, 1), 8), "00 00 00 00"), Format(Left(tabloA(i, 1), 8), "00 00 00 00") & "/" & Format(Right(tabloA(i, 1), 8), "00 00 00 00"))
            tabloA(i, 1) = Replace(IIf(tabloA(i, 1) Like "/", "", tabloA(i, 1)), "/", " Tel 2 : ")
        Next
        'on repose le tableau en colonne "D"
        Cells(2, 4).Resize(UBound(tabloA), 1) = tabloA
    End Sub
    et je viens de trouver encore plus simple je suis en train de fignoler

  13. #33
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re un autre code qui donne aussi 100%
    re
    salut
    histoire de te rendre encore plus dingue
    j'ai fait cette sub encore plus courte
    cette version a une option en plus :maintenant si un numéro de téléphone se trouve entre 2 morceaux de chaine de caractères il est trouvé quand même
    en fait la chose était très simple depuis le début

    donc dans cette version on est aller a l'essentiel dans la logique

    1° si il y a tel ou cel alors il y a un numéro :sil il y a un numéro et si le reste du texte après "tel " est numérique alors c'est un ou plusieurs numéros
    si ca n'est pas numérique ca veut dire que le numéro est entre 2 morceaux de chaine donc on prendra les 8 caractères après "tel"
    et tout ca sur la même ligne

    2° ensuite on teste la cellule avec like sur les caractères de tout l'alphabet si c'est oui pas de numéro si c'est non c'est un numéro ou plusieurs
    et enfin

    3° teste de la longueur si c'est 16 caractères c'est 2 numéros si c'est 8 c'est 1 numéro
    et tout ca aussi sur une seule ligne de code
    et voila quand on raisonne logiquement ca devient tout de suite plus simple

    et voila comment en 4 ligne on tri tout foutra de données mélimélo
    bien que la 4 eme ligne apres "formatage" est facultative ca c'est le bonus en vérité seule les 3 1eres lignes suffisent pour le travail que tu a demandé
    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
     
    Sub test5()
        tablo = Range("c2:c" & Range("c" & Rows.Count).End(xlUp).Row)
        For i = 1 To UBound(tablo) - 1
            'on supprime tout les caracteres speciaux non souhaités dans la chaine de la valeur de la cellule et on remplace "cel" par "tel"
            tablo(i, 1) = Replace(Replace(Replace(Replace(Replace(Replace(Replace(LCase(tablo(i, 1)), ".", ""), "-", ""), " ", ""), ":", ""), "cel", "tel"), "ll", "l"), "/", "")
    If InStr(tablo(i, 1), "tel") > 0 Then tablo(i, 1) = IIf(IsNumeric(Split(tablo(i, 1), "tel")(1)), Split(tablo(i, 1), "tel")(1), Left(Split(tablo(i, 1), "tel")(1), 8))
     If tablo(i, 1) Like "*[a-z]*" = True Then tablo(i, 1) = ""
     
    'formatage 
    tablo(i, 1) = IIf(Len(tablo(i, 1)) = 16, Format(tablo(i, 1), "00 00 00 00 -- 00 00 00 00"), Format(tablo(i, 1), "00 00 00 00"))
    Next
    'on repause le tableau en colonne "D"
        Cells(2, 4).Resize(UBound(tablo), 1) = tablo
    End Sub
    les aspro c'est pas remboursé par la sécu désolé

  14. #34
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Janvier 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Salut,
    @patricktoulon
    Le résultat est Super.
    je suis d'autant plus impressionné par l'intérêt avec lequel vous avez
    résolu mon problème. Merci
    Merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Problème recalcul fichier Excel avec fonctions VBA
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/07/2014, 15h07
  2. [XL-2007] Problème avec fonction VBA
    Par BarryLyndon57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2012, 17h23
  3. [Configuration] petit problème avec php.ini pour la fonction mail()
    Par momoh dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/04/2007, 01h39
  4. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52
  5. [tomcat] [jsp] Problème avec driver OCI pour oracle
    Par nanardcompanie dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 01/07/2004, 09h54

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