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

Pourquoi 3 + VRAI = 2 ?

62 réponses
Avatar
Gouap
Bonsoir,

je ne comprends pas pourquoi quand j'additionne le résultat d'une macro qui
retoure la valeur "Vrai" à une autre valeur positive, je me retrouve avec ma
veleur positive - 1 au lieu de +1.

A = 3 + "Vrai" = 2
A = -3 + "Vrai" = -4

Avez vous une explication à ce phénomène ?

10 réponses

1 2 3 4 5
Avatar
isabelle
bonjour Jérôme,

oui, mais le VRAI utilisé ici, est une variable emprunté au langage excel
tu as la possibilité d'utiliser tes propre varaiables si tu le désire,
par exemple:

LeVRAI = VRAI * -1
LeFAUX = FAUX + 1
MsgBox Format(LeVRAI, "0")
MsgBox Format(LeFAUX, "0")

extrait de l'aide excel : Boolean, type de données
Lorsque d'autres types de données numériques sont convertis en valeurs
de type Boolean,
0 devient False et toutes les autres valeurs deviennent True.
Lorsque des valeurs de type Boolean sont converties en d'autres types de
données, False devient 0 et True devient -1.

isabelle


JérômeC a écrit :
Isabelle,

C'est je crois là où il y a une différence entre les langage de progammation
haut et bas niveau, non ? Le langage bas niveau, au plus près du matériel va
être tributaire des montages électroniques. Le langage haut niveau ignore le
matériel, et est là pour le développeur humain qui va être le plus littéral
possible. Si on s'amuse à faire des langages haut niveau, c'est en partie
pour éviter ce genre de considération, pour arriver à programmer avec des
mots, et non plus avec les niveaux de tension de la sortie de la puce.

++




Avatar
JérômeC
J'aurais tendance à...

Si j'avais à faire ce genre de chose, je trouverais surement bien quelque
chose de moins rudimentaire...


Si j'ai de grosses lacunes, je ne crois pas que ce soit dans les notions
basiques. Ou alors, nous ne sommes vraiment pas dans le même milieu, car des
personnes qui connaissent plus de bases d'Excel que moi, je n'en connais pas
tellement. Après je sais qu'il y a des personnes qui en connaissent bien
plus, mais je ne dirais pas que les connaissances qui me restent à acquérir
soient basiques.

++

--


Jérôme C

"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:

"JérômeC" a écrit dans le message de news:
%23%

Personnellement, pour ces histoires de comptage, j'aurais tendance à
créer des colonnes supplémentaire où j'ai des 0 et des 1, et puis
j'aditionne tout. Il y a assez de colonne dans Excel pour cela.



Tu peux aussi utiliser le boulier....
Je pense que tu as de très grosses lacunes concernant les notions basiques
(XL)

Etc



Avatar
JérômeC
Le mot que je retiens dans l'aide que tu as cité, c'est "convertir".

Ce qui me gène ici, c'est que la conversion, c'est le programme qui le fait
tout seul. La conversion quand il le faut, pas quand on le demande. Plus que
maitrisait ce qu'on fait, c'est surtout maitriser ce qu'on demande qui est
important et que je trouve qu'on perd ici.

Sur tous ceux qui vont utiliser toutes ces conversions de manière implicite,
combien vont connaitre les règles exactes de conversion ?

Je vais utiliser le VRAI que je veux si je suis en dehors d'Excel. Je suis
dans Excel, je vais utiliser le VRAI d'Excel, faut pas être maso non plus :P

++

--


Jérôme Cuinet
BE-Logiciel
COSE
tel 33 01 48 37 42 53
fax 33 01 39 59 22 36
email
"isabelle" a écrit dans le message de news:

bonjour Jérôme,

oui, mais le VRAI utilisé ici, est une variable emprunté au langage excel
tu as la possibilité d'utiliser tes propre varaiables si tu le désire, par
exemple:

LeVRAI = VRAI * -1
LeFAUX = FAUX + 1
MsgBox Format(LeVRAI, "0")
MsgBox Format(LeFAUX, "0")

extrait de l'aide excel : Boolean, type de données
Lorsque d'autres types de données numériques sont convertis en valeurs de
type Boolean,
0 devient False et toutes les autres valeurs deviennent True.
Lorsque des valeurs de type Boolean sont converties en d'autres types de
données, False devient 0 et True devient -1.

isabelle


JérômeC a écrit :
Isabelle,

C'est je crois là où il y a une différence entre les langage de
progammation haut et bas niveau, non ? Le langage bas niveau, au plus
près du matériel va être tributaire des montages électroniques. Le
langage haut niveau ignore le matériel, et est là pour le développeur
humain qui va être le plus littéral possible. Si on s'amuse à faire des
langages haut niveau, c'est en partie pour éviter ce genre de
considération, pour arriver à programmer avec des mots, et non plus avec
les niveaux de tension de la sortie de la puce.

++






Avatar
michdenis
| Dans Excel, le poireau booléen est aussi une carotte nombre.
**** C'est nouveau ça ! Tu as quelle version d'Excel ?

Une valeur booléenne demeure une valeur booléenne et je n'ai
jamais rien lu ou vu quelque chose qui allait dans le sens opposé dans Excel.

Ce qu'Excel permet c'est la transformation de cette valeur booléenne
en valeur numérique. Pour ce faire, on pourrait une "vraie" fonction
comme N(), mais Excel permet la conversion de cette valeur en utilisant
plus d'une approche. On ne va pas lui reprocher sa flexibilité ?
Exemple :
si je demande à excel d'additionner :
=SOMME({VRAI;VRAI;VRAI}) = 0 et le 0 ne signifie pas que c'est faux
Excel reconnaît les "Vrai" comme valeur booléenne
(si tu les tapes en minuscules, Excel les affiche en majuscule à la
validation de la cellule, de plus ces expressions ne nécessitent
pas de guillemets) mais il ne les transforme pas en valeur numérique
de lui-même. La fonction "Somme" considère ces valeurs comme
étant du "texte" d'où le résultat.
Si Excel ne faisait pas de différence entre une valeur booléenne et
sa valeur numérique il retournerait 3. NON ????

Pourtant, on a diverses alternatives pour demander à Excel de "CONVERTIR"
ces "Vrai" par leur équivalent numérique... quelques exemples possibles
et ils ne sont pas exhaustifs !
=SOMME(N({VRAI;VRAI;VRAI})) = 3
=SOMME({VRAI;VRAI;VRAI}+0) =3
=SOMME({VRAI;VRAI;VRAI}*1) = 3

|Cela permet de bricoler de brillantes astuces
**** Parfaitement d'accord avec cette affirmation et je ne saurais le
reprocher !

| Mais j'ai une certaine vision de la programmation qui est une
| programmation maintenable par n'importe qui connait la grammaire.
**** Si tu connais la grammaire d'excel, tu devrais pouvoir lire...
On ne peut pas dire qu'Excel cache sa grammaire !

En vba, il est permis ceci :
'-------------------------------
Sub test()
Dim X As Boolean
X = 1
MsgBox TypeName(X)
End Sub
'-------------------------------
Après l'exécution, X = True et la boîte de message affiche
toujours que le type de la variable X est demeurer "Booléenne et
non "Integer", "Long" ....!

Je veux bien reconnaître que VBA est un langage de
programmation plus souple que d'autres langages de programmation.
Cela sert bien l'ensemble des usagers des applications Microsoft
car la majeure partie de ceux-ci ne sont pas des programmeurs de formation.
Mais les gens qui en font un usage intensif généralement le font en
respectant les principes de base de la programmation.
Avatar
Caetera
> .....car des > personnes qui connaissent plus de bases d'Excel que moi, je
n'en connais pas tellement



.... CLAP, CLAP
....
T''as pas du bien chercher !

... mais je ne dirais pas que les connaissances qui me restent à acquérir
soient basiques.



Ben dis donc, faire des sommes conditionnelles multicritères en ajoutant des
colonnes ça montre une méconnaissance profonde des fonctions de feuille de
calcul et sur un plan plus général, une ignorance inquiétante de la bonne
organisation d'une base de données ...

Etc
Avatar
JérômeC
>
| Dans Excel, le poireau booléen est aussi une carotte nombre.
**** C'est nouveau ça ! Tu as quelle version d'Excel ?

Une valeur booléenne demeure une valeur booléenne et je n'ai
jamais rien lu ou vu quelque chose qui allait dans le sens opposé dans
Excel.

