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

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

Rouge

XLDnaute Impliqué
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
 

job75

XLDnaute Barbatruc
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+
 

Magic_Doctor

XLDnaute Barbatruc
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 !!!).
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Maintenant ça marche très bien.

Bonne fin d'après-midi.
 

Discussions similaires

Réponses
9
Affichages
477
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…