pb date access

pb date access - VB/VBA/VBS - Programmation

Marsh Posté le 23-01-2009 à 08:24:08    

bonjour
 
j'ai un petit soucis avec les dates
 
voila le probleme
sous access 97
 
j'ai une date de saisie je voudrais avoir une date de valeur a j +3 la pas de probleme, le probleme est que ce j + 3 doit etre un jour ouvre de la semaine et pas un jour ferie ou un jour week .
la je cale completement
 
par avance je vous remercie de votre aide
 
thierry

Reply

Marsh Posté le 23-01-2009 à 08:24:08   

Reply

Marsh Posté le 23-01-2009 à 09:59:48    

La fonction Weekday() retourne le numéro du jour de la semaine.
Par exemple pour trouver la date de lundi prochain :

        intOffset = Abs((9 - Weekday(Now))Mod 7)
        nextMonday = Format(Now() + intOffset + 7, "mmmm d" )

Reply

Marsh Posté le 23-01-2009 à 10:05:44    

merci  
 
pour ta reponse
mais je recherche qlq chose d'automatique
 
quand tu rentres comme aujourd'hui le vendredi 23 janvier je veux que automatiquement il m'affiche mercredi 28 janvier dans une autre case
 
a +
 
thierry

Reply

Marsh Posté le 23-01-2009 à 10:31:59    

Citation :

dans une autre case

Qu'est-ce qu'une case ? Un cellule Excel ou un champ d'un formulaire Access, ou autre chose ?

Citation :

automatiquement

Une automatisation possible consiste à avoir quelques lignes de VBA se basant sur la fonction Weekday() dans une procédure appelée lors d'un évenement. (Est-ce que vous connaissez VBA ? Cela permet de faire beaucoup de choses et ce n'est pas très compliqué à mettre en oeuvre. Cela vaut le coup de l'apprendre quand on utilise Access ou Excel régulièrement.)

Reply

Marsh Posté le 23-01-2009 à 10:35:51    

re
 
merci pour ces reponses rapides
c'est un champ de formulaire
 
et pour le vba je connais que peut et cela remonte a un certain temps
 
dans exel j'ai trouve une solution avec des fonction mais je veux utiliser access pour des questions de protection des données
 
a +
 
thierry

Reply

Marsh Posté le 26-01-2009 à 16:10:34    

je vais reposer le probleme
 
dim datesaisie = date
dim valeurdbf = datesaisie +1
if datesaisie = vbmonday then valeurbdf = vbtuesday
et tout ceci jusqu'au vendredi qui renvoi au lundi sauf si la date vzleurbdf tombe un jour ferie alors je prend le lendemain
 
voila mon petit probleme
 
a +
 
thierry

Reply

Marsh Posté le 27-01-2009 à 13:16:27    

Bonjour
 
Tu dois aussi calculer les jours type 11/11 ou 25/12 ?
 
Si c'est juste vis a vis de la semaine. Comme tu as +3 jours, tu regardes quel jour de la semaine tombe ta date de départ. Sil elle est strictement inférieur à mercredi tu ajoutes 3, sinon tu ajoutes 5
 
Ensuite si tu n'y connais rien vba tu peux commencer par les macros.
Un définir valeur avec :
element : nom du champ de ta date de départ (je pars du principe que ton champ se nomme [DateDepart]
Expression : =vraifaux(JourSem([DateDepart];2)<3;AjDate("j";3;[DateDepart]);AjDate("j";5;[DateDepart]))
 
En vba ca donnerait :  
If WeekDay([DateDepart],2) <3 then
   DateFin = DateAdd("j",3,[DateDepart])
Else
   DateFin = DateAdd("j",5,[DateDepart])
End if
 
En fonction d'ou tu es ou pour coder tu peux aussi utiliser cette forme la pour faire reference a tes controles :
Forms("Nom de ton formulaire" )("Nom de ton controle ou est la date" )
 
Cordialement


Message édité par SuppotDeSaTante le 27-01-2009 à 13:23:31

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-01-2009 à 13:22:41    

bonjour
 
merci pour ta reponse oui je dois aussi prendre les jours feries en compte et la ca complique le systeme
 
cordialement Thierry

Reply

Marsh Posté le 27-01-2009 à 13:23:47    

J'ai edité mon post en haut...
 
Alors la c'est pas pareil.... Faut calculer les jours fériés... Calendrier gregorien toussa....  :pt1cable:


Message édité par SuppotDeSaTante le 27-01-2009 à 13:24:47

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-01-2009 à 13:27:15    

Citation :

'Fonction trouvée sur www.codes-sources.fr/www.vbfrance.com
'http://www.vbfrance.com/code.aspx?ID=1251
Private Function IsFerie(Date_testee As Date) As Boolean
    Dim JJ, AA, MM As Integer
    Dim NbOr, Epacte As Integer
    Dim PLune, Paques, Ascension, Pentecote As Date
    JJ = Day(Date_testee)
    MM = Month(Date_testee)
    AA = Year(Date_testee)
    If JJ = 1 And MM = 1 Then IsFerie = True: Exit Function '1 Janvier
    If JJ = 1 And MM = 5 Then IsFerie = True: Exit Function '1 Mai
    If JJ = 8 And MM = 5 Then IsFerie = True: Exit Function '8 Mai
    If JJ = 14 And MM = 7 Then IsFerie = True: Exit Function '14 Juillet
    If JJ = 15 And MM = 8 Then IsFerie = True: Exit Function '15 Août
    If JJ = 1 And MM = 11 Then IsFerie = True: Exit Function '1 Novembre
    If JJ = 11 And MM = 11 Then IsFerie = True: Exit Function '11 Novembre
    If JJ = 25 And MM = 12 Then IsFerie = True: Exit Function '25 Décembre
    NbOr = (AA Mod 19) + 1
    Epacte = (11 * NbOr - (3 + Int((2 + Int(AA / 100)) * 3 / 7))) Mod 30
    PLune = DateSerial(AA, 4, 19) - ((Epacte + 6) Mod 30)
    If Epacte = 24 Then PLune = PLune - 1
    If Epacte = 25 And (AA >= 1900 And AA < 2000) Then PLune = PLune - 1
    Paques = PLune - Weekday(PLune) + vbMonday + 7 'Paques
    If JJ = Day(Paques) And MM = Month(Paques) Then IsFerie = True: Exit Function
    Ascension = Paques + 38 'Ascension
    If JJ = Day(Ascension) And MM = Month(Ascension) Then IsFerie = True: Exit Function
    Pentecote = Ascension + 11 'Pentecote
    If JJ = Day(Pentecote) And MM = Month(Pentecote) Then IsFerie = True: Exit Function
    IsFerie = False
End Function


Message édité par SuppotDeSaTante le 27-01-2009 à 13:28:01

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-01-2009 à 13:27:15   

Reply

Marsh Posté le 27-01-2009 à 13:34:11    

re
 
merci pour ta reponse je vais tester ca cet apm  
 
je te tiens au courant si j'ai un soucis pour le faire fonctionner
 
bon apm
 
a +
 
thierry

Reply

Marsh Posté le 27-01-2009 à 13:47:06    

re
 
je viens de teste mais je m'arrive pas ale faire fonctionner.
 
peux tu m'aider
 
cordialement
 
thierry

Reply

Marsh Posté le 27-01-2009 à 14:05:05    

Sois peut etre un peu plus explicite....?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-01-2009 à 14:23:08    

re
 
voila ma table
date de saise
date de depot = date de saisie +  1 jour ouvre
date valeur = date depot + 1 jour ouvre
date valeur1 = date de depot + 3 jours ouvre
 
dans XL j'ai trouve une solution mais comme je bosse sous access 97 je recherche une nouvelle solution
 
a +
 
thierry

Reply

Marsh Posté le 27-01-2009 à 14:47:17    

Je n'arrive pas a voir la difference qu'il pourrait y avoir sous excel et access au niveau des calculs de date...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 27-01-2009 à 14:54:28    

re  
 pour Xl j'utilise la fonction suivante =SERIE.JOUR.OUVRE(B4;1;L4:L21) en determinant la fonction (=PLANCHER(JOUR(MINUTE(K2/38)/2+56)&"/5/"&K2;7)-34
 
voila c'est assez simple
mais pour access je n'arrive a rien de concret
 
a +
 
thierry

Reply

Marsh Posté le 30-01-2009 à 11:01:50    

Et tu veux quoi ?
Une requete mise a jour qui mette a jour toutes tes dates calculées en fonction de [date de saise] ?
Ou un formulaire ?


Message édité par SuppotDeSaTante le 30-01-2009 à 11:02:02

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-01-2009 à 11:07:15    

BONJOUR
 
JE CHERCHE A FAIRE UN FORMULAIRE  
 
A +
 
THIERRY

Reply

Marsh Posté le 30-01-2009 à 11:27:59    

A mettre dans un module :

Code :
  1. Function IsFerie(Date_testee As Date) As Boolean
  2.     Dim JJ, AA, MM As Integer
  3.     Dim NbOr, Epacte As Integer
  4.     Dim PLune, Paques, Ascension, Pentecote As Date
  5.    
  6.     If Weekday(Date_testee, vbMonday) = 6 Or Weekday(Date_testee, vbMonday) = 7 Then IsFerie = True: Exit Function
  7.     JJ = Day(Date_testee)
  8.     MM = Month(Date_testee)
  9.     AA = Year(Date_testee)
  10.     If JJ = 1 And MM = 1 Then IsFerie = True: Exit Function '1 Janvier
  11.     If JJ = 1 And MM = 5 Then IsFerie = True: Exit Function '1 Mai
  12.     If JJ = 8 And MM = 5 Then IsFerie = True: Exit Function '8 Mai
  13.     If JJ = 14 And MM = 7 Then IsFerie = True: Exit Function '14 Juillet
  14.     If JJ = 15 And MM = 8 Then IsFerie = True: Exit Function '15 Août
  15.     If JJ = 1 And MM = 11 Then IsFerie = True: Exit Function '1 Novembre
  16.     If JJ = 11 And MM = 11 Then IsFerie = True: Exit Function '11 Novembre
  17.     If JJ = 25 And MM = 12 Then IsFerie = True: Exit Function '25 Décembre
  18.     NbOr = (AA Mod 19) + 1
  19.     Epacte = (11 * NbOr - (3 + Int((2 + Int(AA / 100)) * 3 / 7))) Mod 30
  20.     PLune = DateSerial(AA, 4, 19) - ((Epacte + 6) Mod 30)
  21.     If Epacte = 24 Then PLune = PLune - 1
  22.     If Epacte = 25 And (AA >= 1900 And AA < 2000) Then PLune = PLune - 1
  23.     Paques = PLune - Weekday(PLune) + vbMonday + 7 'Paques
  24.     If JJ = Day(Paques) And MM = Month(Paques) Then IsFerie = True: Exit Function
  25.     Ascension = Paques + 38 'Ascension
  26.     If JJ = Day(Ascension) And MM = Month(Ascension) Then IsFerie = True: Exit Function
  27.     Pentecote = Ascension + 11 'Pentecote
  28.     If JJ = Day(Pentecote) And MM = Month(Pentecote) Then IsFerie = True: Exit Function
  29.     IsFerie = False
  30. End Function
  31. Function JPlusNbJour(Date_testee As Date, NbJour As Integer)
  32. Dim DateCalc As Date, SamDim As Integer
  33. DateCalc = DateAdd("d", NbJour, Date_testee) 'Voir si sous 97 il ne faut remplacer d par j
  34. If IsFerie(DateCalc) = True Then
  35.     While IsFerie(DateCalc) = True
  36.         DateCalc = DateAdd("d", 1, DateCalc) 'Voir si sous 97 il ne faut remplacer d par j
  37.    
  38.     Wend
  39.     JPlusNbJour = DateCalc
  40. Else
  41.     JPlusNbJour = DateCalc
  42. End If
  43. End Function


 
Ensuite, je pars du principe que le controle dans lequel tu saisis la date se nomme [DateSaisie] et celui qui calcul le j+3 se nomme [DateJ3].
Dans le module de ton formulaire, apres mise a jour de DateSaisie :
[DateJ3] = JPlusNbJour([DateSaisie], 3)
 
Si tu veux j+1 : [DateJ3] = JPlusNbJour([DateSaisie], 1)
Ou si tu veux j+15 : [DateJ3] = JPlusNbJour([DateSaisie], 15)
 
Cordialement


Message édité par SuppotDeSaTante le 30-01-2009 à 14:42:43

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-01-2009 à 11:32:02    

re
 
merci
 
je vais tester cet apm
 
et je te dis
encore
merci
 
thierry

Reply

Marsh Posté le 30-01-2009 à 11:37:17    

J'ai édité mon code pour faire une modif, reprends le.
 
Tiens moi au jus ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-01-2009 à 12:51:05    

re
 
merci  
 
parcontre je sais pas si je vais avoir du temps cet apm
 
parcontre lundi cela devrait le faire
 
donc je te tiens au courant au plus tard lundi
 
bon week a +
 
thierry

Reply

Marsh Posté le 02-02-2009 à 16:15:47    

bonjour
 
apres de nombreux tests j'ai pas reuissi a faire fonctionner le formulaire il refuse la formule dans le control
 
a +
 
thierry

Reply

Marsh Posté le 02-02-2009 à 20:12:51    

Je pense que ca serait plus simple que tu m'envoies ta base que je zieute...
 
Donne moi parcontre le nom du formulaire a modifier/regarder


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed