XL 2010 Fonction qui marche mal quand elle est lancée à partir d'une macro

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai bricolé une fonction qui permet une mise en forme particulière d'une saisie.
Cette fonction marche apparemment bien quand on la lance sur la feuille. En revanche, elle se plante assez souvent quand on la lance à partir d'une macro événementielle.

Comment résoudre ce problème ?
 

Pièces jointes

  • décimales Après Virgule.xlsm
    24 KB · Affichages: 40

Magic_Doctor

XLDnaute Barbatruc
J'ai en partie réglé le problème. Seul persiste celui de la saisie (dernier exemple) quand on omet le préfixe et le suffixe.
C'est bizarre, je ne comprends pas pourquoi ça ne marche pas.
 

Pièces jointes

  • décimales Après Virgule (2).xlsm
    24.1 KB · Affichages: 37

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor,
Code:
Function TantDeChiffresAprèsVirgule$(x#, dec%, Optional pref = "", Optional suf = "")
TantDeChiffresAprèsVirgule = pref & Format(x, "0." & String(dec, "0")) & suf
'---quand la fonction est appelée par macro---
If TypeName(Application.Caller) <> "Range" Then _
  If IsNumeric(TantDeChiffresAprèsVirgule) Then _
    TantDeChiffresAprèsVirgule = "'" & TantDeChiffresAprèsVirgule
End Function
Pour C7 et C14 : quand on entre une valeur dans une cellule Excel tente toujours de la convertir en nombre.

Pour l'éviter, il faut mettre la cellule au format Texte ou mettre une apostrophe ' devant la valeur.

Nota : pour l'entrée en C14 il faut que tu ajoutes des Application.EnableEvents = False/True !!!

A+
 

job75

XLDnaute Barbatruc
Re,

Ceci est mieux car on peut entrer n'importe quoi en C2 ou C3 :
Code:
Function TantDeChiffresAprèsVirgule$(x, dec, Optional pref = "", Optional suf = "")
If IsError(x) Or IsError(dec) Then Exit Function
dec = Abs(Int(Val(dec)))
TantDeChiffresAprèsVirgule = pref & Format(x, "0" & IIf(dec, "." & String(dec, "0"), "")) & suf
'---quand la fonction est appelée par macro---
If TypeName(Application.Caller) <> "Range" Then _
  If IsNumeric(TantDeChiffresAprèsVirgule) Then _
  TantDeChiffresAprèsVirgule = "'" & TantDeChiffresAprèsVirgule
End Function
A+
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir tout le monde et en particulier job,

job, muchas gracias otra vez por tu ayuda.

Effectivement, ta 2ème proposition permet surtout de choisir "0" décimales.
Tout marche maintenant très bien.
Pour aller un peu plus loin dans le "fun", j'ai dressé une colonne où l'on rentre des données qui, au fur et à mesure de leurs entrées, sont mises en forme. La dernière cellule récupère la somme de toutes les données entrées, laquelle somme est à son tour mise en forme afin qu'il y ait toujours le même nombre de décimales après la virgule (plus joli). Ma foi, mon bidouillage a l'air de fonctionner, seulement apparaissent d'agaçants petits triangles verts. Comment s'en débarrasser à tout jamais ?
 

Pièces jointes

  • décimales Après Virgule (3).xlsm
    26.2 KB · Affichages: 28

Magic_Doctor

XLDnaute Barbatruc
Bonsoir jecherche,

Je viens d'essayer, ça marche.
Quoi qu'il en soit, c'est très curieux. Quand je rentre une vgaleur dans C14, il n'y a auncun problème. En revanche, quand je rentre une valeur dans n'importe quelle cellule de la plage C16:C25, alors apparaissent ces triangles. Quelque chose doit donc se passer. Comment stipuler (ou faire en sorte) dans la macro pour que ces résultats ne soient pas considérés comme des erreurs ? Ce serait nettement plus pratique que d'avoir à configurer Excel si on change d'ordi.
 

job75

XLDnaute Barbatruc
Bonjour Magic_Doctor, Paf, jecherche,

Excel met des triangles verts quand la valeur peut être convertie en nombre et qu'on la force à être un texte.

En C14 la valeur est un texte qui ne peut pas être converti en nombre à cause du suffixe (qui n'a rien de monétaire).

Il y a une apostrophe parce que C14 n'est pas formatée correctement : copie/colle E14 sur C14 et entre de nouveau un nombre.

Pour éviter les triangles verts l'enregistreur de macro donne :
Code:
Application.ErrorCheckingOptions.NumberAsText = False
A+
 

Magic_Doctor

XLDnaute Barbatruc
Bonjour le forum, job,

Merci job pour tes explications. Ça s'éclaircit dans mon esprit !
En effet, si dans la colonne de saisies, dans le paramétrage je change "€" par "$U", les triangles verts n'apparaissent plus.
Curieux qu'Excel ne reconnaisse pas "$U" comme un attribut monétaire (en l'occurrence celui de l'Uruguay). Le peso, quel qu'il soit (Argentine, Bolivie, Chili... partout où il y a du peso) est toujours désigné par "$". Mais il est vrai que les Zuniens, peu friands de géographie exotique, s'en tapent !
Persiste un ultime problème. Si, dans le paramétrage de la cellule "C14", je remplace "$U" par "€", le résultat n'est bon que lorsque le nombre de décimales après la virgule est égal à 1 ou 2.

Mais dans la pratique, à part enquiquiner, à quoi servent ces triangles verts ?

Bonne journée
 

Pièces jointes

  • décimales Après Virgule (4).xlsm
    26.8 KB · Affichages: 22

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Ils servent à signaler des "erreurs" :

upload_2016-7-25_20-34-48.png


Si l'on veut ne pas afficher "les erreurs" sur tous les classeurs

upload_2016-7-25_20-33-37.png


A+ à tous
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Muchas gracias, mais ça, j'avais quand même compris.
Ces erreurs signalées par ces triangles verts sont en fait des "pseudo erreurs", car s'il s'agissait vraiment de grosses-fatales erreurs, apparaîtraient alors des signes cabalistiques les signalant.

Je pense que la solution de job75 :
Application.ErrorCheckingOptions.NumberAsText = False
est, somme toute, la plus pratique pour se débarrasser de ces triangles que je trouve d'une utilité fort discutable. Pour preuve : on peut les éliminer.
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 868
dernier inscrit
JJV