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 :

Extraire chiffre avec décimale VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Par défaut Extraire chiffre avec décimale VBA
    Bonjour,
    Je fais appel à vous car je suis un peu bloqué.
    avez vous un code VBA ou une forule qui permettrait d'extraire uniquement le chiffre à virgule dans un texte?
    Exemple:
    libéllés placés sur range("A")
    ABN AMRO BANK NV 3.375% 21/01/2014 -----> extraire dans B2     3.375 
    AREVA 4.625% 05/10/2017 ----> extraire dans B3             4.625
    AUCHAN SA 4.75% 15/04/15 *EUR ---->extraire dans B4          4.75 
    AUTOROUTES PARIS RHIN-RH 5% 12/01/2017 ---->extraire dans B5    5 
    BANQUE POP 2.625% 07/12/2012 --->extraire dans B6          2.625
    BAYERISCHE 3.5% 08/10/13 *EUR ---> extraire dans B7     3.5
    et quand il n'ya pas de chiffre à virgule dans la ligne (ne rien mettre et passer a la ligne suivante)
    Merci de votre aide.

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Il y a aura toujours systématiquement la maturité et la devise (ou pas) après le coupon ?
    Parce que mon idée est de chercher le "." mais je veux être sûr que ça marche avant de te proposer qq chose.

    En fait, il vaudrait mieux chercher le dernier %, sinon, tu n'auras pas les coupons entiers

    Bon en l'absence de réponse, voici un code qui marche sur ton exemple :

    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
    23
    24
    25
    26
    27
    28
    Public Function ExtraireCoupon(obligation As String) As Double
        Dim char As String * 1
        Dim posPourcent As Integer
        Dim tmpNombre As String
        Dim i As Integer
     
        posPourcent = InStr(obligation, "%")
     
        If posPourcent <> 0 Then
            tmpNombre = ""
            i = posPourcent - 1
            char = Mid(obligation, i, 1)
     
            Do While EstChiffre(char) And i > 0
                tmpNombre = char & tmpNombre
     
                i = i - 1
                char = Mid(obligation, i, 1)
            Loop
        End If
     
        ExtraireCoupon = Val(tmpNombre)
    End Function
     
    Private Function EstChiffre(c As String) As Boolean
        If Len(c) <> 1 Then Err.Raise 1001, "EstChiffre", "Ne s'applique qu'à un caractère"
        EstChiffre = (Asc(c) >= 48 And Asc(c) <= 57) Or Asc(c) = 46
    End Function

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Par défaut extraction
    Merci infiniment ca marche nickel
    comment je peux intégrer cette fonction à ma macro qui traite plusieurs fichiers
    j utilise Call dans le module principale ?

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    C'est une fonction et pas une procédure, il ne faut donc pas faire de Call.

    Il faudrait faire un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B1").Value = ExtraireCoupon(Range("A1").Value)
    J'ai mis des Range en dur ici, mais ça peut être dans une boucle ou autre.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Par défaut Extraction
    Est ce que je peux abuser de votre savoir
    Promis je vais bosser les fonctions...je vous l'accorde c'est un peu facile mais j'en ai vraiment besoin
    Je pourrais faire la meme extraction mais des dates d'echéances ?

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    En supposant que c'est toujours après le coupon et au format Jour/Mois/Annee :

    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
    23
    24
    25
    26
    27
    28
    29
    Public Function ExtraireMaturite(obligation As String) As Date
        Dim char As String * 1
        Dim tmpPos As Integer
        Dim tmpDate As String
        Dim tabDate As Variant
        Dim jour, mois, annee As Integer
     
        tmpPos = InStr(obligation, "%")
        If tmpPos = 1 Then Exit Function
     
        tmpDate = Mid(obligation, tmpPos + 1, Len(obligation) - tmpPos)
        tmpDate = LTrim(tmpDate)
     
        tmpPos = InStr(tmpDate, " ")
        If tmpPos <> 0 Then tmpDate = Mid(tmpDate, 1, tmpPos - 1)
     
        tabDate = Split(tmpDate, "/")
        If UBound(tabDate) <> 2 Then Exit Function
     
        On Error Resume Next
        jour = CInt(tabDate(0))
        mois = CInt(tabDate(1))
        If Len(tabDate(2)) = 2 Then tabDate(2) = "20" & tabDate(2)
        annee = CInt(tabDate(2))
        If Err.Number <> 0 Then Exit Function
        On Error GoTo 0
     
        ExtraireMaturite = DateSerial(annee, mois, jour)
    End Function

Discussions similaires

  1. Convertir des chiffres en lettres avec décimale
    Par informatiquedm dans le forum VB.NET
    Réponses: 1
    Dernier message: 17/08/2011, 20h43
  2. [RegEx] Accepter uniquement chiffre avec décimales eventuellement
    Par Général03 dans le forum Langage
    Réponses: 7
    Dernier message: 07/01/2010, 15h51
  3. [VB5] Mettre une valeur sous la forme d'un chiffre avec 3 décimales
    Par sylvette dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/10/2007, 19h52
  4. Format d'un chiffre avec partie décimale
    Par arezki76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/04/2007, 12h41
  5. extraire chiffre avec regexp
    Par chillansky dans le forum ASP
    Réponses: 1
    Dernier message: 17/08/2006, 10h28

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