Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GESTION DU D.I.F -- VBA


Information sur la source

Catégorie :VBA Niveau : Débutant Date de création : 13/06/2005 Vu : 5 386

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Travaillant au ressources humaines, j'ai mis en place ce petit programme qui gère les heures de D.I.F (Droit individuelle à la formation).
J'ai développé ce programme sous ACCESS en VBA. Il est scindé en deux fonctions (moi, je l'ai aient dans deux modules différent, mais c'est pas obligatoire), la premiere fait une boucle sur tous les salariés présent dans l'entreprise (Maj_Solde_Conges) et fait appel à la fonction (Solde_DIF) qui met à jour le champ correspondant au DIF dans la table locale.
Je vous laisse découvrir le prog. J'attend toutes critiques, elles sont toujours bonne pour progresser !


 

Source

  • Fonction n°1 :
  • Function Maj_Solde_Conges()
  • On Error GoTo err_conges
  • '******************************************************************************************
  • '******************************************************************************************
  • '**************************MISE A JOUR DES CONGES (Tbl_Registre)***************************
  • '******************************************************************************************
  • '******************************************************************************************
  • Dim cnn As New ADODB.Connection
  • Dim rst As New ADODB.Recordset
  • Set cnn = CurrentProject.Connection
  • If MsgBox("Effectuer la mise à jour des congés ?", vbInformation + vbYesNo, "NetJoao") = vbYes Then
  • DoCmd.Hourglass True
  • 'Personnel présent dans l'entreprise
  • rst.Open "SELECT MATRICULE, ANCIENNETE, ENTREE, NAISSANCE, CONTRAT FROM Tbl_Registre WHERE (([SORTIE]='') " & _
  • "AND (TYPEPAIE NOT IN ('Interimaires', 'Gardes')))", cnn
  • 'Mise à jour
  • While Not rst.EOF
  • lngMatricule = rst.Fields(0)
  • '*****************Mise à jour Solde DIF**********************
  • Code_Abs = "DIF"
  • 'Appel de la procédure de mise à jour
  • Call DIF.Solde_Dif
  • 'Mise à jour table locale Registre du personnel identifié par un matricule
  • DoCmd.RunSQL "UPDATE Tbl_Registre " & _
  • "SET DIF='" & sngSolde & "' WHERE MATRICULE=" & lngMatricule
  • Debug.Print "Solde DIF : " & sngSolde & " h."
  • rst.MoveNext
  • Wend
  • Set cnn = Nothing
  • rst.Close
  • '**********************************************************************
  • DoCmd.Hourglass False
  • MsgBox "Fin de la mise à jour.", vbInformation, "NetJoao"
  • Else
  • Exit Function
  • End If
  • exit_err:
  • Exit Function
  • err_conges:
  • MsgBox Err.Number & " " & Err.Description, vbCritical, "NetJoao"
  • Resume exit_err
  • End Function
  • Fonction n° 2 :
  • Sub Solde_Dif()
  • '*********************************************
  • '********DROIT INDIVIDUEL A LA FORMATION******
  • '*********************************************
  • Dim cnn As New ADODB.Connection
  • Dim rst As New ADODB.Recordset
  • Dim i As Integer
  • Dim sngDroits As Single
  • Dim sngAbsences As Single
  • Dim lngNbJour As Long
  • Set cnn = CurrentProject.Connection
  • '*********************
  • '*********Droits******
  • '*********************
  • sngDroits = 0
  • lngNbJour = 0
  • 'Le calcul des droits sur l'année civile, incrément des droits (20h)
  • 'au 31/12 de l'année
  • For i = Year(dteAnc) To Year(Now) - 1
  • 'Plus d'un an de présence au 31/12/n
  • If DateDiff("m", dteAnc, "12/31/" & i) >= 12 Then
  • 'Mise en place du DIF en 2005
  • '2004, car au 31/12/2004
  • Debug.Print "********Plus de 12 mois de présence dans l'entreprise********"
  • If i >= 2004 Then
  • If sngDroits = 120 Then
  • 'Les droits sont limités à 120h.
  • sngDroits = 120
  • Else
  • sngDroits = (sngDroits + 20)
  • End If
  • End If
  • Debug.Print "Nombre d'heures acquises DIF : " & sngDroits & " h. - - Année: " & i
  • ElseIf DateDiff("m", dteAnc, "12/31/" & i) >= 4 Then
  • 'Moins d'un an de présence
  • Debug.Print "**********Moins d'un an de présence**********"
  • lngNbJour = nbj_Calendaire(dteAnc, "12/31/" & i)
  • 'Mise en place du DIF en 2005
  • '2004 car au 31/12/2004, incrément des jours
  • If i >= 2004 Then
  • sngDroits = (20 * lngNbJour) / _
  • (nbj_Calendaire("01/01/" & i, "12/31/" & i))
  • End If
  • Debug.Print "Nombre de jour de présence : " & lngNbJour & " j."
  • Debug.Print "Nombre d'heures acquises DIF : " & sngDroits & " h."
  • Else
  • sngDroits = 0
  • End If
  • Next
  • '***********************
  • '*********Absences******
  • '***********************
  • sngAbsences = 0
  • For i = 1 To 31
  • rst.Open "SELECT SUM(VAL" & i & ") FROM PANDORE_SALHISTT " & _
  • "WHERE INDIVIDU=" & lngMatricule & " AND RUB='11s0'", cnn, adOpenKeyset, adLockOptimistic
  • While Not rst.EOF
  • sngAbsences = sngAbsences + Nz(rst.Fields(0), 0)
  • rst.MoveNext
  • Wend
  • rst.Close
  • Next
  • Debug.Print "Total heures absence DIF : " & sngAbsences & " h. Individu : " & lngMatricule
  • '********************
  • '*********Solde******
  • '********************
  • sngSolde = 0
  • sngSolde = sngDroits - sngAbsences
  • sngSolde = format(sngSolde, "0.00")
  • Debug.Print "Solde heures DIF : " & sngSolde & " h."
  • End Sub
Fonction n°1 :

Function Maj_Solde_Conges()
On Error GoTo err_conges
'******************************************************************************************
'******************************************************************************************
'**************************MISE A JOUR DES CONGES (Tbl_Registre)***************************
'******************************************************************************************
'******************************************************************************************
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Set cnn = CurrentProject.Connection
If MsgBox("Effectuer la mise à jour des congés ?", vbInformation + vbYesNo, "NetJoao") = vbYes Then
DoCmd.Hourglass True
    'Personnel présent dans l'entreprise
    rst.Open "SELECT MATRICULE, ANCIENNETE, ENTREE, NAISSANCE, CONTRAT FROM Tbl_Registre WHERE (([SORTIE]='') " & _
        "AND (TYPEPAIE NOT IN ('Interimaires', 'Gardes')))", cnn
    'Mise à jour
    While Not rst.EOF
        lngMatricule = rst.Fields(0)
        '*****************Mise à jour Solde DIF**********************
        Code_Abs = "DIF"
	'Appel de la procédure de mise à jour
        Call DIF.Solde_Dif
	'Mise à jour table locale Registre du personnel identifié par un matricule
        DoCmd.RunSQL "UPDATE Tbl_Registre " & _
            "SET DIF='" & sngSolde & "' WHERE MATRICULE=" & lngMatricule
        Debug.Print "Solde DIF : " & sngSolde & " h."
        rst.MoveNext
    Wend
    Set cnn = Nothing
    rst.Close
    '**********************************************************************
    DoCmd.Hourglass False
    MsgBox "Fin de la mise à jour.", vbInformation, "NetJoao"
Else
    Exit Function
End If
exit_err:
    Exit Function
