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 :

Récupérer chiffre dans du texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 29
    Par défaut Récupérer chiffre dans du texte
    Bonjour,

    J'ai du texte que je récupère dans un mail que je met dans une cellule et dans ce texte je souhaite récupérer le chiffre à la fin de ce texte. Or avant le chiffre que je veux récupérer il y a une date en chiffre.
    Je souhaiterais faire une macro qui me permet de récuper le dernier chiffre et non la date.

    Merci d'avance

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    la fonction standard de excel =DROITE fait pas l'affaire
    si non donnez un exemple svp

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    si non donnez un exemple svp
    Voir même DES exempleS pour pouvoir juger de la variabilité des données sources.

  4. #4
    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
    bonjour
    en vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim mavar
    mavar = "totototitihahahfififi20/05/2017gdhdhfhfyreu4523654"
    nombredefin = StrReverse(Val(StrReverse(mavar)))
    MsgBox nombredefin
    End Sub
    et au cas ou le nombre de la fin soit collé a la date et que l'on considère que la date est au format dd/mm/yyyy si c'est yy c
    'est 3 a la place de 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test2()
    Dim mavar
    mavar = "totototitihahahfififi20/05/20174523654"
    nombredefin = Mid(StrReverse(Val(StrReverse(mavar))), 5, Len(mavar))
    MsgBox nombredefin
    End Sub
    je pourrais aussi te parler d'un regex mais il me semble que tu n'en est pas encore la autant apprendre a te servir des fonctions natives VBA
    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

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonsoir Patrick
    Ta seconde méthode (si date accolée) n'est pas complète.

    La première méthode non plus, d'ailleurs

  6. #6
    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
    re
    jacques avec les valeurs de (mavar) que j'ai donné en exemple
    je vois pas trop ce que l'on pourrait ajouter

    le 1er etant simple c'est tout les chiffre de droite

    le 2d un peu plus complexe puisque qu'il faut enlever le 4 premier de la série qui représente l'année de la date j'ai bien précisé que le format de la date devais terminer par l'année en format "yyyy"
    alors non pour ces 2 cas il ne manque rien

    maintenant si tu envisage un autre cas pour (mavar) alors oui
    mais la on entre dans le domaine du devin et la limite de tout algo est la

    en effet exemple
    si mavar=" hhhhhhh15/14/174569874"

    va donc deviner toi si c'est 1745 et 69874 ou 17 et 4569874
    tu peux faire ou dire ce que tu veux et/ou utiliser tout les algo du monde tu pourra pas alors demander a la machine d'essayer serait comment dire heu.....
    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

  7. #7
    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
    hi,

    Or avant le chiffre que je veux récupérer il y a une date en chiffre.
    Schématiquement : TexteDateChiffre
    La date en chiffre peut être (ex. avec 01/02/2018) :
    • 122018
    • 1218
    • 01022018
    • 010218
    • 01218
    • 0122018
    … aller savoir on ne connait même pas la nature du texte si c'est un code ou autres …

    il serait plus probable que la date soit du type jjmmaa ou jjmmaaaa mais …

    attendons que le demandeur nous éclaire …

    Edit : on s'est croisé Patrick
    je souhaite récupérer le chiffre à la fin de ce texte
    faut plus détailler le chiffre se compose schématiquement :
    • X
    ou
    • XX
    ou
    • XXXX … etc
    alors il y en 1 à la fin du texte ou plus ? est ce vraiment un chiffre qui est demandé ou un nombre ??
    je pourrais dire le chiffre 198, qu'est ce que j'en sais, j'ai bien essayé d'être devin mais ça ne marche pas

    Les détails sont importants lors d'une ouverture de discussion
    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 ;)

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    jacques avec les valeurs de (mavar) que j'ai donné en exemple
    je vois pas trop ce que l'on pourrait ajouter
    pas ce que l'on "pourrait", mais ce que tu "devrais", Patrick. Tant avec ton premier code, qu'avec le second.
    (tu n'as pas suffisamment réfléchi aux conséquences possibles de tes deux codes ). Je préfère à ce stade te laisser découvrir la faille toi-même...

    Et ce n'est pas le seul piège. Il y en a un autre, non abordé, avec tes deux codes.

    La solution ? -->> elle dépend de ce qu'ont demandé Menhir et Ryu, que je salue : des précisions exhaustives sur la construction de la chaîne considérée.

  9. #9
    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
    re
    c'est bien ce que je dis
    et je lai bien précisé quand au format de la chaine a examiner chaine string + dateformat(dd/mm/yyyy) + nombre
    dans les deux cas que j'ai presenté!! il n'y a pas de faille si la chaine respecte la condition ci dessus
    pour le 2d exemple 5ou 3 sur mid selon le format "yyyy" ou "yy" a la fin

    si il s'agit d'un autre cas plus de précision de la part du demandeur serait appréciées en effet

    dans n'importe quel cas la chose est simple
    il veux le nombre a droite sans l'année de la date

    c'est donc tout le numérique de droite - les chiffre de l'année
    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

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    dans les deux cas que j'ai presenté!! il n'y a pas de faille si la chaine respecte la condition ci dessus
    Rhôôôooo !
    Allez --->> regarde ce que font tes codes sur la chaîne (exemple) : "totototitihahahfififi20/05/2017gdhdhfhfyreu4100" ou "totototitihahahfififi20/05/20174100"
    VU ???
    Et ce n'est pas tout (bis repetita). il y a un autre piège encore.
    Veux-tu bien maintenant attendre, s'il te plait, les précisions demandées ? Elles éviteront une discussion à rallonge une fois de plus, Patrick.

  11. #11
    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
    Coucou Jacques, Patrick

    L'histoire c'est un peu celui du texte formaté vu dans un autre post, si on en connait pas la nature, il y sera difficile de faire un code adapté;
    vu le nombre énorme de formatages possibles et donc de codes, même avec une base on peut avoir des surprises si c'est pas assez bien pensé (niveau code), comme les cas complexes …
    dédicace à une personne qui se reconnaitra
    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 ;)

  12. #12
    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
    re Rhôôôooo !

    Rhôôôooo !
    Allez --->> regarde ce que font tes codes sur la chaîne (exemple) : "totototitihahahfififi20/05/2017gdhdhfhfyreu4100" ou "totototitihahahfififi20/05/20174100"
    VU ???
    relis mon post
    et j'en ai même un qui fait les deux avec le même code(utilisation du regex)
    1. regex sur motif date
    2. suppression des occurrences trouvées(matches)
    3. strreverse(val(strreverse(reste de la chaine)))
    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

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Veux-tu bien maintenant attendre, s'il te plait, les précisions demandées ? Elles éviteront une discussion à rallonge une fois de plus, Patrick.
    Voilà tout, Patrick. Voilà tout.
    Et il ne sera très vraisemblablement pas nécessaire d'alourdir avec une expression régulière (non forcément disponible sur toutes les machines, en outre, certaines étant protégées)

    PS : comment, si tu le en avais conscience, as-tu pu un instant penser que val("00001") (par exemple et résultat du strreverse de "10000") pouvait valoir autre chose que 1, avec, donc, la disparition des "0" ?

    Il était possible d'utiliser malgré tout tes deux codes, mais alors : en les complétant (je te l'avais dit)

    Et (ter-repetita) : il y a un autre "hic" possible et non encore connu tant que les précisions demandées n'auront pas été fournies.
    Tracer des plans sur la comète, se précipiter pour donner des codes (finalement incomplets et donc boiteux) n'a servi et ne sert rigoureusement à rien d'autre que multiplier indûment le nombre des messages.

  14. #14
    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
    re
    @jacques autant pour moi
    val et les zéros pas bon menages

    a l'ancienne alors

    'on avance
    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 test1()
        Dim mavar$, i#, texte$
        'mavar = "totototitihahahfififi20/05/2017azefhgjoooojk4523654"
        mavar = "totototitihahahfififi20/05/20174523654"
        For i = 1 To Len(mavar)
            If IsNumeric(Mid(mavar, i)) Then Exit For
        Next
        If Mid(mavar, i - 1, 1) = "/" Then
            texte = "si année=4 chiffres alors  " & Mid(mavar, i + 4) & vbCrLf & _
                    "si année=2 chiffres alors  " & Mid(mavar, i + 2)
        Else
            texte = Mid(mavar, i)
        End If
        MsgBox texte
    End Sub
    on recule
    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 test2()
        Dim mavar$, i#, texte$
        mavar = "totototitihahahfififi20/05/2017azefhgjoooojk4523654"
        'mavar = "totototitihahahfififi20/05/20174523654"
        For i = Len(mavar) To 1 Step -1
            If Not IsNumeric(Mid(mavar, i)) Then Exit For
        Next
        If Mid(mavar, i, 1) = "/" Then
            texte = "si année=4 chiffres alors  " & Mid(mavar, i + 5) & vbCrLf & _
                    "si année=2 chiffres alors  " & Mid(mavar, i + 3)
        Else
            texte = Mid(mavar, i + 1)
        End If
        MsgBox texte
    End Sub
    et si on est pas frileux
    le reg chope même un autre cas a condition qu'il n'y est qu'une seule série
    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 test3()
        Dim mavar As String, chaine As String, matchs
        'mavar = "totototitihahahfififi20/05/2017azefhgjoooojk4523654"
        'mavar = "totototitihahahfififi20/05/20174523654"
        mavar = "totototitihahahfififi20/05/20174523654etencore"
       With CreateObject("VBScript.RegExp"):
            .Global = True: .IgnoreCase = True: .Pattern = "(\d{2})+/+(\d{2})+/+(\d{4})"
            Set matchs = .Execute(mavar)
            If matchs.Count > 0 Then
                chaine = Split(mavar, matchs(matchs.Count - 1))(1)
                .Pattern = "[a-z-A-Z]": result = .Replace(chaine, "")
            End If
        End With
        MsgBox result
    End Sub
    les 3 solutions fonctionnent pour les deux cas voir 3 pour le reg et les zéros on s'en fou on traite en string
    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

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Comme il n'existe que 10 chiffres qui nous servent à écrire des nombres et que tu parles de récupérer le dernier chiffre, il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox Right("abcdef01/01/2017fghijk2", 1)

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour Theze
    je te mets un et regrette de ne pouvoir en mettre un bon millier.
    Amitiés

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Salut Patrick
    Si tu avais lu attentivement mes message (surtout le tout premier) tu y aurais vu un verbe très important et aurais évité de chambouler ainsi tout ton code pour contrecarrer le comportement de la fonction Val. C'était bien (mille fois) plus simple
    Tiens -->> je vais donner un indice (voire deux) à Toulon :
    - s'intéresser de près aux aventures et facéties divers d'un certain pompier : le sapeur Camembert
    - s'intéresser à ce qu'est un catalyseur en chimie


    ceci étant dit :
    1) je refuse (dit une fois de plus) de dire comment tant que les tenants et aboutissants demandés n'auront pas été exposés exhaustivement par le demandeur.
    2) ce n'est pas (dit également une fois de plus) la seule embuche éventuelle (dépend également des éclaircissements attendus)

    A plus, maintenant. A quand nous saurons enfin quoi traiter exactement.

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Merci à toi unparia

    Amitiés

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

Discussions similaires

  1. [RegEx] Récupérer nombre dans chaîne text
    Par bronon dans le forum Langage
    Réponses: 15
    Dernier message: 10/06/2013, 14h55
  2. Récupération de chiffre dans un texte
    Par pridzi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/09/2010, 19h51
  3. [XL-2003] VBA: Dissocier des chiffres dans un texte
    Par TonyRc dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/07/2010, 09h07
  4. Récupérer donnée dans fichier texte
    Par all4linux dans le forum Web
    Réponses: 6
    Dernier message: 12/06/2010, 12h01
  5. Trouver une série de chiffres dans du texte
    Par Sancti_Eyes dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2009, 22h54

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