VBA pas boggué ?

Le
GL
J'ai pas mal d'exemples, ça viendra

Ceci n'est pas un bogue mais je viens de m'apercevoir
aujourd'hui qu'en VBA, la valeur True vaut -1
(dans un contexte où elle doit être "convertie" en nombre).

Alors que dans une feuille, VRAI vaut 1.
En C, !0 (négation de 0) vaut 1.

Si on écrit : A = 1 + (x > 0)

on s'attend à ce que A vaille 2 si x est > 0.

C'est ce qui se passe dans une feuille Excel.
Mais en VBA, si x est >0, A vaudra 1 + True = 1 + (-1) = 0

Un vraie merde VBA, je vous dis !!!

Bon weekend.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26126052
Bonjour,

| VBA pas boggué ?

Dire que certains disent que VBA qui est "BOGUÉ"...
Il en va tout autant pour l'orthographe de leur langue française!!!
;-))

Ceci étant dit, les concepteurs de l'interface de calcul et ceux qui ont
élaboré le modèle objet "VBA" ne sont pas les mêmes. Maintenant que tu sais,
tu peux partager la bonne nouvelle!!!
GL
Le #26129032
Le 10/05/2014 22:08, MichD a écrit :
Bonjour,

| VBA pas boggué ?

Dire que certains disent que VBA qui est "BOGUÉ"...
Il en va tout autant pour l'orthographe de leur langue française!!!
;-))

Ceci étant dit, les concepteurs de l'interface de calcul et ceux qui ont
élaboré le modèle objet "VBA" ne sont pas les mêmes. Maintenant que tu
sais, tu peux partager la bonne nouvelle!!!



Ceuces qui honte faiz-en-sorte que les dates s'arrêtent au
1er janvier 1900 ? Alors qu'elle peuvent aller jusqu'au
31/12/9999 !!

Et comment qu'on fait pour calculer la durée de la Campagne d'Italie,
connaissant ses dates ?

Y'a pas d'quoi les féliciter. D'autant qu'à ce qu'il semble, c'est
uniquement une question d'interface : les valeurs numériques
représentant les dates (double) devraient permettre beaucoup
plus, et au moins, par symétrie, de remonter à l'année -6 199,
ce qui couvre à peine l'holocène...

NTFS de MicroMou remonte quand même au 1/1/1601....

Bonne soirée.
isabelle
Le #26129532
En fait, l 'année sidérale — temps nécessaire pour que l’on retrouve
le Soleil à la même position rapport aux étoiles fixes sur la sphère céleste,
observée depuis le même lieu sur la Terre — ne concorde pas exactement avec
l'année civile
C 'est pour cela, on le sait, que le calendrier Julien d'abord et le calendrier
Grégorien ensuite,
ont compensé ces différences par les jours bissextiles.

Or la nouvelle lune du 1er janvier 1900 (année civile) appartient encore à
l'année sidérale 1899
raison pour laquelle elle figurait dans les Annuaires à la date du 32 décembre
(jour fictif et purement théorique).
C 'est l'usage des astronomes, quand un phénomène céleste est à cheval sur le
dernier jour d'un mois et le premier
jour du suivant, de le mettre sous la rubrique du 29, du 31 ou du 32 du premier
de ces deux mois, selon qu'il a 28, 30 ou 31 jours.

ça devenais trop compliqué %-(

isabelle


Le 2014-05-11 15:35, GL a écrit :
Le 10/05/2014 22:08, MichD a écrit :
Bonjour,

| VBA pas boggué ?

Dire que certains disent que VBA qui est "BOGUÉ"...
Il en va tout autant pour l'orthographe de leur langue française!!!
;-))

Ceci étant dit, les concepteurs de l'interface de calcul et ceux qui ont
élaboré le modèle objet "VBA" ne sont pas les mêmes. Maintenant que tu
sais, tu peux partager la bonne nouvelle!!!



Ceuces qui honte faiz-en-sorte que les dates s'arrêtent au
1er janvier 1900 ? Alors qu'elle peuvent aller jusqu'au
31/12/9999 !!

Et comment qu'on fait pour calculer la durée de la Campagne d'Italie,
connaissant ses dates ?

Y'a pas d'quoi les féliciter. D'autant qu'à ce qu'il semble, c'est
uniquement une question d'interface : les valeurs numériques
représentant les dates (double) devraient permettre beaucoup
plus, et au moins, par symétrie, de remonter à l'année -6 199,
ce qui couvre à peine l'holocène...

NTFS de MicroMou remonte quand même au 1/1/1601....

Bonne soirée.

isabelle
Le #26129562
blague à part, je crois que ça devenais vraiment compliqué, surtout pour les
États-Unis

le système calendaire que nous utilisons aujourd'hui est le calendrier grégorien.
chaque année bissextile, le mois de février a 29 jours au lieu de 28.
les années bissextiles arrivent tous les quatre ans (ce qui fonctionne bien pour
les jours actuels)
mais en fait, avec notre calendrier grégorien les années 1800, 1900, 2100, 2200...
ne sont pas des années bissextiles,
une année est bissextile si elle est divisible par 4 et également non divisible
par 100, ou si elle est divisible par 400.
c 'est une simple convention qui essaie de prendre en compte la durée que prend
la terre pour tourner autour du soleil.
le calendrier grégorien a été adopté par différents pays à différentes périodes.
en Italie et en Espagne, le jour après le 4 octobre 1582 était le 15 octobre 1582.
au Royaume Uni, la modification a été faite en 1752.
les États-Unis ont changé entre 1582 et 1867(différentes zones à différentes
périodes).
les derniers pays (comme la Grèce) ont changé en 1920.

isabelle

Le 2014-05-11 23:47, isabelle a écrit :
En fait, l 'année sidérale — temps nécessaire pour que l’on retrouve
le Soleil à la même position rapport aux étoiles fixes sur la sphère céleste,
observée depuis le même lieu sur la Terre — ne concorde pas exactement avec
l'année civile
C 'est pour cela, on le sait, que le calendrier Julien d'abord et le calendrier Grégorien ensuite,
ont compensé ces différences par les jours bissextiles.
Or la nouvelle lune du 1er janvier 1900 (année civile) appartient encore à
l'année sidérale 1899
raison pour laquelle elle figurait dans les Annuaires à la date du 32 décembre
(jour fictif et purement théorique).
C 'est l'usage des astronomes, quand un phénomène céleste est à cheval sur le
dernier jour d'un mois et le premier
jour du suivant, de le mettre sous la rubrique du 29, du 31 ou du 32 du premier
de ces deux mois, selon qu'il a 28, 30 ou 31 jours.

