Affiche la date 15/01/2012-----Solution très difficile.

Signaler
Messages postés
197
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
25 janvier 2014
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Affiche la date 15/01/2012 dans une Liste ..:
ME à condition:
la date doit répétition 5 mois
chaque fois plus 30 jours.
comme exemple suivant..:
|---------------|
|---DATE--------|
|---------------|
| 15/01/2012 |
| 15/02/2012 |
| 15/03/2012 |
| 15/04/2012 |
| 15/05/2012 |
|---------------|
Solution très difficile.

V.B 6

20 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
DateAdd "D" 30 , etc

ouah, trop dur !

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
197
Date d'inscription
mardi 15 mai 2007
Statut
Membre
Dernière intervention
25 janvier 2014
2
mais comme faire...:DateAdd "D" 30 , etc

ouah, trop dur !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
1) on ouvre son aide VB6 sur le mot Dateadd (fonction) et on lit ce qui y est dit, ainsi que l'exemple venant avec.
2) je ne crois de toutes manières pas que c'est ce que tu cherches, à lire ton "exemple suivant" !
Il me semble qu'il ne s'agit pas de dates allant de 30 jours (comme tu dis) en 30 jours, mais de toute autre chose !
D'où la nécessité d'être très précis dans ses expressions.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonsoir

comme dit UcFoutu
Il me semble qu'il ne s'agit pas de dates allant de 30 jours (comme tu dis) en 30 jours, mais de toute autre chose !


ben oui
15/2/2012 + 30 jours = 13/3/2012
et non 15/3/2012
comme tu dis solution très difficile
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour, ShayW,
comme tu dis solution très difficile

Non : pour être précis : solution très simple dès lors que la demande sera TRES précise !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Allez, va ...

Il semblerait que ce soient des dates d'échéance successives, toujours le même jour du mois.

Il est clair que ce jour ne doit pas excéder le 28 (sinon : problèmes avec février (28 ou 29 jours selon année)

c'est alors dateserail et non dateadd, qu'il convient d'utiliser ===>> exemple/démo pour une échéance fixée au 15 de chaque mois ===>> calcul sur 20 mois successifs

Dim ladate As Date
ladate = CDate("15/01/2011")
For i = 0 To 20
  MsgBox DateSerial(Year(ladate), Month(ladate) + i, Day(ladate))
Next




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Quant aux "difficultés" d'établissement du jour de paiement (échéance) au delà du 28 du mois du fait de ce que le mois de février ne comporte que 28 ou 29 jours selon les années et que les autres mois peuvent comporter 30 ou 31 jours, la solution n'est certes pas dans le développement, mais dans la rédaction de contrats/bails.
Voici comment y déterminer astucieusement, dans une clause ad hoc, les dates d'échéances successives. :
"Les parties conviennent que la date d'échéance est fixée au premier jour suivant le dernier d'une période ayant déjà fait l'objet d'un règlement"
Et comment fait-on ensuite ? ===>>
ladate = CDate("29/01/2011") ' date de départ du contrat
ladate = ladate - 1 ' on ote un jour d'emblée
For i = 0 To 20
  MsgBox DateSerial(Year(ladate), Month(ladate) + i, Day(ladate)) + 1 ' on rajoute 1 jour
Next

et ce sera toujours en conformité avec la clause en cause

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Après réflexion, ceci serait plus exactement dans le sens du contrat avec la clause citée :
 Dim ladate As Date, dateref As Date
  ladate = CDate("31/01/2011") ' date de départ du contrat
  For i = 0 To 20
    dateref = DateSerial(Year(ladate), Month(ladate) + i, Day(ladate))
    If Month(dateref) > (Month(ladate) + i) Then
      dateref = DateSerial(Year(dateref), Month(dateref), 1)
    End If
    MsgBox dateref
  Next



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Bonjour sportmed,

T'es un acharné, t'as posé trois fois la même question, et encore, je passe le reste (n'est-ce pas)

En vb6 c'est encore plus simple que ça, code testé :

  Dim ladate As Date
  ladate = "5/1/12" ' vb fait le reste
  ladate = ladate + 30 ' jours


Cordialement, Joe.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour, EjJoe

Ce n'est pas, me semble-t-il, ce que veut faire sportmed (regarde son exemple)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Eh Jack,

Il y a deux possibilités exclusives l'une de l'autre, soit il veut 30 jours, ce qu'il mentionne, soit il veut le même numéro de jour que le mois précédent, ce qui est comme tu le sais impossible, alors par soustraction la seule possibilité est de rajouter 30 jours... j'ai donc pris cette option, mais sinon, il n'aura 30 jours qu'un mois sur deux, car même avec 15 et 15 on peut avoir une différence de 3 jours je crois, entre par exemple un 28 février et un 15 mars.

De toute façon il n'imagine pas les répercussions de ce qu'il voudrait, tant est qu'il arrive à le formuler, ça lui fera deux possibilités...

Cordialement, Joe.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
sisi, on peut conserver le jour, à condition qu'il soit <= 28 .
J'ai montré ce code plus haut (le tout premier)
pour mémoire, donc ===>>
Dim ladate As Date
ladate = CDate("15/01/2011")
For i = 0 To 20
  MsgBox DateSerial(Year(ladate), Month(ladate) + i, Day(ladate))
Next

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ladate = "5/1/12" ' vb fait le reste

NON !

on ne passe pas d'une date ainsi formattée (String) a une Date !

ca fonctionne, oui. Sur TON poste, avec TES regional settings
qui sont les mêmes sur bon nombre de postes de l'hexagone...

mais ton code plantera lamentablement sur un poste anglo saxon, pensant que tu mentionnes le 1er Mai...

au pire:
ladate = "2012-01-05"

sinon :
ladate = #2012-01-05# 'date en dur

et pour les dates dynamiques :
ladate = DateSerial(2012, 5, 1)

de la même facon, on utilise DatePart, Year, Month et Day pour séparer les composantes des dates...
ne pas faire de Mid$( ... )
sauf si, à la limite, on part d'une String dont le format est connu...



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Tout-à-fait d'accord avec Renfield, que je salue.

Alors : récapitulons un peu pour que sportmed s'y retrouve :
Une solution qui conserve le jour échéant chaque fois que possible (s'il existe pour le mois et l'année) ou impose un "jour par défaut" qui peut-être, au choix, le dernier jour du mois considéré ou le premier du mois suivant. Ce choix se fait, dans le code ci-dessous, par la valeur de k (1 pour remplacement par dernier du mois et 0 pour remplacement par 1er du mois suivant) :

Dim ladate As Date, dateref As Date, k as integer
  ladate = CDate("31/01/2011") ' date de départ du contrat
  k 1 '>> pour remplacer par dernier du mois en cours
  'k 0 '>> si remplacer par 1er du mois suivant
  For i = 0 To 20
    dateref = DateSerial(Year(ladate), Month(ladate) + i, Day(ladate))
    If Day(dateref) <> Day(ladate) Then
      dateref = DateSerial(Year(dateref), Month(dateref), 1) - k
    End If
    MsgBox dateref
  Next

garder la ligne k qui intéresse et commenter l'autre.

Voilà.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
en précisant que la ligne :

 dateref = DateSerial(Year(dateref), Month(dateref), 1) - k

peut également s'écrire (plus pur et s'affranchissant des "facilités" VB)
 dateref = DateSerial(Year(dateref), Month(dateref), 1 - k)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Renfield, que je salue.


me fait remarquer que je ne salue jamais personne.

le coeur y est, mais je ne suis pas bavard de ce coté là, ne te (et les autres) formalises pas ^^


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Ah mes amis... Jacques, Reynald,

Jacques :

En fait il m'a écrit aussi, et vu toutes ses questions en sus, il en ressort qu'il sait à peu près ce qu'il voudrait sans pour autant percevoir que ce n'est pas stricto sensu possible, et qu'il faut l'adapter.
Il donne un exemple du 15, mais ce n'est pas ça, même ses exemples n'expriment pas le mécanisme qu'il voudrait.
A ce stade je peux dire que les ventes de ses produits n'auront pas lieu le 15 de chaque mois obligatoirement, que ce n'est que le mauvais exemple d'un principe.
Et que donc, tant qu'il n'aura pas intégré le problème il nous sera impossible de savoir quoi appliquer, qui d'ailleurs, dans l'absolu, ne peut être que +30 jours, car, comme susdit, il ne va pas vendre que le 15 du mois.
J'ai de facto rajouté un petit exemple, non pas pour contredire le tiens, mais simplement pour apporter une possibilité supplémentaire, qui sans doute sera celle recherchée in fine, "Alea iacta est" (le "j" n'existait pas en bas Latin sous Iulius Caius Caesar
A bientôt...


Reynald,
Suite à ta précision très judicieuse qui tend à programmer de façon universelle, ce qui aurait le mérite de rendre tes programmes utilisables par les Marsiens (si Mars était habitée évidemment), oui, mais bon... le forum est en langue française de France, pour le territoire français, et s'adressant à des français, si ce n'est pas le cas on adaptera, adaptation immédiate si la personne mentionne qu'elle veut programmer pour d'autres systèmes d'unités.
Nonobstant, je subodore qu'au Maroc ils utilisent notre système, leur seconde ou troisième langue scolaire selon le cas étant le Français...
C'est sur cette base que j'ai répondu.
Je te dis donc à bientôt

Joe.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
important l'universalité....

un de mes premiers reflex quand je teste du code a reprendre est de le secouer un peu ainsi.

en entreprise, on choisit pas toujours son poste de travail...
des regional settings UK, j'en ai eu.

peut etre un jour vendra tu un soft a l'etranger ?

ca m'est arrivé, sur du code dont j'heritas. Merci du cadeau !
jongleries en tout genre, etc.

le pire ? l'user forcé a changer ses settings pour qu'un soft tourne comme il faut...

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
6
Bonjour Reynald,

Le seul logiciel que j'ai fait en étranger est un jeu de tarot (à jouer) :

ICI

Il est aussi en Anglais et en Espagnol, mais aucun étranger ne m'en a acheté un, alors j'arrête mon cirque car c'est très pénible de gérer les traductions tellement il y en a.

Néanmoins, si on a besoin d'une programmation internationale tu as totalement raison, toutefois et normalement, l'OS est censé prendre en chrge ce genre de problème, jusqu'à quel stade... je ne sais pas...

Tu aimerais bien une compatibilité internationale, ben moi c'est pareil dans un autre domaine, j'aimerai bien une fusion entre Apache et IIS sous Windows afin de faire de l'asp portable partout, pour quand ?

Cordialement, Joe.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Salut, EhJoe,
En fait il m'a écrit aussi


Ouais.... j'ai également été le destinataire de pas moins de 4 messages privés.
J'ai répondu ceci au premier :
On ne traite rien, sur un forum technique, en de hors du forum, au vu et au su de tous et pour le bénéfice de tous.
Conforme-toi donc à cette règle de base, s'il te plait.
Amitiés

Et n'ai donc pas lu les trois suivants


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient