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

Problème de date

32 réponses
Avatar
JP
Bonsoir,

Je suis en train de m'arracher les cheveux avec des dates.
J'ai ce code:
For i =3D 1 To nbeleves
DateEntree =3D Format(sgf.Cells(3, 26 + i), "dd/mm/yy")
=20
DateSortie =3D Format(sgf.Cells(4, 26 + i), "dd/mm/yy")
If DateSortie =3D "" Then DateSortie =3D "05/07/42"
=20
DateSeq =3D Format(sgf.Cells(MiseJ, 16), "dd/mm/yy")
=20
' test les dates entr=E9e / sortie
If DateSeq >=3D DateEntree And DateSeq <=3D DateSortie Then
sgf.Cells(MiseJ, i + 26).Value =3D "X"
End If
Next i

En l'occurrence:

DateEntree=3D "04/09/12"
DateSeq=3D "09/04/14"
DateSortie=3D "05/07/42"

Le test suivant, n'est jamais VRAI
If DateSeq >=3D DateEntree And DateSeq <=3D DateSortie Then
sgf.Cells(MiseJ, i + 26).Value =3D "X"
End If

Pourquoi ???

Une information suppl=E9mentaire qui peut int=E9resser. Les dates provienne=
nt d'une feuille (sgf). Elles sont inscrites dans la feuille sgf par l'inte=
rm=E9diaire de textboxs=20

Quelqu'un saurait me dire o=F9 est le probl=E8me?

Merci d'avance

JP

10 réponses

1 2 3 4
Avatar
MichD
Bonjour,


| Elles sont inscrites dans la feuille sgf par l'intermédiaire de textboxs

Un textbox contient toujours du texte peu importe que son contenu soit
numérique, date ou texte.

Lorsque tu veux transférer le contenu d'un textbox vers une feuille de
calcul, tu dois indiquer à Excel ce que représente le contenu du textbox.
Pour ce faire, tu peux regarder dans l'aide d'Excel les "fonctions de
conversions" comme Cdbl(), Clng(), Cdate()...etc. Attention, ces fonctions
de conversion utilisent les paramètres (séparateur décimal, format
date...etc) définis dans le panneau de configuration de Windows.

Particulièrement pour les dates, suppose que j'écris : 01/05/08. Si je ne
spécifie pas le format date auquel je réfère, comment fais-tu pour savoir si
je faisais référence au 01 mai 2008 (jour/mois/année) ou 5 janvier 2008
(mois/jour/année) ou le 08 mai 2001 (année/mois/jour). Excel tout comme toi,
ne sait pas à quoi correspond le contenu du textbox.

With Range("A1")
.Numberformat = "DD/MM/YY" 'ou le format date que tu désires
.Value = Cdate(.value) ' Excel interprète le contenu en tenant compte
du format date défini dans le panneau
'configuration de Windows
End With

Quand tu laisses l'usager saisir une date dans un textbox, tu dois t'assurer
qu'il utilise le bon format... sinon des surprises l'attendent.

Pour aider la saisie, je te suggère d'utiliser un formulaire ressemblant à
ceci : http://cjoint.com/?DEnbIe07v2x
Tu n'as pas besoin d'ajouter une bibliothèque supplémentaire.




MichD
---------------------------------------------------------------
"JP" a écrit dans le message de groupe de discussion :


Bonsoir,

Je suis en train de m'arracher les cheveux avec des dates.
J'ai ce code:
For i = 1 To nbeleves
DateEntree = Format(sgf.Cells(3, 26 + i), "dd/mm/yy")

DateSortie = Format(sgf.Cells(4, 26 + i), "dd/mm/yy")
If DateSortie = "" Then DateSortie = "05/07/42"

DateSeq = Format(sgf.Cells(MiseJ, 16), "dd/mm/yy")

' test les dates entrée / sortie
If DateSeq >= DateEntree And DateSeq <= DateSortie Then
sgf.Cells(MiseJ, i + 26).Value = "X"
End If
Next i

En l'occurrence:

DateEntree= "04/09/12"
DateSeq= "09/04/14"
DateSortie= "05/07/42"

Le test suivant, n'est jamais VRAI
If DateSeq >= DateEntree And DateSeq <= DateSortie Then
sgf.Cells(MiseJ, i + 26).Value = "X"
End If

Pourquoi ???

Une information supplémentaire qui peut intéresser. Les dates proviennent
d'une feuille (sgf). Elles sont inscrites dans la feuille sgf par
l'intermédiaire de textboxs

Quelqu'un saurait me dire où est le problème?

Merci d'avance

JP
Avatar
JP
Bonjour Denis,

Belle démonstration.
Je garde sous le coude ton exemple bluffant (bluffant pour moi tout au moin s) mais je vais travailler du coté de Cdate car je ne laisse pas la main sur la feuille. (Les cellules sont toutes protégées). Le formulaire que j'utilise gère l'ensemble des informations de la feuille.
Quand je vois l'exemple que tu as joint, je me dis qu'il faut que je trouve le temps de travailler les modules de classe.

Une nouvelle fois merci pour la réponse. Si je bloque, je reviendrai dema nder conseil.

JP
Avatar
Jacquouille
Bonjour JP

Sans rien enlever à la qualité de la réponse reçue, ni au mérite de son
auteur (que je salue bien bas en me prosternant à ses pieds):
perso, quand je travaille sur des dates qui, bien sur, font tout ce qu'elles
peuvent pour m'emm****, je remplace celles-ci par un nombre.
pour ce faire aisément, tu écris une date dans une cel, puis tu mets le
format de la cl en format nombre. Cela évite les prob de format de date (US
différent d'Europe), mais aussi ce phénomène de date en format texte décrit
par Denis
Cela te permet de tester tes macros. Après, tu peux toujours changer ....
Bonne journée à tous et encore merci à Denis


Jacquouille

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


Bonjour Denis,

Belle démonstration.
Je garde sous le coude ton exemple bluffant (bluffant pour moi tout au
moins) mais je vais travailler du coté de Cdate car je ne laisse pas la main
sur la feuille. (Les cellules sont toutes protégées). Le formulaire que
j'utilise gère l'ensemble des informations de la feuille.
Quand je vois l'exemple que tu as joint, je me dis qu'il faut que je trouve
le temps de travailler les modules de classe.

Une nouvelle fois merci pour la réponse. Si je bloque, je reviendrai
demander conseil.

JP


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Avatar
Jacky
Bonjour,

Dans ton userform, utilise un control "DTPicker" au lieu d'un "textbox" pour la saisie de date
http://cjoint.com/?DEnkKfxeXLz

--
Salutations
JJ


"JP" a écrit dans le message de news:

Bonjour Denis,

Belle démonstration.
Je garde sous le coude ton exemple bluffant (bluffant pour moi tout au moins) mais je vais travailler du coté
de Cdate car je ne laisse pas la main sur la feuille. (Les cellules sont toutes protégées). Le formulaire que
j'utilise gère l'ensemble des informations de la feuille.
Quand je vois l'exemple que tu as joint, je me dis qu'il faut que je trouve le temps de travailler les modules
de classe.

Une nouvelle fois merci pour la réponse. Si je bloque, je reviendrai demander conseil.

JP
Avatar
JP
Jacquouille et Jacky,

Merci pour votre aide. Je viens de regarder l'exemple de jacky. Il me plait bien et il est simple à mettre en oeuvre (cool!).
Merci aussi à Jacquouille pour l'idée intéressante. Je pense qu'il fa ut tout de même que les cellules ne soient pas apparentes sinon l'utilisa teur peut être dérouté à la vision d'un nombre plutôt qu'à une date.

Merci à vous trois.

JP
Avatar
MichD
Bonjour,

Si tu utilises la suggestion de Jacky, je te suggère fortement d'ajouter
ceci dans le ThisWorkbook du projetVBA du classeur. Cela afin de
permettre l'exécution du code sur d'autres ordinateurs qui n'ont
pas ajouté à la barre d'outils du formulaire, le contrôle
"Microsoft Date and Time Picker Control 6.0 (sp6)". Sans quoi, ton
formulaire éprouvera des ratés sérieux! ;-))

GUID signifie : globally unique identifier (ID)
'-------------------------------------------------------
Private Sub Workbook_Open()
On Error Resume Next
With Me.VBProject.References
.AddFromGuid _
GUID:="{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}", _
Major:=2, Minor:=0
End With
End Sub
'-------------------------------------------------------
Avatar
Jacky
Bonsoir Denis,

J'ai déjà constaté à plusieurs reprises sur différent pc (je viens de refaire le test)
sans avoir valider cette référence que DTPicker fonctionne.

Par contre Excel "coche" automatiquement "Microsoft Forms 2.0 Object library"
Y a t'il une concordance ?

--
Salutations
JJ


"MichD" a écrit dans le message de news: lktpjf$vo6$
Bonjour,

Si tu utilises la suggestion de Jacky, je te suggère fortement d'ajouter
ceci dans le ThisWorkbook du projetVBA du classeur. Cela afin de
permettre l'exécution du code sur d'autres ordinateurs qui n'ont
pas ajouté à la barre d'outils du formulaire, le contrôle
"Microsoft Date and Time Picker Control 6.0 (sp6)". Sans quoi, ton
formulaire éprouvera des ratés sérieux! ;-))

GUID signifie : globally unique identifier (ID)
'-------------------------------------------------------
Private Sub Workbook_Open()
On Error Resume Next
With Me.VBProject.References
.AddFromGuid _
GUID:="{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}", _
Major:=2, Minor:=0
End With
End Sub
'-------------------------------------------------------

Avatar
Jacky
Re...
Je viens de constater que "Microsoft Forms 2.0 Object library"
se coche à la construction d'un Userform (même vide)
donc, rien à voir avec DTPicker.

--
Salutations
JJ


"Jacky" a écrit dans le message de news: lku4vj$vm0$
Bonsoir Denis,

J'ai déjà constaté à plusieurs reprises sur différent pc (je viens de refaire le test)
sans avoir valider cette référence que DTPicker fonctionne.

Par contre Excel "coche" automatiquement "Microsoft Forms 2.0 Object library"
Y a t'il une concordance ?

--
Salutations
JJ


"MichD" a écrit dans le message de news: lktpjf$vo6$
Bonjour,

Si tu utilises la suggestion de Jacky, je te suggère fortement d'ajouter
ceci dans le ThisWorkbook du projetVBA du classeur. Cela afin de
permettre l'exécution du code sur d'autres ordinateurs qui n'ont
pas ajouté à la barre d'outils du formulaire, le contrôle
"Microsoft Date and Time Picker Control 6.0 (sp6)". Sans quoi, ton
formulaire éprouvera des ratés sérieux! ;-))

GUID signifie : globally unique identifier (ID)
'-------------------------------------------------------
Private Sub Workbook_Open()
On Error Resume Next
With Me.VBProject.References
.AddFromGuid _
GUID:="{86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}", _
Major:=2, Minor:=0
End With
End Sub
'-------------------------------------------------------





Avatar
MichD
Bonjour Jacky,

Ce que j'ai proposé n'ajoute pas le contrôle "Time and Date" dans la boîte
d'outils du formulaire, (je ne connais pas de code qui fait cela) mais
permet au code de s'exécuter correctement. Il se peut sur un autre
ordinateur que ce contrôle soit déjà présent dans la boîte d'outils du
formulaire, mais s'il est absent, je serais surpris, voire étonné si tu me
disais que tu peux exécuter le code du formulaire sans problème!

N.B- Je n'ai pas testé explicitement sous Excel 2013... mais si c'est le
cas, c'est toute une nouveauté!!!
;-))
Avatar
JP
Bonjour,

En définitive, j'ai adapté la proposition de Denis.
J'ai modifié le format date et j'ai limité la fonction à la colonne q ui était concernée par les dates.
Je confirme le bon fonctionnement.

Merci à tous.

JP
1 2 3 4