Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2010, 21h46   #1
Invité de passage
 
arnaud roux
Inscription : janvier 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : arnaud roux

Informations forums :
Inscription : janvier 2010
Messages : 6
Points : 0
Points : 0
Par défaut Equivalent fonction FIN.MOIS d'excel

Bonjour,

Je suis confronté à un petit problème, je cherche l'équivalent de la fonction FIN.MOIS d'excel pour access.

Exemple : j'ai une date 23/06/10 et je voudrais automatiser la mise à jour de la date d'un test pour qu'elle devienne 31/12/10.

C'est à dire le dernier jour du mois de la dite date + 6 mois.

Merci et joyeuses fêtes
arouxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 22h40   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Bonsoir,

on s'écrit une 'tite fonction VBA :
Code :
1
2
3
4
5
6
7
8
9
10
Public Function MAJDate(LaDate As Variant) As Variant
   Dim dtintermediaire As Date
   If IsDate(LaDate) Then
     dtintermediaire = DateAdd("m", 7, LaDate) 'on ajoute 7 mois
     dtintermediaire = DateSerial(Year(dtintermediaire), Month(dtintermediaire), 1) ' on se positionne sur le 1er jour de LaDate+7mois
     MAJDate = dtintermediaire - 1 ' on retranche un jour
   Else
   MAJDate = Null
   End If
End Function
Pour la manipulation des dates: http://mhubiche.developpez.com/vba/f...ions/datetime/

Dans la fenêtre d’exécution (Ctrl+G) :
Code :
? MAJDate (#06/23/2010#)
Bonnes fêtes de fin d’année…
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 07h59   #3
Invité de passage
 
arnaud roux
Inscription : janvier 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : arnaud roux

Informations forums :
Inscription : janvier 2010
Messages : 6
Points : 0
Points : 0
Bonjour,

Merci pour la réponse.
N'étant pas familier avec le VBA, peux-tu m'expliquer comment faire pour l'utiliser.

J'ai deux champs : (ValCHL) et (DerCHL) ce que je veux c'est avoir une mise à jour de (ValCHL) en fonction de (DerCHL)

Je m'explique:
- si (DerCHL) est dans les 3 mois précédents (ValCHL) la nouvelle date de (ValCHL) est l'ancienne + 6 mois, sachant qu'à la base (ValCHL) est toujours une date en fin de mois.

- si (DerCHL) est fait après (ValCHL) ou plus de 3 mois avant (ValCHL), la nouvelle date (ValCHL) sera (DerCHL) + 6 mois, mais au dernier jour du mois.
ex n°1DerCHL=3/12/10) et (ValCHL=31/11/10) la nouvelle (ValCHL) sera 30/06/11
ex n°2DerCHL=14/07/10) et (ValCHL=31/11/10) la nouvelle (ValCHL) sera 31/01/11

De plus pouvez-vous m'expliquer comment concrètement mettre cela en pratique dans ma base de données, car je n'ai jamais utilisé de fonctions VBA.

Merci beaucoup.
arouxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 10h55   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
Bonjour arouxy,

dans Access, tu ouvres l’éditeur VBA (ALT+F11) puis après Insertion>Module s’ouvre la fenêtre d’édition.
Il ne reste plus qu’à copier/coller le code précédent de la fonction publique qui peut maintenant être appelée de n’importe où.

Pour tester la fonction, tu affiches la fenêtre d’exécution (Affichage>Fenêtre Exécution ou CTRL+G).
Dans la fenêtre d’exécution, tu tapes la commande:

Code :
? MAJDate (#12/03/2010#)
(date au format US, mm/dd/yyyy, à mettre entre #).
Tu valides, la fonction retourne :

2ème essai :
Code :
1
2
3
? MAJDate (#07/14/2010#)
 
31/01/2011
Citation:
Envoyé par arouxy
ex n°1 DerCHL=3/12/10) et (ValCHL=31/11/10) la nouvelle (ValCHL) sera 30/06/11
ex n°2 DerCHL=14/07/10) et (ValCHL=31/11/10) la nouvelle (ValCHL) sera 31/01/11
J’ai l’impression que dans tous les cas, on peut écrire un truc du genre :
Non ?

Ensuite il nous manque des informations pour savoir placer l’appel de la fonction et quand exécuter l’appel.

S’agit-il d’une mise à jour globale de tous les enregistrements d’une table (requête "Mise à jour") ?
S’agit-il d’une mise à jour de l’enregistrement en cours dans un formulaire unique liée à une table ? Dans ce cas, quand doit-on effectuer la mise à jour ? Sur clic d’un bouton ? Après la saisie/modification de DerCHL ?
Autre chose ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 11h23   #5
Invité de passage
 
arnaud roux
Inscription : janvier 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : arnaud roux

Informations forums :
Inscription : janvier 2010
Messages : 6
Points : 0
Points : 0
Merci pour ta rapidité,

La mise à jour est faite uniquement pour l'enregistrement en cours.

Je pensais l'exécuter sur "modification" de (DerCHL).

Dans le code que tu as écrit, il faut remplacer quoi par le bon nom de champ?

Merci
arouxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 18h56   #6
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
A minima, on peut envisager la mise jour sur l’évènement "après MAJ" du contrôle [DerCHL] :
Code :
1
2
3
4
Private Sub DerCHL_AfterUpdate()
  Me.ValCHL = MAJDate(Me.DerCHL)
  Me.Refresh
End Sub
En mode création du formulaire, tu double-cliques sur le contrôle [DerCHL] pour faire apparaître la feuille de propriétés du contrôle (ou bien sélection du contrôle et clic sur le bouton "fenêtre de propriétés").
Dans la "feuille de propriétés", dans l’onglet "évènement" sur la ligne "après MAJ", tu cliques sur le bouton […] et tu choisis "générateur de code".
L’éditeur VBA s’ouvre et tu complètes le code entre Private… et …End Sub.

Après, il semblerait que la mise à jour du champ ne doit être effectuée qu’à certaines conditions (encore obscures pour moi avec ces + ou - 3 mois) et il faudra peut-être compléter le code précédent.

Bref, tu testes le code et tu reviens si le comportement n’est pas tout à fait celui souhaité pour qu’on puisse l’améliorer.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 21h46   #7
Invité de passage
 
arnaud roux
Inscription : janvier 2010
Messages : 6
Détails du profil
Informations personnelles :
Nom : arnaud roux

Informations forums :
Inscription : janvier 2010
Messages : 6
Points : 0
Points : 0
Bonsoir,

Encore merci.
Je viens d'essayer tes codes.
Pas de problème le coup des 6 mois fonctionne parfaitement.

Cette mise à jour de date sert pour un suivi de qualification je m'explique :

Ma qualification est valable jusqu'à (ValCHL). Cette qualification est valable 6 mois, mais peut être renouveler 3 mois max avant tout en gardant comme point de départ (ValCHL) pour le calcul de la nouvelle date 6 mois après (ValCHL).

Mais si je renouvelle ma qualification plus de 3 mois avant (ValCHL), ou si j'ai dépassé la date de (ValCHL), la nouvelle date de (ValCHL) sera celle de (DerCHL)+6 mois mais au dernier jour du mois.
ex: (ValCHL)=31/12/10 et (DerCHL)=03/01/11 donc nouvelle (ValCHL) sera 31/07/11
ou bien (ValCHL)=31/12/10 et (DerCHL)=03/09/10 donc nouvelle (ValCHL) sera 31/03/11

J'espère t'avoir expliqué ca suffisamment clairement.

Je te remercie.

Cordialement.
arouxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h45.


 
 
 
 
Partenaires

Hébergement Web