begin process at 2012 02 10 21:11:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VBA

 > GESTION DU D.I.F -- VBA

GESTION DU D.I.F -- VBA


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VBA Niveau :Débutant Date de création :13/06/2005 Vu :7 493

Auteur : NetJoao

Ecrire un message privé
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.



 Sources du même auteur

CONVERSION DATE /VBA-- ACCESS
INSERTION DONNÉES VBA -- ADO

 Sources de la même categorie

Source avec Zip GESTION PERSONNEL par oudlarbi
Source avec Zip Source avec une capture CALENDRIER EN VBA POUR EXCEL 2010 par nounou94
Source avec Zip Source avec une capture MANIPULER LES FENETRES ENFANT D'EXCEL par bigfish_le vrai
Source avec Zip Source avec une capture COLLECTION ID par Le Pivert
Source avec Zip Source avec une capture VBA MASQUE DE SAISIE NUMÉRIQUE par acive

Commentaires et avis

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

Commentaire de conseildg le 13/06/2005 09:27:28

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

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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,995 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales