Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trouver un nombre dans une chaîne

10 réponses
Avatar
buldo
Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !

10 réponses

Avatar
...Patrick
Ceci (pondu par l'ami AV je crois doir fonctionner)

=1*STXT(A1;EQUIV(1;1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));0);SOMME(1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))))

Patrick

"buldo" a écrit dans le message de news:

Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !


Avatar
buldo
Bonsoir !

Merci, Patrick, mais ça ne marche pas !
J'ai écrit mon texte "Tension 230 V" en A1, puis j'ai recopié la formule en
D1 (aussi en C3). Réponse d'Excel : #N/A !
Ma version d'Excel est celle d'Office 97.

Bonne soirée


Ceci (pondu par l'ami AV je crois doir fonctionner)

=1*STXT(A1;EQUIV(1;1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1));0);SOMME(1*ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))))

Patrick

"buldo" a écrit dans le message de news:

Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !






Avatar
FxM
Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !


Bonsoir buldo,

Non testé :
Alt-F11 | insertion | module
Y copier ce qui suit :
Public Function nombr(inp)
Dim st As String, res As String, a As Integer
st = "0123456789": res = ""
For a = 1 To Len(inp)
If InStr(1, st, Mid(inp, a, 1)) > 0 Then
res = res & Mid(inp, a, 1)
End If
Next a
nombr = res * 1 'pour un résultat NOMBRE
' nombr = res 'pour un résultat TEXTE
End Function

Usage dans la feuille :
Si le teste est en cellule A1 :
=nombr(A1)

@+
FxM

Avatar
buldo
Bonsoir FxM

Merci pour votre réponse ... Mais ça coince encore !
La raison est que je débute avec Excel, et que je ne connais rien aux
macros, ni à Visual Basic !

J'ai d'abord recopié avec soin vos instructions sous forme d'un fichier texte.

Puis : Alt + F11 -> Insertion -> Module

Puis j'ai collé vos instructions dans la fenêtre Classeur1 - Module1 (Code) :

Public Function nombr(inp)
Dim st As String, res As String, a As Integer
st = "0123456789": res = ""
For a = 1 To Len(inp)
If InStr(1, st, Mid(inp, a, 1)) > 0 Then res = res & Mid(inp, a, 1)
End If
Next a
nombr = res * 1 'pour un résultat NOMBRE
' nombr = res 'pour un résultat TEXTE
End Function

J'ai ensuite placé ma chaîne de caractères en A1 sur ma feuille Excel, puis
j'ai écrit =nombr(A1) dans une autre cellule.

Résultat :
- au niveau d'Excel, j'obtiens #VALEUR!
- dans la fenêtre Visual Basic, lorsque je clique sur Débogage puis Compiler
VBAProject, j'obtient le message Erreur de compilation: End If sans bloc If

Quelle(s) erreur(s) ai-je faite(s) ?
Merci d'avance pour votre aide !

Cordialement.

buldo


Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !


Bonsoir buldo,

Non testé :
Alt-F11 | insertion | module
Y copier ce qui suit :
Public Function nombr(inp)
Dim st As String, res As String, a As Integer
st = "0123456789": res = ""
For a = 1 To Len(inp)
If InStr(1, st, Mid(inp, a, 1)) > 0 Then
res = res & Mid(inp, a, 1)
End If
Next a
nombr = res * 1 'pour un résultat NOMBRE
' nombr = res 'pour un résultat TEXTE
End Function

Usage dans la feuille :
Si le teste est en cellule A1 :
=nombr(A1)

@+
FxM






Avatar
Clément Marcotte
Function SorsLeNombre(texte As String) As Double
Dim RE As Object, match As Object
Dim resultat As String, matches As Object
Set RE = CreateObject("vbscript.regexp")
RE.ignorecase = True
RE.Pattern = "(d+u002Cd+)|(d+.d+)|(d+)"
RE.Global = False
Set matches = RE.Execute(texte)
For Each match In matches
If InStr(match.Value, ",") > 0 Then
Select Case Application.International(xlDecimalSeparator)
Case ","
resultat = match.Value
Case "."
resultat = Replace(match.Value, ".", ",")
Case Else
End Select
ElseIf InStr(match.Value, ".") > 0 Then
Select Case Application.International(xlDecimalSeparator)
Case ","
resultat = Replace(match.Value, ".", ",")
Case "."
resultat = match.Value
Case Else
End Select
Else
resultat = match.Value
End If
SorsLeNombre = CDbl(resultat)
Next
Set RE = Nothing
Set match = Nothing
Set matches = Nothing
End Function

"buldo" a écrit dans le message de news:

Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans une
formule ?
Merci !


Avatar
Clément Marcotte
Bonjour,

Dans Excel:

Alt - F11

Clic-droit sur l'icône du classeur dans la fenêtre de gauche en haut
Insérer un module.
Coller la macro dans le module.


"buldo" a écrit dans le message de news:

Bonsoir FxM

Merci pour votre réponse ... Mais ça coince encore !
La raison est que je débute avec Excel, et que je ne connais rien aux
macros, ni à Visual Basic !

J'ai d'abord recopié avec soin vos instructions sous forme d'un fichier
texte.

Puis : Alt + F11 -> Insertion -> Module

