Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

renvoyer "" si antécedent vide ou non valide

5 réponses
Avatar
Farah
Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le résultat
de ma formule, soit «» si une des cellules utilisée dans mon calcul est vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et la
fonction retournerait «» si C1, A1 ou B1 sont vide ou si le résultat du
calcul est une erreur. Si les trois cellules contiennent un nombre, alors ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu’un a une idée ?

J’ai réussi à créer une macro qui vérifie si les antécédents de la cellule
active contiennent tous des valeurs et qui insère « VRAI » dans la cellule en
dessous si l’un des antécédents est une cellule vide, mais ça ne l’a pas
beaucoup avancé… Pour info, le code de ma macro est à la fin du message.

J’ai pensé que je pourrais insérer ma formule en tant qu’argument texte dans
la fonction (=MaFonction (« C1*A1/B1 »)), puis je pourrais vérifier que tous
les antécédents de ma formule contiennent des valeurs. Le hic, c’est que si
je défini l’argument de ma fonction comme une chaine de caractère, je ne sais
pas comment faire pour que vba le voit comme une formule et recherche les
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPrecedents).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
If IsEmpty(d) Then
ok = True
End If
Next

ActiveCell.Offset(1).Value = ok

End Sub

5 réponses

Avatar
Monnerie
Bonjour,
on peut utliser la fonction SI, la fonction ET et la fonction ESTVIDE
du style :
=SI(ET(ESTVIDE(A1);ESTVIDE(B1);ESTVIDE(C1));"<<>>";C1*A1/B1)
si on veut intégrer une erreur il faut intégrer ESTERREUR avec la fonction
OU
exemple pour A1 : OU(ESTERREUR(A1);ESTVIDE(A1))
il y a surement plus simple en macro mais je ne suis pas compétent
Bon courage

"Farah" a écrit dans le message de news:


Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le
résultat
de ma formule, soit «» si une des cellules utilisée dans mon calcul est
vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et la
fonction retournerait «» si C1, A1 ou B1 sont vide ou si le résultat du
calcul est une erreur. Si les trois cellules contiennent un nombre, alors
ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu'un a une idée ?

J'ai réussi à créer une macro qui vérifie si les antécédents de la cellule
active contiennent tous des valeurs et qui insère « VRAI » dans la cellule
en
dessous si l'un des antécédents est une cellule vide, mais ça ne l'a pas
beaucoup avancé. Pour info, le code de ma macro est à la fin du message.

J'ai pensé que je pourrais insérer ma formule en tant qu'argument texte
dans
la fonction (=MaFonction (« C1*A1/B1 »)), puis je pourrais vérifier que
tous
les antécédents de ma formule contiennent des valeurs. Le hic, c'est que
si
je défini l'argument de ma fonction comme une chaine de caractère, je ne
sais
pas comment faire pour que vba le voit comme une formule et recherche les
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPrecedents).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
If IsEmpty(d) Then
ok = True
End If
Next

ActiveCell.Offset(1).Value = ok

End Sub



Avatar
JB
Bonjour,

Function mafonction(p)
Application.Volatile
oper = Array("+", "-", "*", "/")
temp = p
For i = 0 To UBound(oper)
temp = Replace(temp, oper(i), " ")
Next i
temp = Replace(temp, "(", "")
temp = Replace(temp, ")", "")
a = Split(temp, " ")
For i = 1 To UBound(a)
If Range(a(i)) = 0 Or Range(a(i)) = "" Then témoin = True
Next
If témoin Then
mafonction = ""
Else
mafonction = Evaluate(p)
End If
End Function

http://cjoint.com/?dhmYWVmreP

JB

On 7 mar, 12:20, Farah wrote:
Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le r ésultat
de ma formule, soit <<>> si une des cellules utilisée dans mon calcul es t vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et la
fonction retournerait <<>> si C1, A1 ou B1 sont vide ou si le résultat d u
calcul est une erreur. Si les trois cellules contiennent un nombre, alors ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu'un a une idée ?

J'ai réussi à créer une macro qui vérifie si les antécédents d e la cellule
active contiennent tous des valeurs et qui insère << VRAI >> dans la cel lule en
dessous si l'un des antécédents est une cellule vide, mais ça ne l'a pas
beaucoup avancé... Pour info, le code de ma macro est à la fin du mess age.

J'ai pensé que je pourrais insérer ma formule en tant qu'argument text e dans
la fonction (=MaFonction (<< C1*A1/B1 >>)), puis je pourrais vérifier que tous
les antécédents de ma formule contiennent des valeurs. Le hic, c'est q ue si
je défini l'argument de ma fonction comme une chaine de caractère, je ne sais
pas comment faire pour que vba le voit comme une formule et recherche les
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPreceden ts).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
If IsEmpty(d) Then
ok = True
End If
Next

ActiveCell.Offset(1).Value = ok

End Sub


Avatar
Jacky
Bonjour,

