![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE. |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 3
|
Bonjour,
Je suis un petit nouveau sur le forum (nouveau à poster mais je vous lis depuis longtemps et vous m'avez souvent dépannés donc merci déjà pour le passé.) Je suis aujourd'hui face à un "problème" pour lequel je ne trouve pas de solution. En fait j'ai une table de personnes qui partent en voyage (professionnel). Ils partent entre une date A et une date B. Comme elles sont payées entre ces 2 dates (WE compris), on me demande de calculer le nombre de jours passés entre date A et date B. Jusqu'ici pas de problème (avec un diffdate() ça marche impeccable). Mais, pour du reporting, on me demande également de sortir un graphe du nombre de jours passés en voyage PAR MOIS. Et là mon Diffdate ne me suffit plus. En effet si la personne part le 15 septembre et rentre le 15 novembre, je voudrais une fonction (ou une requête) qui me retourne :
Avez-vous une idée de comment faire de la manière la plus "automatique" possible ? (je voudrais éviter de créer une colonne par mois avec des conditions SI dans tous les sens pour chaque mois des 10 prochaines années...). Thomas Dernière modification par Toma63 ; 23/10/2008 à 11h13 |
|
|
|
|
|
#2 (permalink) |
|
Membre éclairé
![]() Date d'inscription: juillet 2006
Localisation: midi
Âge: 63
Messages: 351
|
Bonjour et bienvenu sur le forum,
Je verrai bien pour ne pas faire trop compliqué : Création d’une table qui récupère, les absences triées par voyageurs et jour. Code à mettre par exemple sur évènement d’un bouton de commande sur un formulaire. Puis requêtes sur cette table avec extraction et sommation des critères retenus. Requête d’extraction Code :
SELECT JourAbs_T.VoyageurT, Month([JourAbs]) AS MoisD, Count(JourAbs_T.VoyageurT) AS CompteDeVoyageurT, Year([JourAbs_T]![JourAbs]) AS AnneeAb FROM JourAbs_T GROUP BY JourAbs_T.VoyageurT, Month([JourAbs]), Year([JourAbs_T]![JourAbs]); Code :
SELECT [JourAbs_R Requête].[VoyageurT], [JourAbs_R Requête].[CompteDeVoyageurT], [MoisD] & "/" & [AnneeAb] AS MoisAbs FROM [JourAbs_R Requête] ORDER BY [JourAbs_R Requête].[VoyageurT], [JourAbs_R Requête].[AnneeAb], [MoisD] & "/" & [AnneeAb]; Code :
Private Sub Commande9_Click() triJour 'fonction sur module1 End Sub Code :
Function triJour() Dim cnc As ADODB.Connection Dim rstVoy As New ADODB.Recordset Dim rstJ As New ADODB.Recordset Dim DateRef As Date 'on efface le contenu de la table DoCmd.SetWarnings False 'Efface le contenu de la table DoCmd.RunSQL "DELETE * FROM JourAbs_T;" 'Retablit les confirmations DoCmd.SetWarnings True Set cnc = CurrentProject.Connection rstVoy.Open "Voyage_T", cnc, adOpenForwardOnly, adLockOptimistic rstJ.Open "JourAbs_T", cnc, adOpenForwardOnly, adLockOptimistic Do While Not rstVoy.EOF 'boucle sur la table base ici Voyage_T Voy = rstVoy("Voyageur") DateRef = rstVoy("DateDep") While DateRef <> rstVoy("DateRet") 'on affecte les infos à la table destinataire With rstJ .AddNew .Fields("VoyageurT") = Voy .Fields("JourAbs") = DateRef .Update End With DateRef = DateRef + 1 rstJ.MoveNext Wend rstVoy.MoveNext Loop End Function A bientôt. Dernière modification par LE VIEUX ; 04/11/2008 à 21h20 |
|
|
|
|
|
#3 (permalink) |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 3
|
Bonjour Vieux,
Tout d'abord merci pour le temps que tu as passé et la clarté des explications. Si je comprends bien il n'y a pas de fonction existante qui permettent de compter le nombre de jour entre 2 dates en les ventilant par mois. Je ne suis pas un pro du VBA mais je vais essayé de comprendre ta fonction pour l'appliquer à ma base (du coup je risque de passer un peu de temps , surtout que les vacances commencent ce soir pour moi !). Je reviendrai vers toi (vous) si j'ai des questions plus précises sur le code. Merci encore, Thomas |
|
|
|
|
|
#4 (permalink) |
|
Membre éclairé
![]() Date d'inscription: juillet 2006
Localisation: midi
Âge: 63
Messages: 351
|
Bonjour et surtout bonnes vacances, surtout si tes préoccupations informatiques relèvent du boulot, oublies les bien sur, on sera là à ton retour.
Merci pour le « merci » c’est tout ce que l’on demande en retour de nos interventions bénévoles, le temps ma foi, ce n’est qu’une question d’appréciation, et j’ai plus appris sur ACCESS en essayant d’aider les autres qu’en me préoccupant que de mes seuls besoins. Petit oubli dans mon post concernant VBA, j’ai utilisé dans mon code un accès aux données concernant les fonctions d’ADO, il faut donc ajouter la référence adéquate : Soit dans VBA : Outils Références Cocher : Microsoft ActiveX Data Objects 2.8 Library Donc a ton retour…. |
|
|
|
|
|
#5 (permalink) |
|
Invité de passage
![]() Date d'inscription: octobre 2008
Messages: 3
|
Merci Vieux,
J'ai utilisé en grande partie ton code pour l'adapter à mon indicateur et ça marche à merveille. Du coup ça m'a permis d'apprendre un peu plus à manipuler le VBA (mais il reste encore du travail...). On peut donc considérer le sujet comme [Résolu]. Thomas |
|
|
|
![]() |
![]() |
||
Diffdate() réparti par mois
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|