err_conges:
    MsgBox Err.Number & " " & Err.Description, vbCritical, "NetJoao"
    Resume exit_err
End Function

Fonction n° 2 :

Sub Solde_Dif()
'*********************************************
'********DROIT INDIVIDUEL A LA FORMATION******
'*********************************************
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim i As Integer
Dim sngDroits As Single
Dim sngAbsences As Single
Dim lngNbJour As Long
Set cnn = CurrentProject.Connection
'*********************
'*********Droits******
'*********************
sngDroits = 0
lngNbJour = 0
'Le calcul des droits sur l'année civile, incrément des droits (20h)
'au 31/12 de l'année
For i = Year(dteAnc) To Year(Now) - 1
    'Plus d'un an de présence au 31/12/n
    If DateDiff("m", dteAnc, "12/31/" & i) >= 12 Then
        'Mise en place du DIF en 2005
        '2004, car au 31/12/2004
        Debug.Print "********Plus de 12 mois de présence dans l'entreprise********"
        If i >= 2004 Then
            If sngDroits = 120 Then
                'Les droits sont limités à 120h.
                sngDroits = 120
            Else
                sngDroits = (sngDroits + 20)
            End If
        End If
        Debug.Print "Nombre d'heures acquises DIF : " & sngDroits & " h. - - Année: " & i
    ElseIf DateDiff("m", dteAnc, "12/31/" & i) >= 4 Then
    'Moins d'un an de présence
        Debug.Print "**********Moins d'un an de présence**********"
        lngNbJour = nbj_Calendaire(dteAnc, "12/31/" & i)
        'Mise en place du DIF en 2005
        '2004 car au 31/12/2004, incrément des jours
        If i >= 2004 Then
            sngDroits = (20 * lngNbJour) / _
                (nbj_Calendaire("01/01/" & i, "12/31/" & i))
        End If
        Debug.Print "Nombre de jour de présence : " & lngNbJour & " j."
        Debug.Print "Nombre d'heures acquises DIF : " & sngDroits & " h."
    Else
        sngDroits = 0
    End If
Next
'***********************
'*********Absences******
'***********************
sngAbsences = 0
For i = 1 To 31
    rst.Open "SELECT SUM(VAL" & i & ") FROM PANDORE_SALHISTT " & _
            "WHERE INDIVIDU=" & lngMatricule & " AND RUB='11s0'", cnn, adOpenKeyset, adLockOptimistic
    While Not rst.EOF
        sngAbsences = sngAbsences + Nz(rst.Fields(0), 0)
        rst.MoveNext
    Wend
    rst.Close
Next
Debug.Print "Total heures absence DIF : " & sngAbsences & " h. Individu : " & lngMatricule
'********************
'*********Solde******
'********************
sngSolde = 0
sngSolde = sngDroits - sngAbsences
sngSolde = format(sngSolde, "0.00")
Debug.Print "Solde heures DIF : " & sngSolde & " h."
End Sub

Conclusion

L'actualisation du DIF est lancée une fois par mois, au moment de la paie.
De ce prog. en découle un état qui informe le salarié du solde DIF et autre car je gère aussi les congés (RTT,Ancienneté, CP).
J'attend tous vos commentaire pour améliorer le code...
Bonne prog.


 

Commentaires et avis

signaler à un administrateur
Commentaire de dragon le 13/06/2005 08:55:41

j'ai pas regarder la source, mais j'espère que tu as enlever le nom des employés

signaler à un administrateur
Commentaire de conseildg le 13/06/2005 09:27:28

il serait bien de mettre une DB exemple pour faciliter le test.

signaler à un administrateur
Commentaire de tikok34 le 08/06/2009 13:11:07

Ce serait bien de voir l'interface et/ou le résultat obtenu pour un salarié par exemple (screen shot). Votre appli a-t-elle évolué depuis ? Serait-il possibe d'obtenir un exemple en mdb ? Merci !

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.