Accueil > > > GESTION DU D.I.F -- VBA
GESTION DU D.I.F -- VBA
Information sur la source
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|