OVH Cloud OVH Cloud

Month & Year

7 réponses
Avatar
jeancmorel
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci

7 réponses

Avatar
michdenis
Bonsoir Jean,

Je n'ai pas vraiment compris la donne de ton problème, mais pourquoi ne pas tester que tes 2 cellules contient effectivement
une date avant d'effectuer tes tests
:

'-------------------------------
Sub LesDates()

For Each c In Range("A1:B10")
If IsDate(c) And IsDate(c.Offset(1, 0)) Then
'Tes sous-tests

Else
MsgBox "Au moins une des cellules ne contient pas une date"
End If

Next

End Sub
'-------------------------------



Salutations!




"jeancmorel" a écrit dans le message de news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci
Avatar
Daniel.M
Bonsoir,

Soit C, une cellule vide:
Month(c) = 12
Year(c) = 1899

En effet, vide = 0 ==> 30 décembre 1899 en VBA.

Donc, si ta date en C.Offset(0,0) est une date en décembre et C.Offset(1,0) est
vide, la première comparaison est VRAIE et la deuxième (celle avec l'année) est
FAUSSE (l'année de C versus 1899).

Donne tes vraies dates (en C.Offset(0,0)) pour qu'on puisse expliquer TON cas
précis.

Salutations,

Daniel M.

"jeancmorel" wrote in message
news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci




Avatar
sabatier
tiens, bizarre, daniel ;: moi pour Mois(c), j'obtiens 1 et pour Année(c), j'obtiens
1900...en utilisant les fonctions et non VBA : is there some difference, my dear
fellow (ou félon, je ne sais plus)?
jps

"Daniel.M" wrote:

Bonsoir,

Soit C, une cellule vide:
Month(c) = 12
Year(c) = 1899

En effet, vide = 0 ==> 30 décembre 1899 en VBA.

Donc, si ta date en C.Offset(0,0) est une date en décembre et C.Offset(1,0) est
vide, la première comparaison est VRAIE et la deuxième (celle avec l'année) est
FAUSSE (l'année de C versus 1899).

Donne tes vraies dates (en C.Offset(0,0)) pour qu'on puisse expliquer TON cas
précis.

Salutations,

Daniel M.

"jeancmorel" wrote in message
news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci






Avatar
Daniel.M
Salut JPS,

En effet, il y a des différences entre les fonctions Excel et celles de VBA.
Le 0 est 'vu' comme 1900-01-00 pour Excel et 1899-12-30 pour VBA.

Laisse A1 vide et invoque la macro suivante:

Sub TestDates()
Dim C As Range
Set C = Range("A1")
MsgBox "Fonctions Excel: Jour=" & Evaluate("Day(A1)") & _
", Mois =" & Evaluate("Month(A1)") & _
", Année=" & Evaluate("Year(A1)")
MsgBox "Fonctions VBA: Jour=" & Day(C) & ",Mois=" & _
Month(C) & ",Year=" & Year(C)
End Sub

Salutations,

Daniel M.

"sabatier" wrote in message
news:
tiens, bizarre, daniel ;: moi pour Mois(c), j'obtiens 1 et pour Année(c),
j'obtiens

1900...en utilisant les fonctions et non VBA : is there some difference, my
dear

fellow (ou félon, je ne sais plus)?
jps




"Daniel.M" wrote:

Bonsoir,

Soit C, une cellule vide:
Month(c) = 12
Year(c) = 1899

En effet, vide = 0 ==> 30 décembre 1899 en VBA.

Donc, si ta date en C.Offset(0,0) est une date en décembre et C.Offset(1,0)
est


vide, la première comparaison est VRAIE et la deuxième (celle avec l'année)
est


FAUSSE (l'année de C versus 1899).

Donne tes vraies dates (en C.Offset(0,0)) pour qu'on puisse expliquer TON
cas


précis.

Salutations,

Daniel M.

"jeancmorel" wrote in message
news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci









Avatar
sabatier
merci daniel mais comment veux-tu que, moi, je comprenne quelquechose
si en plus
il y a des différences!
jps (sonné pour le compte)

"Daniel.M" wrote:

Salut JPS,

En effet, il y a des différences entre les fonctions Excel et celles de VBA.
Le 0 est 'vu' comme 1900-01-00 pour Excel et 1899-12-30 pour VBA.

Laisse A1 vide et invoque la macro suivante:

Sub TestDates()
Dim C As Range
Set C = Range("A1")
MsgBox "Fonctions Excel: Jour=" & Evaluate("Day(A1)") & _
", Mois =" & Evaluate("Month(A1)") & _
", Année=" & Evaluate("Year(A1)")
MsgBox "Fonctions VBA: Jour=" & Day(C) & ",Mois=" & _
Month(C) & ",Year=" & Year(C)
End Sub

Salutations,

Daniel M.

"sabatier" wrote in message
news:
tiens, bizarre, daniel ;: moi pour Mois(c), j'obtiens 1 et pour Année(c),
j'obtiens

1900...en utilisant les fonctions et non VBA : is there some difference, my
dear

fellow (ou félon, je ne sais plus)?
jps


"Daniel.M" wrote:

Bonsoir,

Soit C, une cellule vide:
Month(c) = 12
Year(c) = 1899

En effet, vide = 0 ==> 30 décembre 1899 en VBA.

Donc, si ta date en C.Offset(0,0) est une date en décembre et C.Offset(1,0)
est


vide, la première comparaison est VRAIE et la deuxième (celle avec l'année)
est


FAUSSE (l'année de C versus 1899).

Donne tes vraies dates (en C.Offset(0,0)) pour qu'on puisse expliquer TON
cas


précis.

Salutations,

Daniel M.

"jeancmorel" wrote in message
news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci











Avatar
jeancmorel
Un grand merci à tous; j'ai compris d'où venait l'erreur, qui n'est pas une
faute de programmation :

Quand la ligne vide est lue, Month a la valeur 12, comme si c'était le mois
de décembre, et donc ne change pas de valeur.

Tandis que Year a la valeur 1899 et donc change de valeur.

Il suffit que je change :

If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then par

If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) And
IsDate(c.Offset(1, 0)) Then

Cette erreur ne se produisait qu'en Décembre.... Et Youpee


"jeancmorel" a écrit dans le message de
news:
If Month(c.Offset(0, 0).Value) = Month(c.Offset(1, 0).Value) Then

If Year(c.Offset(0, 0).Value) = Year(c.Offset(1, 0).Value) Then

Il semblerait que si c.offset(0,0) n'est pas vide et si c.offset(1,0) est
vide,

la premiére instruction est vraie, la seconde est fausse

Et je ne comprends pas pourquoi .....

Merci




Avatar
Daniel.M
JPS,

Rassure toi : pour être très précis, c'est une différence dans le système de
numérotation des dates (entre VBA et Excel).

Les fonctions Month(), Year() et Day() retourneraient les mêmes résultats si on
leur donne les mêmes dates à évaluer. Le problème survient lors de la
conversion/interprétation des dates de la feuille Excel lorsque transmise à VBA.

Salutations,

Daniel M.


"sabatier" wrote in message
news:
merci daniel mais comment veux-tu que, moi, je comprenne quelquechose
si en plus
il y a des différences!
jps (sonné pour le compte)