pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

mailmu

XLDnaute Nouveau
Bonjour,

j'ai cherché (un peu) des réponses sur le forum sans succès.

Voici ce que je veux faire :
récupérer la valeur d'une 'cellule a' dans une 'cellule x' par formule
la 'cellule a' va contenir soit une valeur numérique soit un vide
(pas un blanc, la case est vide)

A noter :
si je n'ai rien dans la 'cellule a', c'est à dire si la case est vide,
je veux que dans la 'cellule x' qui contient la formule qui va chercher la valeur de la 'cellule a', rien ne s'affiche, surtout pas zéro

mon souci :
Dans certains cas, au lieu d'afficher une case vide,
la formule affiche zéro

question :
J'essaye de comprendre pourquoi la formule affiche zéro alors que je prend le contenu d'un case vide ?

l'exemple que j'ai utilisé :
Pour aider, j'ai un petit fichier excel ci-joint, pour lequel j'ai deux cellules a et b, toutes les deux sont vides sauf que la formule qui utilise la 'cellule a' affiche un vide et la formule qui utilise la 'cellule b' renvoie la valeur zéro

Si on fait un copier/coller spécial de la formule de la 'cellule a' dans la 'cellule b' le résultat de la formule passe bien à vide. --> c'est ce qui me sert pour contourner mon problème.
Si on se positionne sur la 'cellule a' et que l'on clique dans la barre de formule de la cellule et qu'on en sort, le résultat de la formule passe à zéro.

J'ai surtout envie de comprendre ce qui se passe.
Vous avez une idée ?
 

Pièces jointes

  • test excel case vide.xls
    13.5 KB · Affichages: 215

ROGER2327

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour mailmu
Et bienvenue dans le monde logico-approximatif de Mister Bill.
Le problème que vous soulevez est réel et sera (peut-être...) résolu dans la version Excel 2092 ou Excel 3803. Pour l'instant je n'ai pas mieux à vous proposer que
Code:
[COLOR="DarkSlateGray"][SIZE="3"]=SI(C2="";"";C2)[/SIZE][/COLOR]
Bon courage !
ROGER2327
 

macsscam

XLDnaute Junior
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour et bienvenue sur XLD,

Selon la formule utilisée, Excel va adapter par défaut l'affichage du résultat.

Par exemple, avec une formule =C3.
si la cellule est vide, Excel va par défaut afficher la formule sous la forme de nombre et affiche donc "0".

Pour palier ce problème, tu peux :
1. modifier le format du résultat en ajoutant &"" à ta formule, cela donnerait donc =C3&""
--> le résultat apparaît sous forme de texte donc vide s'il n'y a rien
--> limite : si tu veux réutiliser ces chiffres derrière comme des nombres, Excel risque de t'embêter

2. Tester en amont que la cellule est vide avec la formule ESTVIDE().
Par exemple : =SI(ESTVIDE(C3);"";C3)
--> tu peux donc remplacer les "" (cellule vide) par ce qui t'arrange.


N'hésite pas à nous redemander si la réponse n'est pas claire.

Bon courage,

--
Max
 

tototiti2008

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour mailmu,

par défaut, sur une cellule vide, la formule

=C2

renvoie 0 sur Excel.

solution :

=SI(C2="";"";C2)

pourquoi C2 et C3 ne réagissent pas pareil ?
C2 contient le texte ""
C3 est vraiment vide

si tu veux mettre le texte "" dans une cellule, tu peux faire comme ça :

dans une cellule, tapes la formule
=""
Copier/Collage spécial - valeurs dans une autre cellule
 

ROGER2327

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Re...
j'aurai au moins essayer de comprendre....
Merci!
J'ai peur qu'il n'y ait rien d'autre à comprendre que, pour Mister Bill et ses comparses, zéro et vide sont synonymes.
Et ils en ont d'autres du même tonneau, comme, par exemple, que la réunion d'une plage non vide (comme "A1:A3") et d'une plage vide ("Nothing") n'est pas la plage non vide (dans cet exemple "A1:A3"). Vous verrez ça quand vous voudrez utiliser UNION("Plage_1";"Plage_2) dans VisualBasic pour Excel.
Il est vrai que ce genre de confusion n'a été définitivement éclairci qu'au XIXème siècle. Ça finira bien par traverser l'Atlantique.​
Encore un fois : bon courage !
ROGER2327
 

hoerwind

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour,

Et pourtant en ajoutant un 0 derrière le nombre figurant sur un chèque, ce n'est pas rien !

Contrairement à ce qui a été dit plus haut, notre ami Bill n'y est pour rien (parce qu'il n'est pas un nul).
C'est le processeur qui assimile rien à 0.
Lorsqu'on multiplie 0*5, le résultat est 0, mais (vide)*5 vaut aussi 0, tandis que ""*5 ou " "*5 renvoient un message d'erreur.

Le plus simple est de mettre la cellule contenant la formule dans un format qui n'affiche pas le 0.
Par exemple Standard;; ou tout autre format contenant deux ;, le dernier n'étant suivi de rien, 0,00;; ou 0,00;-0,00;
 

ROGER2327

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonsoir à tous
Un petit tableau dans le classeur joint... (Je le trouve amusant, mais on n'est pas obligé d'être d'accord avec moi.)​
ROGER2327
 

Pièces jointes

  • Logique.xls
    13.5 KB · Affichages: 186
  • Logique.xls
    13.5 KB · Affichages: 189
  • Logique.xls
    13.5 KB · Affichages: 200

hoerwind

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour Roger,

Cela confirme ce que je disais, une cellule vide est assimilée à 0 mais ne vaut pas 0, tandis qu'une cellule qui convient une formule n'est pas vide, même si elle renvoie "rien".
=C3-B3 = 0 parce que C3 est vide
=C4-B4 = #VALEUR! parce que C4 n'est pas vide et non-numérique

Dans le même ordre d'esprit :
=C4*B4 = #VALEUR!
=PRODUIT(C4;B4) = 0

Le cas se produit également avec NBVAL
Le nombre de cellules d'une plage contenant soit une valeur alphabétique, soit "", renvoyés par une formule, est égal au nombre total des cellules et non pas au nombre de cellules contenant une valeur alphabétique.
 

ROGER2327

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonsoir hoerwind
(...)
Cela confirme ce que je disais, une cellule vide est assimilée à 0 mais ne vaut pas 0, tandis qu'une cellule qui convient une formule n'est pas vide, même si elle renvoie "rien".
(...)
Entièrement d'accord avec ces constatations.
Poussons un peu plus loin... Dans le classeur de mon précédent message, si on copie B4, puis qu'on colle le presse-papier en "Valeur seule" en B4, la formule est supprimée. Pourtant rien ne change dans le résultat. J'en conclus qu'une cellule vide, même sans formule, n'est pas aussi vide qu'une cellule vide.
Enfin, le plus curieux est que, si on double-clique en B4 et on valide sans rien modifier dans cette cellule, le résultat en D4 est modifié !
Maintenant, si on reprend le même classeur pour l'ouvrir avec OpenOffice.org Calc, et qu'on fait la même manœuvre de copier/coller valeur seule, le résultat est mis à jour : les comparaisons de B3, C3 de B4, C4 donnent le même résultat.
Au passage, la manip étant faite sur la même machine, on doit en conclure que la différence de comportement résulte des logiciels et non du processeur.
Il s'agit simplement de constatations que je ne parviens pas à comprendre. Celle qui m'est la plus incompréhensible est celle du copier/coller valeur seule qui doit être spécifiquement validé si la valeur à copier est la chaîne vide, alors qu'une deuxième validation est inutile pour d'autres valeurs.
C'est irritant, mais cela ne m'empêchera pas de dormir !
Bonne nuit.
ROGER2327
 

TooFatBoy

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Je crois qu'on peut chercher une explication du côté des variants... ou plus précisément si on admet que le contenu d'une cellule vide est un variant comme on en trouve en VBA.

Selon ce principe de variant, on cromprend que Microsoft a programmé EXCEL (le processeur n'a rien à voir là dedans, il ne fait que ce qu'on lui demande ;)) de façon à ce qu'il s'adapte dynamiquement.


Tant qu'une cellule est vide, elle n'a pas de type, c'est un variant :

- Ainsi quand on compare une cellule vide à un nombre, la cellule vide prend la valeur 0 (zéro) dans la comparaison.
Donc B3=C3

- En revanche si on la compare à une cellule comportant du texte, elle va prendre la valeur "" dans la comparaison.
Donc B3=B4

- Si on compare une chaîne vide à un nombre, ça reste une chaîne même si c'est vide.
Donc B4<>C4.


De même, le caractère 0 (zéro) n'est pas égal au nombre 0 (zéro) et ça ne choque personne là ??? Ben non, parce que c'est logique... et je dirais même que c'est tout aussi logique, mais peut-être plus facilement appréhendable.


Je pense que cela est fait pour aider l'utilisateur afin qu'il n'ait pas besoin de définir le type de chaque cellule vide avant de l'utiliser.
 

ROGER2327

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonsoir Marcel32
J'entends ce que vous dites. Que le caractère 0 et le nombre 0 sont différents ne choque, je l'espère, personne. Si on place ="0" en A1, 0 en A2 et =A1=A2 en A3, on obtient, fort logiquement, FAUX.
Il n'en reste pas moins que, dans l'exemple que je donnais hier, on a simultanément
_
B4=B3 est VRAI, B3=C3 est VRAI, C3=C4 est VRAI, B4=C4 est FAUX.
_
En logique "ordinaire", la conjonction des trois premières assertions simultanément vraies implique infailliblement la vérité de l'égalité de B4 et C4.
La formule
Code:
[COLOR="DarkSlateGray"]=ET(B3=B4;B3=C3;C3=C4)[/COLOR]
renvoie très justement VRAI dans l'exemple que je donne. Comme, dans la même situation, la formule
Code:
[COLOR="DarkSlateGray"]=B4=C4[/COLOR]
renvoie FAUX, on est en droit d'avoir des doutes sur la logique qui gouverne les fonctions logiques, même si des explications peuvent être imaginées, et, croyez-le, comprises : B3 qui a la valeur vide quand on ne lui demande rien, prend la valeur "" quand on la compare à "", et la valeur 0 quand on la compare à 0. Autrement dit, dans la formule
Code:
[COLOR="DarkSlateGray"]=ET(B3=B4;B3=C3;C3=C4)[/COLOR]
B3, qui est vide, a simultanément les valeurs "" et 0. Logique !
Question : "A cet instant, qu'elle est la valeur de la cellule B3 ?"
Si la réponse est : "Ça dépend..."
...je suis mal.
Il serait surtout logique que tous les tests de mon tableau renvoyassent FAUX, à l'exception de C3=C4. Et à ce que vous dites :
"le caractère 0 (zéro) n'est pas égal au nombre 0 (zéro) et ça ne choque personne"
j'ajouterai "la chaîne "" (chaine vide) n'est pas égale au nombre 0 (zéro), tout comme la valeur d'une cellule vide n'est pas égale au nombre 0 (zéro), et ça ne devrait choquer personne".
Cordialement,
ROGER2327
 

TooFatBoy

XLDnaute Barbatruc
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Le principe même d'un variant, c'est de... varier ;), autrement dit de changer de type.

Une cellule vide n'a pas de type au départ. Lors d'une comparaison avec un nombre elle sera donc concidérée comme étant égal au chiffre zéro, alors que si elle est comparée à une chaîne de caractère elle sera considérée comme étant une chaîne vide.
Somme toute rien que de très logique. ;)


Il est certain que si on n'accepte pas qu'une cellule vide (mais uniquement celles-là) soit un variant, ce "problème" ne trouvera d'explication à mon avis.

Dans la vie il en va pourtant un peu de même : le simple fait de mesurer une grandeur la fait varier.
 

mailmu

XLDnaute Nouveau
Re : pourquoi la Ma formule affiche zéro alors que je prend le contenu d'un case vide

Bonjour et bienvenue sur XLD,

Selon la formule utilisée, Excel va adapter par défaut l'affichage du résultat.

Par exemple, avec une formule =C3.
si la cellule est vide, Excel va par défaut afficher la formule sous la forme de nombre et affiche donc "0".

Pour palier ce problème, tu peux :
1. modifier le format du résultat en ajoutant &"" à ta formule, cela donnerait donc =C3&""
--> le résultat apparaît sous forme de texte donc vide s'il n'y a rien
--> limite : si tu veux réutiliser ces chiffres derrière comme des nombres, Excel risque de t'embêter

2. Tester en amont que la cellule est vide avec la formule ESTVIDE().
Par exemple : =SI(ESTVIDE(C3);"";C3)
--> tu peux donc remplacer les "" (cellule vide) par ce qui t'arrange.


N'hésite pas à nous redemander si la réponse n'est pas claire.

Bon courage,

--
Max

Bonjour,

je pense utiliser la seconde solution, en testant la rubrique à vide, car la cellule est utilisée plusieurs fois en tant que 'nombre'

encore merci pour les explications
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35