Court-circuiter une erreur dans une fonction

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Avec l'aide du Forum, j'ai rédigé un fonction très simple et courte pour un contrôle de saisies qui vérifie si l'entrée est numérique et positive. Suivant la valeur de "dilemme" (0 ou 1) la valeur "0" sera acceptée ou pas :

Public Function ControleSaisie(saisie As Range, dilemme As Byte) As Byte

If saisie = "" Then
ControleSaisie = 0 'la cellule vide est autorisée
ElseIf dilemme = 1 And saisie <= 0 Or Not IsNumeric(saisie) Or TypeName(saisie.Value) = "String" Or TypeName(saisie.Value) = "Error" Then
ControleSaisie = 1 'cellule avec contenu non numérique ou <= 0 pas autorisée
ElseIf dilemme = 0 And saisie < 0 Or Not IsNumeric(saisie) Or TypeName(saisie.Value) = "String" Or TypeName(saisie.Value) = "Error" Then
ControleSaisie = 1 'cellule avec contenu non numérique ou < 0 pas autorisée
Else
ControleSaisie = 0 'tout le reste est autorisé
End If

'If IsError(ControleSaisie) Then ControleSaisie = 1

End Function

La fonction marche bien mais pas dans tous les cas.
Par exemple si je rentre une valeur tout à fait erronée comme "-ñ" ou "-lolo" par ex., la fonction ne marche plus.
J'ai bien essayé d'y intercaler :
If IsError(ControleSaisie) Then ControleSaisie = 1
Mais sans succès...

Merci d'avance pour tout tuyau.
 
C

Compte Supprimé 979

Guest
Re : Court-circuiter une erreur dans une fonction

Buenos Dias Magic_Doctor ;)

Lorsque tu saisis un moins avec du texte derrière, Excel prends ça comme la soustration d'une cellule nommée.
Donc il y a tout de suite une erreur

Tu peux essayer
Code:
Public Function ControleSaisie(Saisie As Range, dilemme As Byte) As Byte
  ' En cas d'erreur ControleSaisie = 1
  On Error GoTo FinFonction
  
  If Saisie = "" Then
    ControleSaisie = 0  'la cellule vide est autorisée
  ElseIf dilemme = 1 And Saisie <= 0 Or Not IsNumeric(Saisie) Or TypeName(Saisie.Value) = "String" Or TypeName(Saisie.Value) = "Error" Then
    ControleSaisie = 1  'cellule avec contenu non numérique ou <= 0 pas autorisée
  ElseIf dilemme = 0 And Saisie < 0 Or Not IsNumeric(Saisie) Or TypeName(Saisie.Value) = "String" Or TypeName(Saisie.Value) = "Error" Then
    ControleSaisie = 1  'cellule avec contenu non numérique ou < 0 pas autorisée
  Else
    ControleSaisie = 0  'tout le reste est autorisé
  End If
  Exit Function
FinFonction:
  ControleSaisie = 1
End Function

A+
 

job75

XLDnaute Barbatruc
Re : Court-circuiter une erreur dans une fonction

Bonsoir Magic Doctor,

J'ai bien essayé d'y intercaler :
If IsError(ControleSaisie) Then ControleSaisie = 1
Mais sans succès...

Ne pas intercaler, mais au début :

Code:
Public Function ControleSaisie(saisie As Range, dilemme As Byte) As Byte
If IsError([COLOR="Red"]saisie[/COLOR]) Then ControleSaisie = 1: Exit Function
'---reste du code---
End Function

Edit : salut Bruno :)

A+
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re : Court-circuiter une erreur dans une fonction

Hola BrunoM45 & Job75,

Merci pour vos solutions qui règlent parfaitement le problème.
J'ai opté pour celle de Job, plus courte et ne nécessitant pas de "balise" (enfin, le machin avec les ":"). Mais, quoi qu'il en soit, les 2 solutions fonctionnent !

Bonne fin d'après-midi septentrionale.
Ici, après la suffocante canicule, la pluie, el "Pampero", et c'est pas plus mal !
 

Discussions similaires

Réponses
21
Affichages
1 K