Récupération de nombres

Bonjour,

Dans une cellule, j'ai un nombre de personnes, sous la forme:
10 pers
142 personn.
121 pers.
4
1 000 p

Je souhaite récupérer les nombres uniquement. J'ai pensé à un InStr avec comme repère l'espace, ce qui donne:
InStr(personne, " ")
Sauf que lors de la récupération, le 1 000 se transforme en 1.

Quel moyen pourrais je utiliser sans passer par une boucle ?
A priori, je ne peux pas utiliser un Right...

Merci

3 réponses

  1. Bonjour
    Retourne le total des personnes dans la même cellule
    Option Compare Text
    Sub Addition()
        Application.ScreenUpdating = False
        Set ValCel = ActiveCell
        ValCel.Replace What:=Chr(10), Replacement:="+", LookAt:=xlPart
        ValCel.Replace What:="Personn.", Replacement:="", LookAt:=xlPart
        ValCel.Replace What:="Pers.", Replacement:="", LookAt:=xlPart
        ValCel.Replace What:="Pers", Replacement:="", LookAt:=xlPart
        ValCel.Replace What:="P", Replacement:="", LookAt:=xlPart
        ValCel.Replace What:=" ", Replacement:="", LookAt:=xlPart
        ActiveCell.Formula = "=" & ValCel
    End Sub

    Cdlt
    0
    1. Contributeur
      Bonjour
      Excusez l'incruste

      autre manière avec les expressions régulières

      Option Explicit
      '------------------------
      Function extrait_chiffres(ByRef texto As String) As Long
      Dim reg As Object
      Dim extraction As Object
      Dim digit

      Set reg = CreateObject("vbscript.regexp")
      reg.Global = True
      reg.Pattern = "(\d)"
      Set extraction = reg.Execute(texto)
      For Each digit In extraction
      extrait_chiffres = extrait_chiffres & (digit.Value)
      Next digit
      Set extraction = Nothing
      Set reg = Nothing
      End Function


      Michel
      0
      1. A Sertre, je renvoi mon humble procédure, celle-ci n'affiche que les valeurs (ce qui avait été demandé) au lieu du total dans mon précédent post.
        Option Compare Text
        Sub Epurage()
            Application.ScreenUpdating = False
            Set ValCel = ActiveCell
            ValCel.Replace What:=Chr(10), Replacement:="-", LookAt:=xlPart
            ValCel.Replace What:="Personn.", Replacement:="", LookAt:=xlPart
            ValCel.Replace What:="Pers.", Replacement:="", LookAt:=xlPart
            ValCel.Replace What:="Pers", Replacement:="", LookAt:=xlPart
            ValCel.Replace What:="P", Replacement:="", LookAt:=xlPart
            ValCel.Replace What:=" ", Replacement:="", LookAt:=xlPart
            ValCel.Replace What:="-", Replacement:=Chr(10), LookAt:=xlPart
        End Sub


        Bonjour michel_m
        On voit là la griffe d'un expert, j'ai testé la fonction, mais il retourne "#Valeur". Ai-je loupé quelque chose?
        Je reconnais que, l'avantage de ce principe, c'est que tous les textes sont éliminés, quels qu'ils soient. mais bon, il faut maîtriser et c'est loin d'être mon cas.
        Bonne journée
        Cdlt
        0
        1. Contributeur
          Bonjour frenchie :o)

          Je viens de réessayer (XL2007) et pas de problème mais ne prend pas le zéro s'il est le 1° chiffre (0123 ---> 123)
          tite démo
          http://www.cjoint.com/c/EIfg33mrOcK
          0
        2. Oui, ça marche avec des valeurs isolées dans chaque cellule, mais dans la demande initiale, toutes les valeurs sont dans la même cellule. voir en B11
          https://www.cjoint.com/c/EIfhc7Oamgw
          0
        3. Contributeur
          @Frenchie83Re,

          effectivement dans une une seule cellule le passage à la ligne par touches est refusé. Dommage

          Bon WE
          0