PARCOURS DES HEURES CHANTIERS PAR SALARIE – OLE EXCEL

  • Auteur/autrice de la publication :
  • Post category:Codial
  • Commentaires de la publication :0 commentaire

DEMANDE

Obtenir l’extraction d’un tableau des heures par salarié, agence, jours sur une période

RESULTAT

MACRO CODIAL

FICHIER TEXTE A TELECHARGER

 

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

Laisser un commentaire