Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Erreur "#¡VALEUR!" renvoyée par une fonction

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai cette fonction :
VB:
Function NumDansCadena(chaîne As String, Optional n As Byte = 1) As Double
'Récupère un chiffre dans une chaîne de caractères
'BOISGONTIER / david84 / mapomme
'- chaîne : la chaîne de caractères qui comprend 1, voire davantage de chiffres séparés par du texte
'- n : la position d'un chiffre dans la chaîne
'Exemple : NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",1) --> 1
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",2) --> 2
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",3) --> 155,35

Dim Obj As Object, a As Object
   
    Set Obj = CreateObject("vbscript.regexp")
    Obj.Global = True
    Obj.Pattern = "\d+(" & Application.DecimalSeparator & "\d+)?"
    Set a = Obj.Execute(chaîne)
       
    NumDansCadena = a(n - 1)
   
End Function
Elle marche très bien.
Le seul problème est le suivant : si je choisis, pour le paramètre "n" de la fonction, une valeur qui dépasse le nombre de chiffres présents dans la chaîne, la fonction me renvoie "#¡VALEUR!". Or, je voudrais qu'elle me renvoie "", plutôt que d'avoir à écrire dans la cellule réceptrice :
=SI(ESERROR(NumDansCadena(D2;F1));"";NumDansCadena(D2;F1))
Comment s'y prendre ?
 
Dernière édition:
Solution
Bonjour,

Essayez ceci:
VB:
Function NumDansCadena(chaîne As String, Optional n As Byte = 1) As String
'Récupère un chiffre dans une chaîne de caractères
'BOISGONTIER / david84 / mapomme
'- chaîne : la chaîne de caractères qui comprend 1, voire davantage de chiffres séparés par du texte
'- n : la position d'un chiffre dans la chaîne
'Exemple : NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",1) --> 1
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",2) --> 2
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",3) --> 155,35

    Dim Obj As Object, a As Object...
Bonjour,

Essayez ceci:
VB:
Function NumDansCadena(chaîne As String, Optional n As Byte = 1) As String
'Récupère un chiffre dans une chaîne de caractères
'BOISGONTIER / david84 / mapomme
'- chaîne : la chaîne de caractères qui comprend 1, voire davantage de chiffres séparés par du texte
'- n : la position d'un chiffre dans la chaîne
'Exemple : NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",1) --> 1
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",2) --> 2
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",3) --> 155,35

    Dim Obj As Object, a As Object
  
    Set Obj = CreateObject("vbscript.regexp")
    Obj.Global = True
    Obj.Pattern = "\d+(" & Application.DecimalSeparator & "\d+)?"
    Set a = Obj.Execute(chaîne)
    On Error GoTo Resultat_Nul
    NumDansCadena = a(n - 1)
    Exit Function
Resultat_Nul:
    NumDansCadena = ""
End Function

Cdlt
 
Bonsoir Magic_Doctor, Rouge,

Pas besoin d'un contrôle d'erreur, utilisez la propriété .Count de l'objet a :
VB:
Function NumDansCadena(chaîne As String, Optional n As Byte = 1)
'Récupère un chiffre dans une chaîne de caractères
'BOISGONTIER / david84 / mapomme
'- chaîne : la chaîne de caractères qui comprend 1, voire davantage de chiffres séparés par du texte
'- n : la position d'un chiffre dans la chaîne
'Exemple : NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",1) --> 1
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",2) --> 2
'          NumDansCadena("Romina a 1 magnifique petit chat, 2 énormes chiens et 155,35 pesos dans son sac à main",3) --> 155,35

    Dim Obj As Object, a As Object

    Set Obj = CreateObject("vbscript.regexp")
    Obj.Global = True
    Obj.Pattern = "\d+(" & Application.DecimalSeparator & "\d+)?"
    Set a = Obj.Execute(chaîne)
  
    If n = 0 Or n > a.Count Then NumDansCadena = "" Else NumDansCadena = CDbl(a(n - 1))
  
End Function
A+
 
Bonjour Rouge,

Merci, ça marche très bien.
Je comprends mieux maintenant comment gérer ce type de problème.

Bonne journée.
Bonjour job,

Je n'avais pas vu ton message (pas rafraîchi).
Je viens d'essayer, mais si n > au nombre de chiffres contenus dans la chaîne, ça me renvoie #¡VALOR!
Mais peut-être est-ce dû à ma version obsolète d'Excel (2007 !!!).
 
Re,

Maintenant ça marche très bien.

Bonne fin d'après-midi.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…