DEMANDE
Obtenir l’extraction d’un tableau des heures par salarié, agence, jours sur une période
RESULTAT
MACRO CODIAL
//////////////////////////////////////////////////////////////////////////////////////////
//DECLARATION DES VARIABLES
//////////////////////////////////////////////////////////////////////////////////////////
LOCAL
vNom est une chaîne
vProjet est une chaine
vTotal est une chaine
cAgence est une chaine
DateDebut, DateFin, DD, DF est une Date
EcartNbJours est un entier
Compteur est un entier
TableauHeures est un tableau dynamique
Col, Lig, CompteurLig, CompteurCol est un entier
NbreHrs est un numérique
//////////////////////////////////////////////////////////////////////////////////////////
//PREAFFECTATION DES VARIABLES
//////////////////////////////////////////////////////////////////////////////////////////
DateDebut = »20200101″
DateFin = »20200111″
cAgence = « »
DD = DateDebut
DF = DateFin
col = 1; Lig = 1
Compteur = 1
EcartNbJours = DateDifférence(DateDebut, DateFin) + 3
TableauHeures = allouer un tableau de EcartNbJours par 2 chaînes
TableauHeures[1,Lig] = « NOM »
TableauHeures[2,Lig] = « AGENCE »
CompteurCol = 3
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//PHASE 1 : FUSION DES DONNEES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//PRETRAITEMENT DU TABLEAU AVEC PREPARATION DES JOURS
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TANTQUE CompteurCol <= EcartNbJours
TableauHeures[CompteurCol,Lig] = « ‘ » + DateVersChaîne(DD, »JJ/MM/AAAA »)
TableauHeures[CompteurCol,Lig+1] = EntierVersJourEnLettre(DD)
CompteurCol += 1
DD..Jour += 1
FIN
Col = TableauInfo(TableauHeures, tiDimension,1)
Lig = TableauInfo(TableauHeures, tiDimension,2)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LECTURE DU FICHIER DES EMPLOYES PRESENT
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
HLitPremier(« EMPLOYE », »EMCLEUNIK »)
TANTQUE HEnDehors(« EMPLOYE ») = Faux
SI EMPLOYE.INT_SUPPRIME = Faux ALORS
vNom = EMPLOYE.NOM + » » + EMPLOYE.PRENOM
NbreHrs = 0
Dimension(TableauHeures,col,Lig + 1)
Lig = TableauInfo(TableauHeures, tiDimension,2)
TableauHeures[1,lig] = vNom
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//LECTURE DE LA TABLE DU SUIVI HORAIRE
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
HLITRECHERCHE(« SUIVIOP », »EMCLEUNIK »,EMPLOYE.EMCLEUNIK)
TANTQUE HTROUVE(« SUIVIOP »)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//CONDITIONS A REMPLIR : <> « HTRA01 »
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SI SUIVIOP.TYPE <> « HTRA01 » _ET_ DateDebut <= SUIVIOP.DATEINTER <= DateFin ALORS
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TRAITEMENT EN FONCTION DU TYPE DE DOCUMENT DANS LEQUEL LES HEURES ONT ETE SAISIES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SELON SUIVIOP.DOCUMENT
CAS « PROJET » :
HLITRECHERCHEPREMIER(« COD_PROJET », »IDCOD_PROJET »,SUIVIOP.NUMCOM)
HLITRECHERCHE(« COD_AGENCE », »IDCOD_AGENCE »,COD_PROJET.IDCOD_AGENCE)
TableauHeures[2,lig] = COD_AGENCE.CODE_AGENCE
CompteurCol= DateDifférence(DateDebut,SUIVIOP.DATEINTER) + 3
NbreHrs = arrondi(val(TableauHeures[CompteurCol,lig])+ SUIVIOP.NBRHEURE,2)
TableauHeures[CompteurCol,lig] = NbreHrs
CAS « COMMANDEC » :
HLITRECHERCHEPREMIER(« COMMANDC », »C2CLEUNIK »,SUIVIOP.NUMCOM)
HLITRECHERCHE(« COD_AGENCE », »IDCOD_AGENCE »,COMMANDC.IDCOD_AGENCE)
TableauHeures[2,lig] = COD_AGENCE.CODE_AGENCE
CompteurCol= DateDifférence(DateDebut,SUIVIOP.DATEINTER) + 3
NbreHrs = arrondi(val(TableauHeures[CompteurCol,lig])+ SUIVIOP.NBRHEURE,2)
TableauHeures[CompteurCol,lig] = NbreHrs
CAS « REPARATION » :
HLITRECHERCHEPREMIER(« REPARAT », »R1CLEUNIK »,SUIVIOP.NUMCOM)
HLITRECHERCHE(« COD_AGENCE », »IDCOD_AGENCE »,REPARAT.IDCOD_AGENCE)
TableauHeures[2,lig] = COD_AGENCE.CODE_AGENCE
CompteurCol= DateDifférence(DateDebut,SUIVIOP.DATEINTER) + 3
NbreHrs = arrondi(val(TableauHeures[CompteurCol,lig])+ SUIVIOP.NBRHEURE,2)
TableauHeures[CompteurCol,lig] = NbreHrs
AUTRE CAS :
FIN
FIN
HLitSuivant(« SUIVIOP »)
FIN
FIN
////////////////////////////////////////////////////////////////////////
//EMPLOYE SUIVANT
////////////////////////////////////////////////////////////////////////
HLitSuivant(« EMPLOYE »)
FIN
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//PHASE 2 : GENERATION DU CLASSEUR EXCEL
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TRAITEMENT EN FONCTION DU TYPE DE DOCUMENT DANS LEQUEL LES HEURES ONT ETE SAISIES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
objXLApp est un objet Automation dynamique = ObjetActif(« Excel.Application »)
SELON objXLApp
CAS Null :
objXLApp = allouer un objet Automation « Excel.Application »
AUTRE CAS :
//Une instance EXCEL est déjà ouverte, on la ferme
objXLApp>>Quit()
libérer objXLApp
objXLApp = allouer un objet Automation « Excel.Application »
FIN
objXLApp>>Visible = false
objXLApp>>workbooks>>add() // ouvre le classeur
objXLApp>>ActiveSheet>>Name = « Détail des Heures » // ouvre la feuille
col = TableauInfo(TableauHeures, tiDimension,1)
lig = TableauInfo(TableauHeures, tiDimension,2)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TRAITEMENT DES 2 LIGNES DE TITRES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CompteurLig = 1
CompteurCol = 1
TANTQUE CompteurCol <= col
objXLApp>>ActiveSheet>>cells(1,CompteurCol) = TableauHeures[CompteurCol ,1]
objXLApp>>ActiveSheet>>cells(2,CompteurCol ) = TableauHeures[CompteurCol ,2]
//Mise en forme de la première ligne de titre
//=========================================
objXLApp>>ActiveSheet>>cells(1,CompteurCol)>>Font>>Bold = True
objXLApp>>ActiveSheet>>cells(1,CompteurCol)>>Font>>ColorIndex = 1
objXLApp>>ActiveSheet>>cells(1,CompteurCol )>>Interior>>ColorIndex = 33
//Mise en forme de la deuxième ligne de titre
//=========================================
objXLApp>>ActiveSheet>>cells(2,CompteurCol)>>Font>>Bold = True
objXLApp>>ActiveSheet>>cells(2,CompteurCol)>>Font>>ColorIndex = 1
objXLApp>>ActiveSheet>>cells(2,CompteurCol )>>Interior>>ColorIndex = 34
CompteurCol += 1
//Si on atteint la dernière colonne + 1 , je rajoute le titre « TOTAL » car la colonne va servir à générer le total des hures pour chaque salarié
//===========================================================================================================
SI CompteurCol > col ALORS
objXLApp>>ActiveSheet>>cells(1,CompteurCol) = « TOTAL »
objXLApp>>ActiveSheet>>cells(1,CompteurCol)>>Font>>Bold = 1
objXLApp>>ActiveSheet>>cells(1,CompteurCol )>>Interior>>ColorIndex = 33
objXLApp>>ActiveSheet>>cells(2,CompteurCol )>>Interior>>ColorIndex = 34
FIN
FIN
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//TRAITEMENT DES LIGNES SALARIES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//On démarre avec un décalage de 2 lignes à cause des titres
//================================================
CompteurLig = 3
TANTQUE CompteurLig <= lig
CompteurCol = 1
TANTQUE CompteurCol <= col
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol) = TableauHeures[CompteurCol ,CompteurLig]
SELON TableauHeures[CompteurCol ,2]
CAS « dimanche » :
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol )>>Interior>>ColorIndex = 43
CAS « samedi » :
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol )>>Interior>>ColorIndex = 35
FIN
CompteurCol += 1
//Si on atteint la dernière colonne + 1 , je rajoute le total de la ligne sous forme d’une formule EXCEL
//================================================================================
SI CompteurCol > col ALORS
vTotal = « =SUM(RC[-« +(col -2)+ »]:RC[-1]) »
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol) = vTotal
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol)>>Font>>Bold = True
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol)>>Font>>ColorIndex = 1
objXLApp>>ActiveSheet>>cells(CompteurLig,CompteurCol )>>Interior>>ColorIndex = 20
FIN
FIN
CompteurLig += 1
FIN
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//On rend le classeur EXCEL visible
//===========================
objXLApp>>ActiveSheet>>Cells>>Select
objXLApp>>ActiveSheet>>Cells>>EntireColumn>>AutoFit
objXLApp>>ActiveSheet>>Range(« A1 »)>>Select
objXLApp>>Visible = True
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//FIN DE LA MACRO
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//FONCTIONS REUTILISABLES
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//info(« Colonnes: « + Col, « Lignes = » + Lig + crlf + » Nbre dimensions : » + TableauInfo(TableauHeures,tiNombreDimensions) + crlf + » NbreColonnes : » + TableauInfo(TableauHeures,tiNombreColonnes) + crlf + » Nbre Lignes : » + TableauInfo(TableauHeures,tiNombreLignes))
//objXLApp>>ActiveSheet>>Columns(« A:F »)>>autofit
//
//objXLApp>>ActiveSheet>>UsedRange>>SpecialCells(11)>>Select
//
////c = objXLApp>>ActiveCell>>column
////l = objXLApp>>ActiveCell>>row
////Permet de mettre une formule
////v = « =SUM(R[-« +(l-1)+ »]C:R[-1]C) »
////objXLApp>>ActiveSheet>>cells(l+1,c) = v
//
//objXLApp>>ActiveSheet>>Range(« A1 »)>>Select