Garder uniquement les chiffres d'une cellule

Bonjour Le Forum,

J'ai un fichier avec chaque ligne écrit en Colonne A quelque exemples:

"99988887S"

"DG77665473"

"ET13576854NB"

"OP53648236M"

Ainsi de suite, j'aimerai en colonne B qu'il y figure uniquement les Chiffres et plus aucune lettre. En VBA ou par Formule ça met égale.

D'avance merci de votre aide,

Sebyg

Bonjour Sebyg,

En retour pour ton besoin par VBA.

Sub Enleve()
Der = Range("A" & Rows.Count).End(xlUp).Row
For Lig = 1 To Der
For C = 1 To Len(Range("A" & Lig))
Mot = Range("A" & Lig): ch = Mid(Mot, C, 1)
If ch < "A" Then Range("B" & Lig) = Range("B" & Lig) & ch
Next C
Next Lig
End Sub

Bonjour,

Voici une proposition avec une fonction personnalisée.

Il y a cependant quelques pré-requis :

- enregistrer le fichier au format .xlsm,

- activer le volet "Développeur" (si ce n'est pas déjà fait) : Volet "Fichier" / Options / Personnaliser le ruban > cocher "développeur",

- sur le volet "Développeur", ouvrir l'éditeur "Visual Basic" (raccourci Alt + F11),

- dans le menu "Outils"/ Références : sélectionner "Microsoft VBScript Regular Expressions 5.5",

- dans le menu contextuel "Insertion", sélectionner "Module",

- aller sur ce nouveau module et y copier le code :

Function EXTRACT_NUMBER(chaine As String, Optional Occurrence As Integer) As String

Dim ExpReg As REGEXP
Dim subdiv

Set ExpReg = CreateObject("vbscript.regexp")

With ExpReg
    .Global = True
    .Pattern = "\d+"
    If .test(chaine) Then
        Set subdiv = .Execute(chaine)
        If subdiv.Count > 0 Then
            If Occurrence = 0 Then Occurrence = 1
            EXTRACT_NUMBER = subdiv(Occurrence - 1).Value
        Else
            EXTRACT_NUMBER = subdiv(0).Value
        End If
    End If
End With

End function

A saisir sur excel :

=EXTRACT_NUMBER(A1)

si l'extraction doit se réaliser sur A1.

Si, il y a plusieurs suites de nombres, il faut saisir :

=EXTRACT_NUMBER(A1;3)

Pour avoir la 3è suite de nombres dans A1.

Cdlt,

Bonjour

Exemple par formule

116sebyg.xlsx (8.74 Ko)

Bonjour toutes et tous

merci @à R@chid et Jean Eric

https://forum.excel-pratique.com/excel/chiffre-lettres-ne-garder-que-chiffre-t47872.html

en cellule A2

@ valider par Ctrl+Maj+Entree

@ tirer vers le bas

=CNUM(STXT(A2;EQUIV(VRAI;ESTNUM(CNUM(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)));0);NB(CNUM(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)))))

------------

merci à Jean-Eric

une piste VBA pour supprimer les caractères texte d'une cellule dans une plage de cellules sélectionnée préalablement

https://forum.excel-pratique.com/excel/chiffre-lettres-ne-garder-que-chiffre-t47872.html

Option Explicit
Public Sub DeleteText()
Dim Cel As Range
Dim x As Long
Dim myString As String, myChar As String
Dim myNumber As Integer

    Application.ScreenUpdating = False
    For Each Cel In Selection
        For x = 1 To Len(Cel)
            myChar = Mid(Cel, x, 1)
            myNumber = Asc(Mid(Cel, x, 1))
            If myNumber >= 48 And myNumber <= 57 Then myString = myString & myChar
        Next x
        Range(Cel.Address) = CDbl(myString)
        myString = ""
    Next Cel

End Sub

crdlt,

André

allez, même si je suis à la ramasse par rapport aux autres, je poste mon morceau de code !

Sub Valeur_Numerique()

Dim sLongueur As Single
Dim sNombre As Single
Dim cell As Range

    For Each cell In Range("D3:D6")'< range sur laquelle s'applique ta macro à renseigner. (à corriger pour la colonne A de ton fichier)
        For sLongueur = 1 To Len(cell.Value)
            If IsNumeric(Mid(cell.Value, sLongueur, 1)) Then
                sNombre = sNombre & Mid(cell.Value, sLongueur, 1)
                cell.Offset(0, 1).Value = sNombre
            End If
        Next
        sNombre = Empty
        sLongueur = Empty
    Next

End Sub

Merci à vous tous !

J'ai essayé ce que vous m'avez donné malheureusement ça ne fonctionnait pas.
Jusqu'à ce code :

Option Explicit
Public Sub DeleteText()
Dim Cel As Range
Dim x As Long
Dim myString As String, myChar As String
Dim myNumber As Integer

    Application.ScreenUpdating = False
    For Each Cel In Selection
        For x = 1 To Len(Cel)
            myChar = Mid(Cel, x, 1)
            myNumber = Asc(Mid(Cel, x, 1))
            If myNumber >= 48 And myNumber <= 57 Then myString = myString & myChar
        Next x
        Range(Cel.Address) = CDbl(myString)
        myString = ""
    Next Cel

End Sub

Merci d'avoir pris de votre temps j'ai trouvé mon bonheur !

@Sebyg,

Voici le retour du code proposé.

99988887S99988887
DG7766547377665473
ET13576854NB13576854
OP53648236M53648236

Ou cela ne fonctionne t-il pas?

Oui, je confirme que le mien fonctionne également.

@3GB,

Donc, très bien de le confirmer.

@Sebyg,

Rendez vous chez l'oculiste dans le mois en cours...

@X Cellus : Attention, ça peut arriver à tout le monde de se faire oculer

Bonjour à tous,

Voici une alternative simple pour les éventuels utilisateurs du pack de fonctions qui passeraient sur ce sujet :

=REGEX_REPLACE(A1;"\D";"")
excel fonction extraire chiffres

Cordialement,

Salut,

je remonte ce topic parce que je me demandais s'il y avait moyen (sans VBA et avec des fonctions de base d'Excel 2016) d'extraire une suite de caractères, quel que soit son emplacement dans une cellule, par exemple 4 chiffres qui se suivent ;

02-bar 4956

ça doit donc ne garder que 4956 mais doit fonctionner aussi quand cette suite est ailleurs ;

pa 9807 gén 9-732

=> ne garder que 9807.

Je pensais à un truc du genre ;

=TROUVE("????";SI(ET(B2>=CAR(48);B2<=CAR(57));B2);1)

mais bien sûr ça ne fonctionne pas.

Avec Powershell c'est assez simple donc j'imagine que ça doit être possible avec regex_replace mais l'idée est de s'en passer si possible.

Merci !

J'ai fini par trouver une formule matricielle hyper longue pour extraire la première suite de 4 chiffres d'une cellule (mais ne fonctionne pas s'il y a 5 chiffres consécutifs) ;

=STXT(A772;SOMMEPROD(((LIGNE(INDIRECT("1:"&NBVAL(FREQUENCE(SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=1;LIGNE(INDIRECT("1:"&NBCAR($A$772))));SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=0;LIGNE(INDIRECT("1:"&NBCAR($A$772)))))))))<EQUIV(4;FREQUENCE(SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=1;LIGNE(INDIRECT("1:"&NBCAR($A$772))));SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=0;LIGNE(INDIRECT("1:"&NBCAR($A$772)))));0))*FREQUENCE(SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=1;LIGNE(INDIRECT("1:"&NBCAR($A$772))));SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=0;LIGNE(INDIRECT("1:"&NBCAR($A$772))))))+EQUIV(4;FREQUENCE(SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=1;LIGNE(INDIRECT("1:"&NBCAR($A$772))));SI(ESTNUM(STXT($A$772;LIGNE(INDIRECT("1:"&NBCAR($A$772)));1)*1)*1=0;LIGNE(INDIRECT("1:"&NBCAR($A$772)))));0);4)

Bonjour à tous !

@Doux Rêveur : Vous devriez étudier la piste Power Query.

Cette simple ligne de code retourne le résultat attendu (pour un champ nommé "Code") :

Table.AddColumn(Source, "Nombre", each List.Select(Text.Split([Code]," "), each Text.Length(_)=4 and Value.Is(Number.From(_),type number)){0})

Merci, je note mais le but était de voir comment faire en se passant de PQ ou de VBA.

Rechercher des sujets similaires à "garder uniquement chiffres"