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 08/07/2011, 14h26   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 40
Points : 4
Points : 4
Par défaut Gestion des repos

Bonjour a tous,

Alors voila j'utilise une base ACCESS qui permet de gérer un planning et notamment les repos.
Mon problème est le suivant:

Je n'arrive pas attribuer les repos en fonction des jours travaillées de chaque employés.

Pour une meilleur compréhension du problème voici mon code VBA:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
Private Sub GenRepos_Click()
    Dim db As DAO.Database
    Dim req As DAO.Recordset
    Dim sql As String
 
    Set db = CurrentDb()
 
    sql = "SELECT distinct idEmploye FROM T_Planning 
    WHERE Semaine='" & Me!NumSem.Value & "' AND Annee=" & Year(Me!DateD.Value)
    Set req = db.OpenRecordset(sql)
 
    While Not req.EOF
        ajout (req.Fields(0))
        req.MoveNext
    Wend
 
End Sub
 
Sub ajout(id As Integer)
    Dim db As DAO.Database
    Dim req As DAO.Recordset
    Dim sql As String
    Dim rep, i As Integer
 
    Set db = CurrentDb()
 
    sql = "SELECT DateJ FROM T_Planning WHERE idEmploye=" & id
    Set req2 = db.OpenRecordset(sql)
 
    DoCmd.SetWarnings False
 
    i = 0
    While Not req2.EOF And i < 7
        If req2.Fields(0) <> DateAdd("d", i, Me!DateD.Value) Then
            DoCmd.RunSQL ("insert into 
             t_planningrepos(datej, idemploye, repos, semaine, annee) 
            values ('" & DateAdd("d", i, Me!DateD.Value) & "', " & id & ", 
            'R', '" & Me!NumSem.Value & "', " & Year(Me!DateD.Value) & ")")
        Else
            req2.MoveNext
        End If
        i = i + 1
    Wend
    DoCmd.SetWarnings True
End Sub

req : Liste des employés travaillant dans la semaine


req2 : Liste des jours travaillés en fonction des employés


resultat :


Quelqu'un a-t-il une idée ???

Merci d'avance de vos réponses
Vetter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 16h34   #2
Invité de passage
 
Inscription : janvier 2011
Messages : 40
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 40
Points : 4
Points : 4
Problème résolue voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Private Sub GenRepos_Click()
    Dim db As DAO.Database
    Dim req, req2 As DAO.Recordset
    Dim sql, sql2 As String
    Dim i, bool As Integer
 
    Set db = CurrentDb()
 
    sql = "SELECT distinct idEmploye 
    FROM T_Planning WHERE Semaine='" & Me!NumSem.Value & "' 
    AND Annee=" & Year(Me!DateD.Value)
    Set req = db.OpenRecordset(sql)
 
    DoCmd.SetWarnings False
    While Not req.EOF
 
        sql2 = "SELECT DateJ FROM T_Planning 
        WHERE idEmploye=" & req.Fields(0) & " 
        AND Semaine='" & Me!NumSem.Value & "' AND Annee="
        & Year(Me!DateD.Value) & " GROUP BY DateJ "
        Set req2 = db.OpenRecordset(sql2)
 
        i = 0
        bool = 0
        While i < 7 And bool < 2
 
            If req2.Fields(0) <> DateAdd("d", i, Me!DateD.Value) Then
                If Test_Doublons(DateAdd("d", i, Me!DateD.Value), req.Fields(0)) = 0 Then
                    DoCmd.RunSQL ("INSERT INTO T_
                    PlanningRepos(DateJ, IdEmploye, Repos, Semaine, Annee) 
                    VALUES ('" & DateAdd("d", i, Me!DateD.Value) & "', " & req.Fields(0) & ", 
                    'R', '" & Me!NumSem.Value & "', " & Year(Me!DateD.Value) & ")")
                End If
            Else
                If Test_Doublons(DateAdd("d", i, Me!DateD.Value), req.Fields(0)) = 0 Then
                    DoCmd.RunSQL ("INSERT INTO T_PlanningRepos
                    (DateJ, IdEmploye, Repos, Semaine, Annee) 
                    VALUES ('" & DateAdd("d", i, Me!DateD.Value) & "', " & 
                    req.Fields(0) & ", 'TRAV', '" & Me!NumSem.Value & "', " & 
                    Year(Me!DateD.Value) & ")")
                End If
                req2.MoveNext
                If req2.EOF And bool = 0 Then
                    req2.MovePrevious
                    bool = 1
                End If
                If req2.EOF And bool = 1 Then
                    bool = 2
                End If
            End If
            i = i + 1
        Wend
        req.MoveNext
    Wend
 
    DoCmd.RunSQL ("DELETE FROM T_PlanningRepos 
    WHERE Repos='TRAV' and Semaine='" & Me!NumSem.Value & "' AND 
    Annee=" & Year(Me!DateD.Value))
    DoCmd.SetWarnings True
End Sub
Vetter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 18h52   #3
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 258
Points : 5 258
Salut,

Une simple remarque:
A priori tu n'as pas besoin des champs "Semaine" et "Annee" dans les tables "T_Planning" et "T_PlanningRepos".

Par exemple,
Pour sélectionner les enregistrements de la semaine commençant par Me!DateD dans la table T_Planning, tu n'as qu'à faire:

Code :
1
2
3
4
sql = "SELECT distinct idEmploye 
    FROM T_Planning WHERE DateJ between " & CLng(Me!DateD.Value) & " 
    AND " & (CLng(Me!DateD.Value)+6)
    Set req = db.OpenRecordset(sql)
D'autre part il existe une fonction permettant d'avoir le numéro de semaine et l'année à partir de la date [DateJ], les champs "Semaine" et "Annee" ne sont donc pas utiles dans ces tables et cela simplifie aussi les requêtes Insert.

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h10.


 
 
 
 
Partenaires

Hébergement Web