Ne pas faire apparaître de message d'erreur dans le résultat d'une fonction

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Ma fille m'a demandé de lui résoudre un problème pour son boulot.
Je lui ait fait une fonction qui répond à ses attentes (peut-être que l'on pourrait faire quelque chose de plus élégants pour la série de boucles...).
Seulement voilà, quand l'une des cellules du tableau est vide, la fonction me renvoie (en espagnol) "#¡VALOR!".
Quécrire dans la fonction pour y remédier et qu'à la place de "#¡VALOR!" il n'y ait tout simplement rien (c'est plus joli) ?

Merci d'avance pour toute aide.
 

Pièces jointes

  • Fonction.xlsm
    21.6 KB · Affichages: 70
  • Fonction.xlsm
    21.6 KB · Affichages: 78
  • Fonction.xlsm
    21.6 KB · Affichages: 78

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Ne pas faire apparaître de message d'erreur dans le résultat d'une fonction

Bonsoir Magic_Doctor,

En rajoutant une instruction On Error goto ERREUR avant i =1 et une étiquette ERREUR: avant le End Function, ça devrait le faire.
 

Pièces jointes

  • Fonction v1.xlsm
    20.6 KB · Affichages: 43

PMO2

XLDnaute Accro
Re : Ne pas faire apparaître de message d'erreur dans le résultat d'une fonction

Bonjour,

Essayez de remplacer votre code par le code suivant comportant des ajouts signalés par des ///
Code:
Function FindWord(cel1 As Range, cel2 As Range, mot1 As String, mot2 As String, sentence1 As String, sentence2 As String) As String
'Cherche s'il y a des mots donnés dans 2 chaînes de caractères
'- cel1 : la 1ère cellule où se trouve la chaîne de caractères
'- cel2 : la 2ème cellule où se trouve la chaîne de caractères
'- mot1 : le mot que l'on cherche dans la chaîne de caractères de la 1ère cellule "cel1"
'- mot2 : le mot que l'on cherche dans la chaîne de caractères de la 2ème cellule "cel2"
'- sentence1 : le mot qui doit apparaître si les 2 cellules contiennent le mot "mot1"
'- sentence2 : le mot qui doit apparaître si l'une des 2 cellules (ou les 2) contient le mot "mot2"
Dim i As Byte, texte1 As String, texte2 As String, verdict1 As Byte, verdict2 As Byte

On Error GoTo Erreur  '///

texte1 = LCase(cel1.Value): texte2 = LCase(cel2.Value) 'permet de ne pas tenir compte de la casse (majuscules / minuscules)
mot1 = LCase(mot1): mot2 = LCase(mot2) 'permet de ne pas tenir compte de la casse (majuscules / minuscules)
'FindWord2 = "" 'par défaut, le mot n'a pas été trouvé

i = 1
For i = 1 To Len(texte1) - Len(mot1) + 1 'cherche le 1er mot dans la chaîne de la 1ère cellule
    If Mid(texte1, i, Len(mot1)) = mot1 Then verdict1 = 1
Next i
i = 1
For i = 1 To Len(texte2) - Len(mot1) + 1 'cherche le 1er mot dans la chaîne de la 2ème cellule
    If Mid(texte2, i, Len(mot1)) = mot1 Then verdict2 = 1
Next i
i = 1
For i = 1 To Len(texte1) - Len(mot2) + 1 'cherche le 2ème mot dans la chaîne de la 1ère cellule
    If Mid(texte1, i, Len(mot2)) = mot2 Then verdict1 = 2
Next i
i = 1
For i = 1 To Len(texte2) - Len(mot2) + 1 'cherche le 2ème mot dans la chaîne de la 2ème cellule
    If Mid(texte2, i, Len(mot2)) = mot2 Then verdict2 = 2
Next i

FindWord = IIf(verdict1 + verdict2 = 2, sentence1, sentence2)

'////
Exit Function
Erreur:
FindWord = ""
'////
End Function
 

Magic_Doctor

XLDnaute Barbatruc
Re : Ne pas faire apparaître de message d'erreur dans le résultat d'une fonction

Bonsoir excfl,

Nos posts se sont croisés,

En effet, j'avais pensé à cette solution, mais je voulais tout régler au sein même de la fonction, afin de n'avoir qu'à écrire celle-ci dans la barre de formules en se prenant le moins possible la tête. Dans la mesure du possible, je suis définitivement plus VBA (même si souvent j'ai du mal à capter) que formules qui font rapidement disjoncter les neurones...
 

Discussions similaires

Statistiques des forums

Discussions
311 737
Messages
2 082 036
Membres
101 878
dernier inscrit
1475214