ça devenais trop compliqué %-(

isabelle

Jacquouille
Le #26129712
Comme dirait certain, pfffffffffffff

Et tout cela n'est rien, sachant que Jésus ne serait pas né le 25 déc, ni
même en l'an 0, mais bien en l'an -3 .....
Cette théorie aurait été avancée par les astronomes qui auraient recomposé
la carte du ciel à cette époque pour découvrir (en -3) que certaines
planètes étaient très proches les unes des autres et ainsi, donner
l'impression d'une immense étoile, de par leurs luminosités concentrées....

Au vu de cela, tout le monde comprend aisément que le 1/1/1900, n'est en
réalité que le 1/1/1903.
Ce qui n'est pas encore le 1/1/1904 du calendrier n°2 de Bilou $.

Tout le monde suit ?

Pour la campagne d'Italie, il faut appliquer la formule non matricielle:
durée=fin-début, et vous aurez le nombre de jours calendrier, mais pas de
jours.ouvrés car tout le monde connait le décalage à ce sujet. les armées
n'étant pas toutes composées d'Italiens, la campagne des uns a duré plus que
la campagne des autres car il y en a qui travaillent plus vite.....



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"isabelle" a écrit dans le message de groupe de discussion :
lkpj87$b7l$

blague à part, je crois que ça devenais vraiment compliqué, surtout pour les
États-Unis

le système calendaire que nous utilisons aujourd'hui est le calendrier
grégorien.
chaque année bissextile, le mois de février a 29 jours au lieu de 28.
les années bissextiles arrivent tous les quatre ans (ce qui fonctionne bien
pour
les jours actuels)
mais en fait, avec notre calendrier grégorien les années 1800, 1900, 2100,
2200...
ne sont pas des années bissextiles,
une année est bissextile si elle est divisible par 4 et également non
divisible
par 100, ou si elle est divisible par 400.
c 'est une simple convention qui essaie de prendre en compte la durée que
prend
la terre pour tourner autour du soleil.
le calendrier grégorien a été adopté par différents pays à différentes
périodes.
en Italie et en Espagne, le jour après le 4 octobre 1582 était le 15 octobre
1582.
au Royaume Uni, la modification a été faite en 1752.
les États-Unis ont changé entre 1582 et 1867(différentes zones à différentes
périodes).
les derniers pays (comme la Grèce) ont changé en 1920.

isabelle

Le 2014-05-11 23:47, isabelle a écrit :
En fait, l 'année sidérale — temps nécessaire pour que l’on retrouve
le Soleil à la même position rapport aux étoiles fixes sur la sphère
céleste,
observée depuis le même lieu sur la Terre — ne concorde pas exactement
avec
l'année civile
C 'est pour cela, on le sait, que le calendrier Julien d'abord et le
calendrier Grégorien ensuite,
ont compensé ces différences par les jours bissextiles.
Or la nouvelle lune du 1er janvier 1900 (année civile) appartient encore à
l'année sidérale 1899
raison pour laquelle elle figurait dans les Annuaires à la date du 32
décembre
(jour fictif et purement théorique).
C 'est l'usage des astronomes, quand un phénomène céleste est à cheval sur
le
dernier jour d'un mois et le premier
jour du suivant, de le mettre sous la rubrique du 29, du 31 ou du 32 du
premier
de ces deux mois, selon qu'il a 28, 30 ou 31 jours.

ça devenais trop compliqué %-(

isabelle





---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
MichD
Le #26131062
Exemple sur les dates - Différence entre la feuille de calcul et VBA

Le langage VBA a été conçu bien après l'apparition de la première feuille de
calcul d'Excel.

Exemple 1
L'année 1900 n'est pas bissextile (Le bogue bien connu sur les dates de la
feuille de calcul)
En A1 : 29 Février 1900 En B1 : =jour(A1) retourne 29
En vba Úy(Range("A1") = 28 'soit le dernier jour du mois de février

Exemple 2

A1 : 28/021900
B1 : 10/10/1885 La date est affichée à gauche, dépassement des limites de
la feuille de calcul.

En VBA, aucun problème pour utiliser la valeur en B1
à titre d'exemple :
=Weekday(range("A1") = 7

On peut calculer le nombre de jours entre A1 (28/02/1900) et A2 (10/10/1885)
Z = DateDiff("D", Range("A2"), Range("A1")) = 5254 jours

En VBA, dès qu'une date est plus petite que 1/1/1900, les jours sont comptés
négativement de -1 à -x

Et VBA peut calculer de l'an 01/01/100 à l'an 31/12/9999

Pour la feuille de calcul, tiré d'un des volumes de John Walkerback :
"Excel 2000 and later versions support dates from January 1, 1900, through
December 31, 9999 (serial number = 2,958,465). Versions prior to Excel 2000
support a much smaller range of dates: from January 1, 1900, through
December 31, 2078 (serial number = 65,380)."

Du même auteur, dans son volume sur les formules Excel 2010, il explique la
présence du bogue de l'an bissextile comme ceci :

"How can a product used daily by millions of people contain such an obvious
bug? The answer is historical. The original version of Lotus 1-2-3 contained
a bug that caused it to consider 1900 as a leap year. When Excel was
released some time later, the designers knew of
this bug and chose to reproduce it in Excel to maintain compatibility with
Lotus worksheet files.
Why does this bug still exist in later versions of Excel? Microsoft asserts
that the disadvantages of correcting this bug outweigh the advantages. If
the bug were eliminated, it would mess up hundreds of thousands of existing
workbooks. In addition, correcting this
problem would affect compatibility between Excel and other programs that use
dates. As it stands, this bug really causes very few problems because most
users do not use dates before March 1, 1900."

Citations provenant du livre
"Excel® 2010 Formulas" de John Walkenback
Published by
Wiley Publishing, Inc.

Si tu veux tenir compte des différents calendriers de l'histoire, consulte
Isabelle!
GL
Le #26131622
Le 12/05/2014 06:38, isabelle a écrit :
blague à part, je crois que ça devenais vraiment compliqué, surtout pour
les États-Unis



[ ..couic.. ]

en Italie et en Espagne, le jour après le 4 octobre 1582 était le 15
octobre 1582.
au Royaume Uni, la modification a été faite en 1752.
les États-Unis ont changé entre 1582 et 1867(différentes zones à
différentes périodes).
les derniers pays (comme la Grèce) ont changé en 1920.



La Russie a changé le 1er février 1918. Bon. Et c'est inclus dans la
plage de dates d'XL. Et ce tableur de daube est utilisé en Russie.

C'est super intéressant vos informations, je dis pas, mais ça ne
justifie en rien l'injustifiable : excel arrête de considérer qu'un
nombre est une date le 1 janvier 1900.


Bonne soirée.
GL
Le #26131612
Le 12/05/2014 08:19, Jacquouille a écrit :
Comme dirait certain, pfffffffffffff

Et tout cela n'est rien, sachant que Jésus ne serait pas né le 25 déc,
ni même en l'an 0, mais bien en l'an -3 .....
Cette théorie aurait été avancée par les astronomes qui auraient
recomposé la carte du ciel à cette époque pour découvrir (en -3) que
certaines planètes étaient très proches les unes des autres et ainsi,
donner l'impression d'une immense étoile, de par leurs luminosités
concentrées....

Au vu de cela, tout le monde comprend aisément que le 1/1/1900, n'est en
réalité que le 1/1/1903.
Ce qui n'est pas encore le 1/1/1904 du calendrier n°2 de Bilou $.

Tout le monde suit ?



Oui, et il y a bien mieux :

« ces chercheurs parviennent à la conclusion "effarante" que
*10 siècles, a minima,*
auraient été ajoutés à la chronologie de notre véritable histoire, et
que 10 de ces siècles « en trop » concerneraient ceux que l’on attribue
(dans nos manuels officiels) au Moyen-Age. Moyen-Age, qui, en réalité,
n’aurait duré qu’un peu moins d’un siècle et qui aurait été
immédiatement suivi par ce que nous nommons fort justement « la
Renaissance ».

http://www.leptine.net/article-la-theorie-du-temps-ajoute-121287804.html

Donc selon eux, Jésus serait né autour de ce que l'on nomme l'an mil !
Vous voyez qu'avec l'astrologie, on peut aller beaucoup plus loin que
3 ans de correction.


Pour la campagne d'Italie, il faut appliquer la formule non matricielle:
durée=fin-début, et vous aurez le nombre de jours calendrier, mais pas
de jours.ouvrés car tout le monde connait le décalage à ce sujet. les
armées n'étant pas toutes composées d'Italiens, la campagne des uns a
duré plus que la campagne des autres car il y en a qui travaillent plus
vite.....



Il y avait déjà des différence de "compétitivité" alors...
Napoléon ! REVIENT !!!!
GL
Le #26131632
Le 12/05/2014 18:38, MichD a écrit :
Exemple sur les dates - Différence entre la feuille de calcul et VBA

Le langage VBA a été conçu bien après l'apparition de la première
feuille de
calcul d'Excel.



VBA, c'est pas un langage, c'est du BASIC.
D'abord !

Exemple 2

A1 : 28/021900
B1 : 10/10/1885 La date est affichée à gauche, dépassement des limites de
la feuille de calcul.

En VBA, aucun problème pour utiliser la valeur en B1
à titre d'exemple :
=Weekday(range("A1") = 7



Ah OK. Ca c'est mieux que rien...

En VBA, dès qu'une date est plus petite que 1/1/1900, les jours sont
comptés
négativement de -1 à -x


Ben oui, puisque le 1/1/1900 = 1.

Et VBA peut calculer de l'an 01/01/100 à l'an 31/12/9999



Ce serait logique d'aller jusqu'à l'an -6 199, par symétrie.

"How can a product used daily by millions of people contain such an
obvious bug? The answer is historical. The original version of Lotus
1-2-3 contained a bug that caused it to consider 1900 as a leap year.
When Excel was released some time later, the designers knew of
this bug and chose to reproduce it in Excel to maintain compatibility
with Lotus worksheet files.
Why does this bug still exist in later versions of Excel? Microsoft
asserts that the disadvantages of correcting this bug outweigh the
advantages. If the bug were eliminated, it would mess up hundreds of
thousands of existing workbooks. In addition, correcting this
problem would affect compatibility between Excel and other programs that
use dates. As it stands, this bug really causes very few problems
because most users do not use dates before March 1, 1900."



J'ai bien tout lu et c'est contradictoire : on affirme conserver le
bug de Lotus pour assurer la compatibilité, et que corriger le bug
coûterait plus cher que le laisser,

et de deux on dit que personne ne tombe jamais sur bug parce que
personne n'utilise des dates de l'année 1900.....

Bref, ça amuse la galerie de conserver ce micro-bug.
MichD
Le #26133072
| VBA, c'est pas un langage, c'est du BASIC.

Peux-tu me faire le lien avec "Visual basic for application" (VBA) et ce que
tu appelles le "BASIC"?
De mémoire, VBA est arrivé avec la version Microsoft Office 1997.

'------------------------------
J'ai bien tout lu et c'est contradictoire : on affirme conserver le
bug de Lotus pour assurer la compatibilité, et que corriger le bug
coûterait plus cher que le laisser,
'------------------------------
Où as-tu vu l'aspect monétaire dans la citation? Il est plutôt dit :
that the disadvantages of correcting this bug outweigh the advantages.

En traduction libre : Les désavantages de la correction de ce bogue
dépassent (sont plus nombreux) les avantages que la correction pourrait
donner pas seulement pour elle-même (Microsoft), mais pour l'ensemble des
usagers qui ont déjà créé des classeurs en tenant compte de ce bogue!

Personnellement, il est très rare que je doive faire référence au début du
siècle dernier!


MichD
---------------------------------------------------------------
Publicité
Poster une réponse
Anonyme