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
A voir également:
Affiche la date 15/01/2012-----Solution très difficile.
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
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
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
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
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
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
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...
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
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...
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
____________________
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
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
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 ?
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