Ce qu'Excel permet c'est la transformation de cette valeur booléenne
en valeur numérique. Pour ce faire, on pourrait une "vraie" fonction
comme N(), mais Excel permet la conversion de cette valeur en utilisant
plus d'une approche. On ne va pas lui reprocher sa flexibilité ?
Exemple :
si je demande à excel d'additionner :
=SOMME({VRAI;VRAI;VRAI}) = 0 et le 0 ne signifie pas que c'est faux
Excel reconnaît les "Vrai" comme valeur booléenne
(si tu les tapes en minuscules, Excel les affiche en majuscule à la
validation de la cellule, de plus ces expressions ne nécessitent
pas de guillemets) mais il ne les transforme pas en valeur numérique
de lui-même. La fonction "Somme" considère ces valeurs comme
étant du "texte" d'où le résultat.
Si Excel ne faisait pas de différence entre une valeur booléenne et
sa valeur numérique il retournerait 3. NON ????

Pourtant, on a diverses alternatives pour demander à Excel de "CONVERTIR"
ces "Vrai" par leur équivalent numérique... quelques exemples possibles
et ils ne sont pas exhaustifs !
=SOMME(N({VRAI;VRAI;VRAI})) = 3
=SOMME({VRAI;VRAI;VRAI}+0) =3
=SOMME({VRAI;VRAI;VRAI}*1) = 3



Pour moi, seule le premier exemple a un sens. Je connais les deux autres. À
vrai dire, je suis surpris du résultat de =SOMME({VRAI;VRAI;VRAI}) , car
=VRAI + VRAI + VRAI = 3. Et la différence entre les deux me laisse vraiment
perplexe. C'est exactement ce que je disais dans un autre message : On ne
sait pas quand Excel réalise une conversion ! (S'il y a un endroit où c'est
indiqué, une quelconque documentation m'indiquant cela, je veux bien savoir
où, les bases d'Excel m'intéresse)



| Mais j'ai une certaine vision de la programmation qui est une
| programmation maintenable par n'importe qui connait la grammaire.
**** Si tu connais la grammaire d'excel, tu devrais pouvoir lire...
On ne peut pas dire qu'Excel cache sa grammaire !



Cf ma remarque ci-dessus.


En vba, il est permis ceci :
'-------------------------------
Sub test()
Dim X As Boolean
X = 1
MsgBox TypeName(X)
End Sub
'-------------------------------
Après l'exécution, X = True et la boîte de message affiche
toujours que le type de la variable X est demeurer "Booléenne et
non "Integer", "Long" ....!



Encore heureux !

Mais des trucs avec la plébiscitée variable de type Variant, tu peux vite
foutre le bordel.

Dim X as Variant
X = vrai
X = 1
MsgBox TypeName(X) ??


Je veux bien reconnaître que VBA est un langage de
programmation plus souple que d'autres langages de programmation.
Cela sert bien l'ensemble des usagers des applications Microsoft
car la majeure partie de ceux-ci ne sont pas des programmeurs de
formation.
Mais les gens qui en font un usage intensif généralement le font en
respectant les principes de base de la programmation.



Souple, certes, mais tellement souple que faire des noeuds s'en s'en rendre
compte est super facile. Avec Excel, je n'ai jamais eu de soucis. Mais j'ai
essayé avec Access, j'ai laissé tombé avec mon paquet de noeud.

Les principes de base de la programmation, je me demande bien ce que c'est.
J'ai eu certaines réponses d'un support à un kit de développement (rien à
voir avec Microsoft) bien surprenante. Et c'est sans parler de certains
bouts de code qui trainent sur le web, ni des perles de programmation.
Avatar
JérômeC
> calcul et sur un plan plus général, une ignorance inquiétante de la bonne
organisation d'une base de données ...



C'est exactement ce que je disais.

Les personnes que je fréquentes ne savent pas ce qu'est une base de données.

Et je croyais apparemment à tord que les bases de données, c'était surtout
avec Acces & Co, qu'Excel est un tableur, qui pour les bases de données est
beaucoup plsu souple. C'est sûr qu'il y a de quoi pousser des cris si une
colonne d'Excel est la même chose qu'un champ d'Access.

Et puis je suis sûr que l'utilisation en gestion d'Excel est différente de
l'utilisation pour des applications scientifique. Je n'utilise pas Excel
pour la gestion où il y a surement plus à manipuler des donées qualitatives
et s'amuser avec des multicritères comme on a vu en exemple dans cette
discussion. Dans les applications d'Excel que j'ai eu, j'utilise une matrice
pour la multiplier avec sa transposer puis obtenir la matrice inverse. Ces
sommes conditionnelles, je ne pratique pas, on utilise le même logiciel pour
des applications différentes.


Etc


JC
Avatar
Misange
Bonjour Jérome

J'ai du mal à saisir ce que tu veux démontrer et tes exemples poireaux
carottes me donnent faim mais c'est tout.
Qui a dit que VBA était THE langage de programmation parfait ?
Que les VRAIS programmateurs, ceux qui ont besoin d'un langage super
robuste, imposant des types de variables non convertibles à la volée,
avec un contrôle d'erreur très pointu... n'utilisent pas VBA c'est une
certitude et je préfère que la trajectoire des missiles ne soit pas
calculée dans un tableur...
Mais excel et son VBA n'est pas fait pour ces gens là. Et il offre une
souplesse qui permet de faire assez simplement ce qui serait
inaccessible à des non informaticien. Tu sais moi le coup des
informaticiens qui causent aux informaticiens ça me laisse de glace.
Ton exemple ou tu remplaces les vrais et les faux par des 0 ou des 1
ajoutés dans la colonne voisine montre que tu ne vois pas quels usages
les VRAIS utilisateurs d'excel (boutade !) font de ce tableur.
Je voudrais que tu voies certains tableaux, tu comprendrais vite que ce
que tu proposes n'est tout simplement pas faisable sur un plan pratique
et qu'il est autrement plus raisonnable de demander à excel
d'interpréter les vrais et les faux même si cela te chagrine.

Il se trouve que la clientèle d'excel n'est pas celle des programmeurs
professionnels. Du reste ceux là regardent en général avec dédain ce
pseudo langage. Fort bien. Qu'ils programment en C++ ou en Pascal s'ils
préfère. Moi je n'ai jamais suivi un seul cours d'informatique de ma
vie, mais j'utilise VBA tous les jours dans mon boulot qui n'a rien à
voire avec l'informatique. Mes codes sont souvent très crades, pas
finalisés parce qu'à usage quasi unique mais justement dans ces cas là,
j'apprécie +++ la tolérance d'excel.
Ne pas utiliser sommeprod ??? Au secours. ce n'est pas parce qu'en la
définissant microsoft n'avait pas du tout pensé à l'usage super puissant
qui peut en être fait, et qui n'est donc pas documenté, que cette
fonction ne doit pas être utilisée !

La question n'est pas de savoir qui possède ou pas les connaissances
basiques du fonctionnement d'excel. Franchement on s'en fout. ce qui est
intéressant avec excel c'est que des gens très très différents, avec des
niveaux de compétences très très variables l'utilisent pour faire des
choses que beaucoup n'imaginent même pas demander à un tableur. Et
justement ce qui permet ça c'est une certaine souplesse. Maintenant
encore une fois, j'espère que ce qui a besoin d'être calculé à la 50°
décimale ne l'est pas avec excel.

Mais cette discussion m'amuse beaucoup : habituellement la conversation
type c'est de dire OUI il FAUT déclarer ses variables, c'est utile et ça
évite les erreurs même si excel est très tolérant et essaie
d'interpréter vos à peu près. Là nous voilà partis dans l'extrême
opposé. Ça change :-)
Excel est un langage de programmation pour amateurs ? oui peut être et
alors ? Je revendique pour ma part le fait d'être une amateur sur excel.
J'aime excel voilà, je fais mon coming out, c'est un grand jour :-)


Misange migrateuse
http://www.excelabo.net : Participez à un travail collaboratif sur excel !


JérômeC a écrit :
| Dans Excel, le poireau booléen est aussi une carotte nombre.
**** C'est nouveau ça ! Tu as quelle version d'Excel ?

Une valeur booléenne demeure une valeur booléenne et je n'ai
jamais rien lu ou vu quelque chose qui allait dans le sens opposé dans
Excel.

Ce qu'Excel permet c'est la transformation de cette valeur booléenne
en valeur numérique. Pour ce faire, on pourrait une "vraie" fonction
comme N(), mais Excel permet la conversion de cette valeur en utilisant
plus d'une approche. On ne va pas lui reprocher sa flexibilité ?
Exemple :
si je demande à excel d'additionner :
=SOMME({VRAI;VRAI;VRAI}) = 0 et le 0 ne signifie pas que c'est faux
Excel reconnaît les "Vrai" comme valeur booléenne
(si tu les tapes en minuscules, Excel les affiche en majuscule à la
validation de la cellule, de plus ces expressions ne nécessitent
pas de guillemets) mais il ne les transforme pas en valeur numérique
de lui-même. La fonction "Somme" considère ces valeurs comme
étant du "texte" d'où le résultat.
Si Excel ne faisait pas de différence entre une valeur booléenne et
sa valeur numérique il retournerait 3. NON ????