Peut-être sans macro
=SI(NB(A1:C1)<>3;"Donnée absente ou non
numérique";SI(ESTERREUR(C1*A1/B1);"Erreur";C1*A1/B1))
--
Salutations
JJ


"Farah" a écrit dans le message de news:


Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le
résultat
de ma formule, soit «» si une des cellules utilisée dans mon calcul est
vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et la
fonction retournerait «» si C1, A1 ou B1 sont vide ou si le résultat du
calcul est une erreur. Si les trois cellules contiennent un nombre, alors
ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu'un a une idée ?

J'ai réussi à créer une macro qui vérifie si les antécédents de la cellule
active contiennent tous des valeurs et qui insère « VRAI » dans la cellule
en
dessous si l'un des antécédents est une cellule vide, mais ça ne l'a pas
beaucoup avancé. Pour info, le code de ma macro est à la fin du message.

J'ai pensé que je pourrais insérer ma formule en tant qu'argument texte
dans
la fonction (=MaFonction (« C1*A1/B1 »)), puis je pourrais vérifier que
tous
les antécédents de ma formule contiennent des valeurs. Le hic, c'est que
si
je défini l'argument de ma fonction comme une chaine de caractère, je ne
sais
pas comment faire pour que vba le voit comme une formule et recherche les
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPrecedents).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
If IsEmpty(d) Then
ok = True
End If
Next

ActiveCell.Offset(1).Value = ok

End Sub



Avatar
JB
Bonjour,

Je suppose que Farah veut une fonction générique pour toute expression
et pas seulement pour l'exemple.

JB
On 7 mar, 12:57, "Jacky" wrote:
Bonjour,

Peut-être sans macro
=SI(NB(A1:C1)<>3;"Donnée absente ou non
numérique";SI(ESTERREUR(C1*A1/B1);"Erreur";C1*A1/B1))
--
Salutations
JJ

"Farah" a écrit dans le message de new s:






Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le
résultat
de ma formule, soit «» si une des cellules utilisée dans mon calcu l est
vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et l a
fonction retournerait «» si C1, A1 ou B1 sont vide ou si le résult at du
calcul est une erreur. Si les trois cellules contiennent un nombre, alor s
ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu'un a une idée ?

J'ai réussi à créer une macro qui vérifie si les antécédents de la cellule
active contiennent tous des valeurs et qui insère « VRAI » dans la cellule
en
dessous si l'un des antécédents est une cellule vide, mais ça ne l 'a pas
beaucoup avancé. Pour info, le code de ma macro est à la fin du mess age.

J'ai pensé que je pourrais insérer ma formule en tant qu'argument te xte
dans
la fonction (=MaFonction (« C1*A1/B1 »)), puis je pourrais vérif ier que
tous
les antécédents de ma formule contiennent des valeurs. Le hic, c'est que
si
je défini l'argument de ma fonction comme une chaine de caractère, j e ne
sais
pas comment faire pour que vba le voit comme une formule et recherche le s
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPreced ents).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
   If IsEmpty(d) Then
       ok = True
   End If
Next

ActiveCell.Offset(1).Value = ok

End Sub- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Farah
Merci à tous les trois d'avoir répondu si rapidement.

à JB: Effectivement, je cherche une fonction qui marcherait pour toute
expression. J'ai pris un exemple simple, mais parfois j'ai des moyennes, des
carrés, etc. Donc la fonction que vous suggérez (très astucieuse par
ailleurs) ne résout pas entièrement mon problème.

à Monnerie : pour l’instant j’utilise la fonction Si, comme vous le
proposez, mais c’est un peu lourd, c’est pour ça que je voulais créer une
fonction personnalisée.


"JB" wrote:

Bonjour,

Je suppose que Farah veut une fonction générique pour toute expression
et pas seulement pour l'exemple.

JB
On 7 mar, 12:57, "Jacky" wrote:
Bonjour,

Peut-être sans macro
=SI(NB(A1:C1)<>3;"Donnée absente ou non
numérique";SI(ESTERREUR(C1*A1/B1);"Erreur";C1*A1/B1))
--
Salutations
JJ

"Farah" a écrit dans le message de news:






Bonjour,

Je voudrais créer une fonction personnalisée qui renverrait soit le
résultat
de ma formule, soit «» si une des cellules utilisée dans mon calcul est
vide
ou contient une valeur non valide (erreur ou texte par exemple).

Par exemple, je taperai dans une cellule =MaFonction (C1*A1/B1) , et la
fonction retournerait «» si C1, A1 ou B1 sont vide ou si le résultat du
calcul est une erreur. Si les trois cellules contiennent un nombre, alors
ma
fonction renverrait le résultat du calcul.

Est-ce que quelqu'un a une idée ?

J'ai réussi à créer une macro qui vérifie si les antécédents de la cellule
active contiennent tous des valeurs et qui insère « VRAI » dans la cellule
en
dessous si l'un des antécédents est une cellule vide, mais ça ne l'a pas
beaucoup avancé. Pour info, le code de ma macro est à la fin du message.

J'ai pensé que je pourrais insérer ma formule en tant qu'argument texte
dans
la fonction (=MaFonction (« C1*A1/B1 »)), puis je pourrais vérifier que
tous
les antécédents de ma formule contiennent des valeurs. Le hic, c'est que
si
je défini l'argument de ma fonction comme une chaine de caractère, je ne
sais
pas comment faire pour que vba le voit comme une formule et recherche les
antécédents. (i.e. je ne peux pas utiliser la fonction .DirectPrecedents).

Merci de votre aide !
Farah

Code de ma macro :
Sub Empty_precedent()

Dim Cd As Range
Dim ok As Boolean
ok = False

Set Cd = ActiveCell.DirectPrecedents
For Each d In Cd
If IsEmpty(d) Then
ok = True
End If
Next

ActiveCell.Offset(1).Value = ok

End Sub- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -