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 les nombres à l'intérieur d'une cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2009
    Messages : 11
    Par défaut extraire les nombres à l'intérieur d'une cellule
    Bonjour,

    J'ai une colonne de cellule avec dans chaque cellule du texte et des nombres.
    Je voudrais extraire de chaque cellule les nombres s'y trouvant.

    Existe-t-il une fonction recherche pour cela ou sinon comment feriez vous?

    J'ai pensé à faire =gauche ou = droite mais cela ne marche que si on connait exactement la position du nombre dans la cellule et vu la quantité de cellules que j'ai c'est impossible.

    Merci!

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Je pense que tu pourrais chercher la position du premier nombre du dernier.

    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
     
    Dim i As Integer, premierChiffre  as integer, dernierChiffre as integer
    Dim ligne As String
     
    ligne = 'ta chaine de caractère
     
    For i = 1 To Len(ligne)
        If IsNumeric(Mid(ligne, i, 1)) Then
            premierChiffre = i
            Exit For
        End If
    Next i
     
    'on cherche le dernier
    dernierChiffre = Len(ligne)
    For i = premierChiffre To Len(ligne)
        If Not IsNumeric(Mid(ligne, i, 1)) Then
            dernierChiffre = i - 1
            Exit For
        End If
    Next i
     
    MsgBox Mid(ligne, premierChiffre, dernierChiffre - premierChiffre + 1)
    On doit pouvoir faire mieux mais celui la été le premier truc auquel j'ai pensé

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour soipx, Krovax
    Ton idée est bonne.. petite rectif..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = premierChiffre +1 To Len(ligne)
    Mais dans la même idée,
    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
    Function Separe()
    Dim i As Integer, e As Integer
    Dim ligne As String
    ligne = "aff123hhh JJ"
    For i = 1 To Len(ligne)
        If IsNumeric(Mid(ligne, i, 1)) Then
            For e = i + 1 To Len(ligne)
                If Not IsNumeric(Mid(ligne, e, 1)) Then
                    MsgBox "le nombre est " & Mid(ligne, i, e - i)
                    Separe = Val(Mid(ligne, i, e - i))
                    Exit Function
                End If
            Next e
        End If
    Next i
    End Function
    A+

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    Bonsoir,


    Tu peux également tester cette macro qui extrait toutes les valeurs numeriques contenues dans la cellule A1

    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
    Sub extraireValeursNumeriquesCellule()
        Dim i As Byte, Nb As Byte
        Dim Cible As String, Resultat As String
        Dim Nombre As Double
     
        Cible = Range("A1")
        'pour que fonction Val puisse reconnaitre decimales
        Cible = Application.Substitute(Cible, ",", ".")
        ' pour gerer deux nombres qui se suivent
        Cible = Application.Substitute(Cible, " ", "x")
     
        For i = 1 To Len(Cible)
            If IsNumeric(Mid(Cible, i, 1)) Then
                Nombre = Val(Mid(Cible, i, Len(Cible) - i + 1))
                Nb = Nb + 1
                Resultat = Resultat & Nombre & vbLf
                i = i + Len(Str(Nombre)) - 1
            End If
        Next
     
        MsgBox "Il y a " & Nb & _
            " valeurs numeriques dans la cellule : " & vbLf & Resultat
    End Sub

    Il est possible de faire plus simple par formule si tu peux nous confirmer qu'il n'y a qu'un nombre préciser ou il est positionné dans la chaine de caractères.

    bonne soirée
    michel

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour

    et encore une autre manière avec les expressions régulières

    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
    Function extrait_nbre(ByRef texto As String) As Double
        Dim reg As Object
        Dim extraction As Object
     
        Set reg = CreateObject("vbscript.regexp")
        reg.Global = True
        reg.Pattern = "(\d?\d?\d)|(,)"
        Set extraction = reg.Execute(texto)
        For Each digit In extraction
            extrait_nbre = extrait_nbre & (digit.Value)
        Next digit
     
        Set extraction = Nothing
        Set reg = Nothing
    End Function
    Cordialement

Discussions similaires

  1. Comment extraire les nombres dans une table
    Par ninatity dans le forum SQL
    Réponses: 1
    Dernier message: 30/08/2011, 14h12
  2. Extraire les nombres d'une chaine avec regex
    Par Alain15 dans le forum Général Java
    Réponses: 2
    Dernier message: 04/05/2011, 08h32
  3. Extraire les deux dernieres lettres d'une cellule
    Par SybVicious dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/09/2006, 11h54
  4. Excel, compter le nombre de 1 d'une cellule
    Par mullger dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 04/05/2006, 11h47
  5. Extraire les n premiers termes d'une chaine
    Par knecmotet dans le forum C++
    Réponses: 4
    Dernier message: 03/03/2005, 15h05

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