Récupération de nombres

sertre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. Frenchie83 Messages postés 2254 Statut Membre 339
       
      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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Frenchie83 Messages postés 2254 Statut Membre
         
        Re,

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

        Bon WE
        0