Pourtant, on a diverses alternatives pour demander à Excel de "CONVERTIR"
ces "Vrai" par leur équivalent numérique... quelques exemples possibles
et ils ne sont pas exhaustifs !
=SOMME(N({VRAI;VRAI;VRAI})) = 3
=SOMME({VRAI;VRAI;VRAI}+0) =3
=SOMME({VRAI;VRAI;VRAI}*1) = 3



Pour moi, seule le premier exemple a un sens. Je connais les deux autres. À
vrai dire, je suis surpris du résultat de =SOMME({VRAI;VRAI;VRAI}) , car
=VRAI + VRAI + VRAI = 3. Et la différence entre les deux me laisse vraiment
perplexe. C'est exactement ce que je disais dans un autre message : On ne
sait pas quand Excel réalise une conversion ! (S'il y a un endroit où c'est
indiqué, une quelconque documentation m'indiquant cela, je veux bien savoir
où, les bases d'Excel m'intéresse)


| Mais j'ai une certaine vision de la programmation qui est une
| programmation maintenable par n'importe qui connait la grammaire.
**** Si tu connais la grammaire d'excel, tu devrais pouvoir lire...
On ne peut pas dire qu'Excel cache sa grammaire !



Cf ma remarque ci-dessus.

En vba, il est permis ceci :
'-------------------------------
Sub test()
Dim X As Boolean
X = 1
MsgBox TypeName(X)
End Sub
'-------------------------------
Après l'exécution, X = True et la boîte de message affiche
toujours que le type de la variable X est demeurer "Booléenne et
non "Integer", "Long" ....!



Encore heureux !

Mais des trucs avec la plébiscitée variable de type Variant, tu peux vite
foutre le bordel.

Dim X as Variant
X = vrai
X = 1
MsgBox TypeName(X) ??

Je veux bien reconnaître que VBA est un langage de
programmation plus souple que d'autres langages de programmation.
Cela sert bien l'ensemble des usagers des applications Microsoft
car la majeure partie de ceux-ci ne sont pas des programmeurs de
formation.
Mais les gens qui en font un usage intensif généralement le font en
respectant les principes de base de la programmation.



Souple, certes, mais tellement souple que faire des noeuds s'en s'en rendre
compte est super facile. Avec Excel, je n'ai jamais eu de soucis. Mais j'ai
essayé avec Access, j'ai laissé tombé avec mon paquet de noeud.

Les principes de base de la programmation, je me demande bien ce que c'est.
J'ai eu certaines réponses d'un support à un kit de développement (rien à
voir avec Microsoft) bien surprenante. Et c'est sans parler de certains
bouts de code qui trainent sur le web, ni des perles de programmation.






Avatar
Modeste
Bonsour® Gouap avec ferveur ;o))) vous nous disiez :

Bonsoir,

je ne comprends pas pourquoi quand j'additionne le résultat d'une
macro qui retoure la valeur "Vrai" à une autre valeur positive, je me
retrouve avec ma veleur positive - 1 au lieu de +1.

A = 3 + "Vrai" = 2
A = -3 + "Vrai" = -4

Avez vous une explication à ce phénomène ?



;o)))
ta macro ne retourne pas une valeur "Vrai" mais la valeur "True"

voir l'aide F1 sous VBE :
Le mot clé True possède une valeur égale à -1.
Le mot clé False possède une valeur égale à 0.

;o)))
chaque langage posséde sa grammaire !!!!
et ici le langage macro VBA(US) est différent du langage EXCEL formule feuille de calcul(FR)
Avatar
Modeste
Bonsour® JérômeC avec ferveur ;o))) vous nous disiez :

Pour cette fonction, je propose
=NB.SI.ENS(A1:A5;1;B1:B5;2)
qui fait exactement la même chose (en plus même pas besoin d'indiquer
que c'est un calcul matriciel).


;o))))

attention aux abus de langage !!!!!
il ne convient pas de parler ici de "calcul matriciel"
au sens EXCEL il s'agit simplement d'une formule de "type matricielle"
et que la validation s'effectue par Ctrl-Alt-Entrée
chaque argument matrice doit etre de même(s) dimension(s)
1 2 3 4 5