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.
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 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
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+
Re,

Maintenant ça marche très bien.

Bonne fin d'après-midi.
 

Discussions similaires

Réponses
9
Affichages
638

Statistiques des forums

Discussions
315 124
Messages
2 116 460
Membres
112 748
dernier inscrit
Pboiusquet