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. 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
  2. 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. 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