MALICIOUS
122
Risk Score
Malware Insights
MITRE ATT&CK
T1059.005 Visual Basic
T1547.001 Registry Run Keys / Startup Folder
The file is an Excel spreadsheet containing a large VBA macro. Heuristics indicate the macro is capable of self-replication and AV tampering. The macro's code, though truncated, shows functions for managing toolbars and potentially establishing persistence via registry keys. The presence of a benign URL does not detract from the malicious nature indicated by the macro's behavior.
Heuristics 4
-
VBA macros detected medium 2 related findings OLE_VBA_MACROSDocument contains VBA macro code
-
VBA macro-virus self-replication / AV tampering critical OLE_VBA_MACRO_VIRUS_REPLICATIONVBA macro programmatically rewrites VBA project code through the VBE object model (CodeModule/VBComponents InsertLines/DeleteLines/AddFromString or OrganizerCopy) to copy itself into the global template and other open documents, and/or disables Office macro-virus protection (Options.VirusProtection = False). This is the defining behavior of the W97M document macro-virus family — self-replicating code with no benign document use, independent of any AV signature.Matched line in script
.DeleteLines StartLine:=1, Count:=.CountOfLines -
CreateObject call high OLE_VBA_CREATEOBJCreateObject callMatched line in script
Set c_dicEditionSiteProduction = CreateObject("Scripting.Dictionary") -
Embedded URL info EMBEDDED_URLOne or more URLs were extracted from the document. The URL itself is not a detection — see the per-URL labels for which channel (macro, JS, link annotation, document body, ...) reached each URL.URL http://activex.microsoft.com/controls/vb6/mscomct2.cab In document text (OLE body)
Extracted artifacts 1
Files carved from inside the sample during analysis.
| Filename | Kind | Source | Size |
|---|---|---|---|
macros.bas |
vba-macro | oletools.olevba.extract_macros (decoded VBA source) | 113241 bytes |
SHA-256: 11a61e7e715369dfd4b2ec206123c1d113057f5a3f2e90a81cacbc3c35a129e8 |
|||
Preview scriptFirst 1,000 lines of the extracted script
Attribute VB_Name = "Feuil2"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Name = "ThisWorkbook"
Attribute VB_Base = "0{00020819-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
' ================================================================================================================
' Suppression barre d'outil à la fermeture du classeur
' ================================================================================================================
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupprimerBarreOutils (STR_NOM_BARRE)
End Sub
' ================================================================================================================
' Création de la barre d'outil à l'activation du classeur
' ================================================================================================================
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
' Affichage de la barre d'outil propre au classeur
AfficherBarreOutil
End Sub
' ================================================================================================================
' Suppression barre d'outil à la désactivation du classeur
' ================================================================================================================
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
' Suppression de la barre d'outil
SupprimerBarreOutils (STR_NOM_BARRE)
End Sub
Attribute VB_Name = "Feuil1"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Name = "Feuil3"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Name = "Feuil4"
Attribute VB_Base = "0{00020820-0000-0000-C000-000000000046}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = True
Attribute VB_Name = "ReportingDetail"
Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = False
'## Maj TFA 2009
Option Explicit
' Maille Reporting
' 1) Reseau
' 2) Gamme
' 3) Produit
Private c_strReseau As String
Private c_strGamme As String
Private c_strProduit As String
Private c_strCodeFiliere As String
Private c_vntDepotFinPrevu As Variant ' Remise en poste - Date de fin prévue (initiale)(Synthèse: COL_DepotFinPrevu)
Private c_blnDepotFinPrevuOK As Boolean
Private c_vntDepotDebutReel As Variant ' Remise en poste - Date début réelle (Synthèse: COL_DepotDebutReel)
Private c_vntDepotFinReel As Variant ' Remise en poste - Date fin (Synthèse: COL_DepotFinReel)
Private c_blnDepotFinReelOK As Boolean
Private c_lngNbPagesEstime As Long ' Edition - volume estimé (Synthèse: COL_NbEditionEstime)
Private c_lngNbPagesAttendu As Long ' Edition - volume attendu (Synthèse: COL_NbEditionAttendu)
Private c_lngEditionNbPagesRealise As Long ' Edition - volume réalisé (Synthèse: COL_NbEditionRealise)
Private c_lngNbPlisEstime As Long ' Mise sous plis - Nb plis attendu (Synthèse: COL_NbPlisEstime)
Private c_lngNbPlisAttendu As Long ' Mise sous plis - Nb plis attendu (Synthèse: COL_NbPlisAttendu)
Private c_lngPlisNbPlisRealise As Long ' Mise sous plis - Nb Plis réel (Synthèse: COL_PlisNbPlisRealise)
Private c_lngDepotNbPlisReel As Long ' Remise en poste - Nb plis remis en poste (réel) (Synthèse: COL_DepotNbPlisReel)
Private c_dblAvancementEdition As Double
Private c_dblAvancementMiseSousPlis As Double
Private c_dblAvancementRemisePoste As Double
Private c_blnIsEstimation As Boolean ' Indicateur de calcul avec les volumes estimés
Private c_blnIsReliquats As Boolean ' Indicateur de présence de reliquats
' === Reseau (LET/GET)
Property Let Reseau(Valeur As String)
c_strReseau = Valeur
End Property
Property Get Reseau() As String
Reseau = c_strReseau
End Property
' === Gamme (LET/GET)
Property Let Gamme(Valeur As String)
c_strGamme = Valeur
End Property
Property Get Gamme() As String
Gamme = c_strGamme
End Property
' === Produit (LET/GET)
Property Let Produit(Valeur As String)
c_strProduit = Valeur
End Property
Property Get Produit() As String
Produit = c_strProduit
End Property
' === Code Filière (LET/GET)
Property Let CodeFiliere(Valeur As String)
c_strCodeFiliere = Valeur
CorrigerVolumetrie
End Property
Property Get CodeFiliere() As String
CodeFiliere = c_strCodeFiliere
End Property
' === Remise en poste - Date de fin prévue (LET/GET)
Property Let DepotFinPrevu(Valeur As Variant)
' Alimentée lorsque toutes les dates de fin sont renseignées pour les mailles de suivi.
' Elle correspond à la plus grande des dates de fin des mailles de suivi.
If IsDate(Valeur) Then
If c_vntDepotFinPrevu = Empty Then
c_vntDepotFinPrevu = Valeur
Else
If c_vntDepotFinPrevu < Valeur Then
c_vntDepotFinPrevu = Valeur
End If
End If
Else
Me.DepotFinPrevuOK = False
End If
End Property
Property Get DepotFinPrevu() As Variant
If c_blnDepotFinPrevuOK And c_vntDepotFinPrevu <> Empty Then
' Toutes les dates de fin sont renseignées
DepotFinPrevu = c_vntDepotFinPrevu
Else
DepotFinPrevu = Empty
End If
End Property
' === Remise en poste - Indicateur Date de fin prévue renseignée (LET/GET)
Property Let DepotFinPrevuOK(Indicateur As Boolean)
c_blnDepotFinPrevuOK = Indicateur
End Property
Property Get DepotFinPrevuOK() As Boolean
DepotFinPrevuOK = c_blnDepotFinPrevuOK
End Property
' === Remise en poste - Date de début réelle (LET/GET)
Property Let DepotDebutReel(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour une maille de suivi.
' Elle correspond à la plus petite des dates de début des mailles de suivi.
If IsDate(Valeur) Then
If c_vntDepotDebutReel = Empty Then
c_vntDepotDebutReel = Valeur
Else
If Valeur < c_vntDepotDebutReel Then
c_vntDepotDebutReel = Valeur
End If
End If
End If
End Property
Property Get DepotDebutReel() As Variant
If c_vntDepotDebutReel = Empty Then
DepotDebutReel = Empty
Else
DepotDebutReel = c_vntDepotDebutReel
End If
End Property
' === Remise en poste - Date de fin réelle (LET/GET)
Property Let DepotFinReel(Valeur As Variant)
' Alimentée lorsque toutes les dates de fin sont renseignées pour les mailles de suivi.
' Elle correspond à la plus grande des dates de fin des mailles de suivi.
If IsDate(Valeur) Then
If c_vntDepotFinReel = Empty Then
c_vntDepotFinReel = Valeur
Else
If c_vntDepotFinReel < Valeur Then
c_vntDepotFinReel = Valeur
End If
End If
Else
Me.DepotFinReelOK = False
End If
End Property
Property Get DepotFinReel() As Variant
If c_blnDepotFinReelOK And c_vntDepotFinReel <> Empty Then
' Toutes les dates de fin sont renseignées
DepotFinReel = c_vntDepotFinReel
Else
DepotFinReel = Empty
End If
End Property
' === Remise en poste - Indicateur Date de fin réelle renseignée (LET/GET)
Property Let DepotFinReelOK(Indicateur As Boolean)
c_blnDepotFinReelOK = Indicateur
End Property
Property Get DepotFinReelOK() As Boolean
DepotFinReelOK = c_blnDepotFinReelOK
End Property
' === Nombre de pages estimé (LET/GET / SET)
Property Let NbPagesEstime(Nombre As Long)
c_lngNbPagesEstime = c_lngNbPagesEstime + Nombre
End Property
Property Get NbPagesEstime() As Long
NbPagesEstime = c_lngNbPagesEstime
End Property
Sub SetNbPagesEstime(Nombre As Long)
c_lngNbPagesEstime = Nombre
End Sub
' === Nombre de pages attendu (LET/GET / SET)
Property Let NbPagesAttendu(Nombre As Long)
c_lngNbPagesAttendu = c_lngNbPagesAttendu + Nombre
End Property
Property Get NbPagesAttendu() As Long
NbPagesAttendu = c_lngNbPagesAttendu
End Property
Sub SetNbPagesAttendu(Nombre As Long)
c_lngNbPagesAttendu = Nombre
End Sub
' === Edition - Nombre de pages réalisées (LET/GET / SET)
Property Let EditionNbPagesRealise(Nombre As Long)
c_lngEditionNbPagesRealise = c_lngEditionNbPagesRealise + Nombre
End Property
Property Get EditionNbPagesRealise() As Long
EditionNbPagesRealise = c_lngEditionNbPagesRealise
End Property
Sub SetEditionNbPagesRealise(Nombre As Long)
c_lngEditionNbPagesRealise = Nombre
End Sub
' === Nombre de plis estimé (LET/GET / SET)
Property Let NbPlisEstime(Nombre As Long)
c_lngNbPlisEstime = c_lngNbPlisEstime + Nombre
End Property
Property Get NbPlisEstime() As Long
NbPlisEstime = c_lngNbPlisEstime
End Property
Sub SetNbPlisEstime(Nombre As Long)
c_lngNbPlisEstime = Nombre
End Sub
' === Nombre de plis attendu (LET/GET / SET)
Property Let NbPlisAttendu(Nombre As Long)
c_lngNbPlisAttendu = c_lngNbPlisAttendu + Nombre
End Property
Property Get NbPlisAttendu() As Long
NbPlisAttendu = c_lngNbPlisAttendu
End Property
Sub SetNbPlisAttendu(Nombre As Long)
c_lngNbPlisAttendu = Nombre
End Sub
' === Mise sous plis - Nombre de plis réalisé (LET/GET / SET)
Property Let PlisNbPlisRealise(Nombre As Long)
c_lngPlisNbPlisRealise = c_lngPlisNbPlisRealise + Nombre
End Property
Property Get PlisNbPlisRealise() As Long
PlisNbPlisRealise = c_lngPlisNbPlisRealise
End Property
Sub SetPlisNbPlisRealise(Nombre As Long)
c_lngPlisNbPlisRealise = Nombre
End Sub
' === Remise en poste - Nombre de plis réel (LET/GET / SET)
Property Let DepotNbPlisReel(Nombre As Long)
c_lngDepotNbPlisReel = c_lngDepotNbPlisReel + Nombre
End Property
Property Get DepotNbPlisReel() As Long
If Me.PlisNbPlisRealise < c_lngDepotNbPlisReel Then
DepotNbPlisReel = Me.PlisNbPlisRealise
Else
DepotNbPlisReel = c_lngDepotNbPlisReel
End If
End Property
Sub SetDepotNbPlisReel(Nombre As Long)
c_lngDepotNbPlisReel = Nombre
End Sub
' === Pourcentage d'avancement de l'édition (LET/GET)
Property Let AvancementEdition(Nombre As Double)
c_dblAvancementEdition = Nombre
End Property
Property Get AvancementEdition() As Double
AvancementEdition = c_dblAvancementEdition
End Property
' === Pourcentage d'avancement de la mise sous plis (LET/GET)
Property Let AvancementMiseSousPlis(Nombre As Double)
c_dblAvancementMiseSousPlis = Nombre
End Property
Property Get AvancementMiseSousPlis() As Double
AvancementMiseSousPlis = c_dblAvancementMiseSousPlis
End Property
' === Pourcentage d'avancement de la remise en poste (LET/GET)
Property Let AvancementRemisePoste(Nombre As Double)
c_dblAvancementRemisePoste = Nombre
End Property
Property Get AvancementRemisePoste() As Double
AvancementRemisePoste = c_dblAvancementRemisePoste
End Property
' === Calcul avec les volumes estimés (LET/GET)
Property Let IsEstimation(Indicateur As Boolean)
c_blnIsEstimation = Indicateur
End Property
Property Get IsEstimation() As Boolean
IsEstimation = c_blnIsEstimation
End Property
' === Présence de reliquats (LET/GET)
Property Let IsReliquats(Indicateur As Boolean)
c_blnIsReliquats = Indicateur
End Property
Property Get IsReliquats() As Boolean
IsReliquats = c_blnIsReliquats
End Property
' === Maille de reporting
Function GetMailleReporting() As String
GetMailleReporting = Me.Reseau & Me.Gamme & Me.Produit
End Function
' === Nb de pages attendu ou estimé
Function GetNbPagesAttenduOuEstime() As Long
If Me.IsEstimation Then
GetNbPagesAttenduOuEstime = Me.NbPagesEstime
Else
GetNbPagesAttenduOuEstime = Me.NbPagesAttendu
End If
End Function
' === Nb de plis attendu ou estimé
Function GetNbPlisAttenduOuEstime() As Long
If Me.IsEstimation Then
GetNbPlisAttenduOuEstime = Me.NbPlisEstime
Else
GetNbPlisAttenduOuEstime = Me.NbPlisAttendu
End If
End Function
' === Calcul des pourcentages d'avancement
Sub CalculerAvancement()
If Me.GetNbPagesAttenduOuEstime <> 0 Then
Me.AvancementEdition = Me.EditionNbPagesRealise / Me.GetNbPagesAttenduOuEstime
Else
Me.AvancementEdition = 0
End If
If Me.GetNbPlisAttenduOuEstime <> 0 Then
Me.AvancementMiseSousPlis = Me.PlisNbPlisRealise / Me.GetNbPlisAttenduOuEstime
Else
Me.AvancementMiseSousPlis = 0
End If
If Me.GetNbPlisAttenduOuEstime <> 0 Then
Me.AvancementRemisePoste = Me.DepotNbPlisReel / Me.GetNbPlisAttenduOuEstime
Else
Me.AvancementRemisePoste = 0
End If
End Sub
Sub AjouterDetail(Detail As ReportingDetail)
Me.DepotFinPrevu = Detail.DepotFinPrevu
Me.DepotDebutReel = Detail.DepotDebutReel
Me.DepotFinReel = Detail.DepotFinReel
Me.NbPagesEstime = Detail.NbPagesEstime
Me.NbPagesAttendu = Detail.NbPagesAttendu
Me.EditionNbPagesRealise = Detail.EditionNbPagesRealise
Me.NbPlisEstime = Detail.NbPlisEstime
Me.NbPlisAttendu = Detail.NbPlisAttendu
Me.PlisNbPlisRealise = Detail.PlisNbPlisRealise
Me.DepotNbPlisReel = Detail.DepotNbPlisReel
End Sub
Private Sub CorrigerVolumetrie()
If dicDonneesExternes.Exists(Me.CodeFiliere) Then
If dicDonneesExternes(Me.CodeFiliere).VolumetriePrevue = "O" Then
Me.IsEstimation = True
Else
Me.IsEstimation = False
End If
If dicDonneesExternes(Me.CodeFiliere).Reliquats = "O" Then
Me.IsReliquats = True
Else
Me.IsReliquats = False
End If
End If
End Sub
Private Sub Class_Initialize()
Me.DepotFinPrevuOK = True
Me.DepotFinReelOK = True
Me.IsEstimation = False
Me.IsReliquats = False
End Sub
Attribute VB_Name = "SuiviConso"
Attribute VB_Base = "0{FCFB3D2A-A0FA-1068-A738-08002B3371B5}"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_TemplateDerived = False
Attribute VB_Customizable = False
Option Explicit
Private c_strChaine As String
Private c_strCodeFiliere As String
Private c_strVersion As String
Private c_datDateMaj As Date
Private c_vntPilDateHeureFluxDispo As Variant
Private c_vntFeuVertPDK As Variant
Private c_lngNbPagesAttendu As Long
Private c_lngNbPlisAttendu As Long
' Suivi de l'édition
Private c_dicEditionSiteProduction As Object
Private c_lngEditionNbPagesRealise As Long
Private c_vntEditionDebutPrevu As Variant
Private c_vntEditionDebutReel As Variant
Private c_vntEditionFinReel As Variant
Private c_blnEditionFinReelOK As Boolean
' Suivi de la mise sous plis
Private c_lngPlisNbPlisRealise As Long
Private c_vntPlisDebutPrevu As Variant
Private c_vntPlisDebutReel As Variant
Private c_vntPlisFinReel As Variant
Private c_blnPlisFinReelOK As Boolean
Private c_lngPlisBAC1NbAnnexes As Long
Private c_lngPlisBAC2NbAnnexes As Long
Private c_lngPlisBAC3NbAnnexes As Long
Private c_lngPlisBAC4NbAnnexes As Long
Private c_dicPlisBAC1CodeAnnexe As Object
Private c_dicPlisBAC2CodeAnnexe As Object
Private c_dicPlisBAC3CodeAnnexe As Object
Private c_dicPlisBAC4CodeAnnexe As Object
' Suivi de la remise en Depot
'## Maj TFA 2009
'Private c_lngDepotNbPlisRealise As Long
Private c_lngDepotNbPlisPrevu As Long
Private c_lngDepotNbPlisReel As Long
'## Fin Maj TFA 2009
Private c_vntDepotDebutPrevu As Variant ' ## Maj TFA 2009
Private c_vntDepotFinPrevu As Variant
Private c_blnDepotFinPrevuOK As Boolean
Private c_vntDepotDebutReel As Variant
Private c_vntDepotFinReel As Variant
Private c_blnDepotFinReelOK As Boolean
Private c_blnIsAnnulationPartielle As Boolean ' Au moins un fichier annulé
Private c_blnIsAnnulationComplete As Boolean ' Tous les fichiers annulés
' === Chaîne (LET/GET)
Property Let Chaine(Valeur As String)
c_strChaine = Valeur
End Property
Property Get Chaine() As String
Chaine = c_strChaine
End Property
' === Code filière (LET/GET)
Property Let CodeFiliere(Valeur As String)
c_strCodeFiliere = Valeur
End Property
Property Get CodeFiliere() As String
CodeFiliere = c_strCodeFiliere
End Property
' === Version (LET/GET)
Property Let Version(Valeur As String)
c_strVersion = Valeur
End Property
Property Get Version() As String
Version = c_strVersion
End Property
' === Date de mise à jour (LET/GET)
Property Let DateMaj(Valeur As Variant)
If IsDate(Valeur) Then
If c_datDateMaj = Empty Then
c_datDateMaj = Valeur
Else
If c_datDateMaj < Valeur Then
c_datDateMaj = Valeur
End If
End If
End If
End Property
Property Get DateMaj() As Variant
If c_datDateMaj = Empty Then
DateMaj = Empty
Else
DateMaj = c_datDateMaj
End If
End Property
' === Date M.A.D. du flux sur l'outil de pilotage (LET/GET)
Property Let PilDateHeureFluxDispo(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntPilDateHeureFluxDispo = Empty Then
c_vntPilDateHeureFluxDispo = Valeur
Else
If Valeur < c_vntPilDateHeureFluxDispo Then
c_vntPilDateHeureFluxDispo = Valeur
End If
End If
End If
End Property
Property Get PilDateHeureFluxDispo() As Variant
If c_vntPilDateHeureFluxDispo = Empty Then
PilDateHeureFluxDispo = Empty
Else
PilDateHeureFluxDispo = c_vntPilDateHeureFluxDispo
End If
End Property
' === Feu vert Predica pour la production (LET/GET)
Property Let FeuVertPDK(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntFeuVertPDK = Empty Then
c_vntFeuVertPDK = Valeur
Else
If Valeur < c_vntFeuVertPDK Then
c_vntFeuVertPDK = Valeur
End If
End If
End If
End Property
Property Get FeuVertPDK() As Variant
If c_vntFeuVertPDK = Empty Then
FeuVertPDK = Empty
Else
FeuVertPDK = c_vntFeuVertPDK
End If
End Property
' === Nombre de pages attendu (LET/GET)
Property Let NbPagesAttendu(Nombre As Long)
c_lngNbPagesAttendu = c_lngNbPagesAttendu + Nombre
End Property
Property Get NbPagesAttendu() As Long
NbPagesAttendu = c_lngNbPagesAttendu
End Property
' === Nombre de plis attendu (LET/GET)
Property Let NbPlisAttendu(Nombre As Long)
c_lngNbPlisAttendu = c_lngNbPlisAttendu + Nombre
End Property
Property Get NbPlisAttendu() As Long
NbPlisAttendu = c_lngNbPlisAttendu
End Property
' === Site d'édition (SET/GET)
Sub SetEditionSiteProduction(Valeur As String)
If Valeur <> Empty Then
If Not (c_dicEditionSiteProduction.Exists(Valeur)) Then
c_dicEditionSiteProduction.Add Item:=Valeur, Key:=Valeur
End If
End If
End Sub
Function GetEditionSiteProduction() As String
Dim vntEditionSiteProductionTab As Variant
Dim i As Integer
GetEditionSiteProduction = Empty
vntEditionSiteProductionTab = c_dicEditionSiteProduction.Keys
If c_dicEditionSiteProduction.Count > 0 Then
For i = 0 To c_dicEditionSiteProduction.Count - 1
If i > 0 Then
GetEditionSiteProduction = GetEditionSiteProduction & vbLf
End If
GetEditionSiteProduction = GetEditionSiteProduction & c_dicEditionSiteProduction(vntEditionSiteProductionTab(i))
Next
End If
End Function
' === Edition - Nombre de pages réalisées (LET/GET)
Property Let EditionNbPagesRealise(Nombre As Long)
c_lngEditionNbPagesRealise = c_lngEditionNbPagesRealise + Nombre
End Property
Property Get EditionNbPagesRealise() As Long
EditionNbPagesRealise = c_lngEditionNbPagesRealise
End Property
' === Edition - Date de début prévu (LET/GET)
Property Let EditionDebutPrevu(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntEditionDebutPrevu = Empty Then
c_vntEditionDebutPrevu = Valeur
Else
If Valeur < c_vntEditionDebutPrevu Then
c_vntEditionDebutPrevu = Valeur
End If
End If
End If
End Property
Property Get EditionDebutPrevu() As Variant
If c_vntEditionDebutPrevu = Empty Then
EditionDebutPrevu = Empty
Else
EditionDebutPrevu = c_vntEditionDebutPrevu
End If
End Property
' === Edition - Date de début réelle (LET/GET)
Property Let EditionDebutReel(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntEditionDebutReel = Empty Then
c_vntEditionDebutReel = Valeur
Else
If Valeur < c_vntEditionDebutReel Then
c_vntEditionDebutReel = Valeur
End If
End If
End If
End Property
Property Get EditionDebutReel() As Variant
If c_vntEditionDebutReel = Empty Then
EditionDebutReel = Empty
Else
EditionDebutReel = c_vntEditionDebutReel
End If
End Property
' === Edition - Date de fin (LET/GET)
Property Let EditionFinReel(Valeur As Variant)
' Alimentée lorsque toutes les dates de fin sont renseignées pour les fichiers à consolider.
' Elle correspond à la plus grande des dates de fin des fichiers à consolider.
If IsDate(Valeur) Then
If c_vntEditionFinReel = Empty Then
c_vntEditionFinReel = Valeur
Else
If c_vntEditionFinReel < Valeur Then
c_vntEditionFinReel = Valeur
End If
End If
Else
c_blnEditionFinReelOK = False
End If
End Property
Property Get EditionFinReel() As Variant
If c_blnEditionFinReelOK And c_vntEditionFinReel <> Empty And Me.EditionNbPagesRealise = Me.NbPagesAttendu Then
' Toutes les dates de fin sont renseignées et le volumé réalisé correspond au volume attendu
EditionFinReel = c_vntEditionFinReel
Else
EditionFinReel = Empty
End If
End Property
' === Mise sous plis - Nombre de plis réalisé (LET/GET)
Property Let PlisNbPlisRealise(Nombre As Long)
c_lngPlisNbPlisRealise = c_lngPlisNbPlisRealise + Nombre
End Property
Property Get PlisNbPlisRealise() As Long
PlisNbPlisRealise = c_lngPlisNbPlisRealise
End Property
' === Mise sous plis - Date de début prévue (LET/GET)
Property Let PlisDebutPrevu(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntPlisDebutPrevu = Empty Then
c_vntPlisDebutPrevu = Valeur
Else
If Valeur < c_vntPlisDebutPrevu Then
c_vntPlisDebutPrevu = Valeur
End If
End If
End If
End Property
Property Get PlisDebutPrevu() As Variant
If c_vntPlisDebutPrevu = Empty Then
PlisDebutPrevu = Empty
Else
PlisDebutPrevu = c_vntPlisDebutPrevu
End If
End Property
' === Mise sous plis - Date de début réelle (LET/GET)
Property Let PlisDebutReel(Valeur As Variant)
' Alimentée lorsqu'au moins une date de début est renseignée pour l'un des fichiers à consolider.
' Elle correspond à la plus petite des dates de début des fichiers à consolider
If IsDate(Valeur) Then
If c_vntPlisDebutReel = Empty Then
c_vntPlisDebutReel = Valeur
Else
If Valeur < c_vntPlisDebutReel Then
c_vntPlisDebutReel = Valeur
End If
End If
End If
End Property
Property Get PlisDebutReel() As Variant
If c_vntPlisDebutReel = Empty Then
PlisDebutReel = Empty
Else
PlisDebutReel = c_vntPlisDebutReel
End If
End Property
' === Mise sous plis - Date de fin (LET/GET)
Property Let PlisFinReel(Valeur As Variant)
' Alimentée lorsque toutes les dates de fin sont renseignées pour les fichiers à consolider.
' Elle correspond à la plus grande des dates de fin des fichiers à consolider.
If IsDate(Valeur) Then
If c_vntPlisFinReel = Empty Then
c_vntPlisFinReel = Valeur
Else
If c_vntPlisFinReel < Valeur Then
c_vntPlisFinReel = Valeur
End If
End If
Else
c_blnPlisFinReelOK = False
End If
End Property
Property Get PlisFinReel() As Variant
If c_blnPlisFinReelOK And c_vntPlisFinReel <> Empty And Me.PlisNbPlisRealise = Me.NbPlisAttendu Then
' Toutes les dates de fin sont renseignées et le volumé réalisé correspond au volume attendu
PlisFinReel = c_vntPlisFinReel
Else
PlisFinReel = Empty
End If
End Property
' === Mise sous plis - BAC 1 Nombre d'annexes (LET/GET)
Property Let PlisBAC1NbAnnexes(Nombre As Long)
c_lngPlisBAC1NbAnnexes = c_lngPlisBAC1NbAnnexes + Nombre
End Property
Property Get PlisBAC1NbAnnexes() As Long
PlisBAC1NbAnnexes = c_lngPlisBAC1NbAnnexes
End Property
' === Mise sous plis - BAC 2 Nombre d'annexes (LET/GET)
Property Let PlisBAC2NbAnnexes(Nombre As Long)
c_lngPlisBAC2NbAnnexes = c_lngPlisBAC2NbAnnexes + Nombre
End Property
Property Get PlisBAC2NbAnnexes() As Long
PlisBAC2NbAnnexes = c_lngPlisBAC2NbAnnexes
End Property
' === Mise sous plis - BAC 3 Nombre d'annexes (LET/GET)
Property Let PlisBAC3NbAnnexes(Nombre As Long)
c_lngPlisBAC3NbAnnexes = c_lngPlisBAC3NbAnnexes + Nombre
End Property
Property Get PlisBAC3NbAnnexes() As Long
PlisBAC3NbAnnexes = c_lngPlisBAC3NbAnnexes
End Property
' === Mise sous plis - BAC 4 Nombre d'annexes (LET/GET)
Property Let PlisBAC4NbAnnexes(Nombre As Long)
c_lngPlisBAC4NbAnnexes = c_lngPlisBAC4NbAnnexes + Nombre
End Property
Property Get PlisBAC4NbAnnexes() As Long
PlisBAC4NbAnnexes = c_lngPlisBAC4NbAnnexes
End Property
' === Mise sous plis - BAC 1 Code annexe (SET/GET)
Sub SetPlisBAC1CodeAnnexe(Valeur As String)
If Valeur <> Empty Then
If Not (c_dicPlisBAC1CodeAnnexe.Exists(Valeur)) Then
c_dicPlisBAC1CodeAnnexe.Add Item:=Valeur, Key:=Valeur
End If
End If
End Sub
Function PlisBAC1CodeAnnexe() As String
Dim vntPlisBAC1CodeAnnexeTab As Variant
Dim i As Integer
PlisBAC1CodeAnnexe = Empty
vntPlisBAC1CodeAnnexeTab = c_dicPlisBAC1CodeAnnexe.Keys
If c_dicPlisBAC1CodeAnnexe.Count > 0 Then
For i = 0 To c_dicPlisBAC1CodeAnnexe.Count - 1
If i > 0 Then
PlisBAC1CodeAnnexe = PlisBAC1CodeAnnexe & vbLf
End If
PlisBAC1CodeAnnexe = PlisBAC1CodeAnnexe & c_dicPlisBAC1CodeAnnexe(vntPlisBAC1CodeAnnexeTab(i))
Next
End If
End Function
' === Mise sous plis - BAC 2 Code annexe (SET/GET)
Sub SetPlisBAC2CodeAnnexe(Valeur As String)
If Valeur <> Empty Then
If Not (c_dicPlisBAC2CodeAnnexe.Exists(Valeur)) Then
c_dicPlisBAC2CodeAnnexe.Add Item:=Valeur, Key:=Valeur
End If
End If
End Sub
Function PlisBAC2CodeAnnexe() As String
Dim vntPlisBAC2CodeAnnexeTab As Variant
Dim i As Integer
PlisBAC2CodeAnnexe = Empty
vntPlisBAC2CodeAnnexeTab = c_dicPlisBAC2CodeAnnexe.Keys
If c_dicPlisBAC2CodeAnnexe.Count > 0 Then
For i = 0 To c_dicPlisBAC2CodeAnnexe.Count - 1
If i > 0 Then
PlisBAC2CodeAnnexe = PlisBAC2CodeAnnexe & vbLf
End If
PlisBAC2CodeAnnexe = PlisBAC2CodeAnnexe & c_dicPlisBAC2CodeAnnexe(vntPlisBAC2CodeAnnexeTab(i))
Next
End If
End Function
' === Mise sous plis - BAC 3 Code annexe (SET/GET)
Sub SetPlisBAC3CodeAnnexe(Valeur As String)
If Valeur <> Empty Then
If Not (c_dicPlisBAC3CodeAnnexe.Exists(Valeur)) Then
c_dicPlisBAC3CodeAnnexe.Add Item:=Valeur, Key:=Valeur
End If
End If
End Sub
Function PlisBAC3CodeAnnexe() As String
Dim vntPlisBAC3CodeAnnexeTab As Variant
Dim i As Integer
PlisBAC3CodeAnnexe = Empty
vntPlisBAC3CodeAnnexeTab = c_dicPlisBAC3CodeAnnexe.Keys
If c_dicPlisBAC3CodeAnnexe.Count > 0 Then
For i = 0 To c_dicPlisBAC3CodeAnnexe.Count - 1
If i > 0 Then
PlisBAC3CodeAnnexe = PlisBAC3CodeAnnexe & vbLf
End If
PlisBAC3CodeAnnexe = PlisBAC3CodeAnnexe & c_dicPlisBAC3CodeAnnexe(vntPlisBAC3CodeAnnexeTab(i))
Next
End If
End Function
' === Mise sous plis - BAC 4 Code annexe (SET/GET)
Sub SetPlisBAC4CodeAnnexe(Valeur As String)
If Valeur <> Empty Then
If Not (c_dicPlisBAC4CodeAnnexe.Exists(Valeur)) Then
c_dicPlisBAC4CodeAnnexe.Add Item:=Valeur, Key:=Valeur
End If
End If
End Sub
Function PlisBAC4CodeAnnexe() As String
Dim vntPlisBAC4CodeAnnexeTab As Variant
Dim i As Integer
PlisBAC4CodeAnnexe = Empty
vntPlisBAC4CodeAnnexeTab = c_dicPlisBAC4CodeAnnexe.Keys
…
|
|||
Open this report in the interactive analyzer, or submit your own file for analysis.