Puis j'ai collé vos instructions dans la fenêtre Classeur1 - Module1
(Code) :

Public Function nombr(inp)
Dim st As String, res As String, a As Integer
st = "0123456789": res = ""
For a = 1 To Len(inp)
If InStr(1, st, Mid(inp, a, 1)) > 0 Then res = res & Mid(inp, a, 1)
End If
Next a
nombr = res * 1 'pour un résultat NOMBRE
' nombr = res 'pour un résultat TEXTE
End Function

J'ai ensuite placé ma chaîne de caractères en A1 sur ma feuille Excel,
puis
j'ai écrit =nombr(A1) dans une autre cellule.

Résultat :
- au niveau d'Excel, j'obtiens #VALEUR!
- dans la fenêtre Visual Basic, lorsque je clique sur Débogage puis
Compiler
VBAProject, j'obtient le message Erreur de compilation: End If sans bloc
If

Quelle(s) erreur(s) ai-je faite(s) ?
Merci d'avance pour votre aide !

Cordialement.

buldo


Exemple : une cellule contient la chaîne "Tension 230 V"
Comment extraire le chiffre 230 de cette chaîne, pour l'utiliser dans
une
formule ?
Merci !


Bonsoir buldo,

Non testé :
Alt-F11 | insertion | module
Y copier ce qui suit :
Public Function nombr(inp)
Dim st As String, res As String, a As Integer
st = "0123456789": res = ""
For a = 1 To Len(inp)
If InStr(1, st, Mid(inp, a, 1)) > 0 Then
res = res & Mid(inp, a, 1)
End If
Next a
nombr = res * 1 'pour un résultat NOMBRE
' nombr = res 'pour un résultat TEXTE
End Function

Usage dans la feuille :
Si le teste est en cellule A1 :
=nombr(A1)

@+
FxM








Avatar
AV
| Merci, Patrick, mais ça ne marche pas !
| J'ai écrit mon texte "Tension 230 V" en A1, puis j'ai recopié la formule en
| D1 (aussi en C3). Réponse d'Excel : #N/A !

C'est une formule matricielle --> donc il faut valider par Ctrl+maj+entrée

AV
Avatar
buldo
Bonsoir !

OK, AV ! Maintenant, ça marche !
Mais j'ai oublié de préciser que mon nombre peut être décimal. Or votre
formule donne un résultat entier.
Comment modifier la formule pour qu'un nombre avec, disons, 2 chiffres après
la virgule, soit extrait tel quel de la chaîne ?

Merci d'avance, cordialement.

buldo



| Merci, Patrick, mais ça ne marche pas !
| J'ai écrit mon texte "Tension 230 V" en A1, puis j'ai recopié la formule en
| D1 (aussi en C3). Réponse d'Excel : #N/A !

C'est une formule matricielle --> donc il faut valider par Ctrl+maj+entrée

AV





Avatar
AV
| Mais j'ai oublié de préciser que mon nombre peut être décimal. Or votre
| formule donne un résultat entier.

Toujours une matricielle
=1*STXT(A1;MIN(SI(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))>0;ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))));MAX(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1))))-MIN(SI(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))>0;ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))))+1)

Si le séparateur décimal présent dans la chaîne est différent de celui système,
il faudra rajouter des SUBSTITUE
Relance au besoin
AV


| Comment modifier la formule pour qu'un nombre avec, disons, 2 chiffres après
| la virgule, soit extrait tel quel de la chaîne ?
|
| Merci d'avance, cordialement.
|
| buldo
|
|
|
| > | Merci, Patrick, mais ça ne marche pas !
| > | J'ai écrit mon texte "Tension 230 V" en A1, puis j'ai recopié la formule
en
| > | D1 (aussi en C3). Réponse d'Excel : #N/A !
| >
| > C'est une formule matricielle --> donc il faut valider par Ctrl+maj+entrée
| >
| > AV
| >
| >
| >
Avatar
buldo
Merci, AV !

Super super super !

Cordialement

buldo


| Mais j'ai oublié de préciser que mon nombre peut être décimal. Or votre
| formule donne un résultat entier.

Toujours une matricielle
=1*STXT(A1;MIN(SI(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))>0;ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))));MAX(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1))))-MIN(SI(ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))>0;ESTNUM(1*STXT(A1;LIGNE(INDIRECT("1:"&NBCAR(A1)));1))*LIGNE(INDIRECT("1:"&NBCAR(A1)))))+1)

Si le séparateur décimal présent dans la chaîne est différent de celui système,
il faudra rajouter des SUBSTITUE
Relance au besoin
AV


| Comment modifier la formule pour qu'un nombre avec, disons, 2 chiffres après
| la virgule, soit extrait tel quel de la chaîne ?
|
| Merci d'avance, cordialement.
|
| buldo
|
|
|
| > | Merci, Patrick, mais ça ne marche pas !
| > | J'ai écrit mon texte "Tension 230 V" en A1, puis j'ai recopié la formule
en
| > | D1 (aussi en C3). Réponse d'Excel : #N/A !
| >
| > C'est une formule matricielle --> donc il faut valider par Ctrl+maj+entrée
| >
| > AV
| >
| >
| >