Attribute VB_Name = "Factory"
Attribute VB_Description = "Module de gestion pour les patterns Factory"
'@Folder "System"
Option Explicit

' -----------------DESCRIPTION-------------------------------------
' Module : [Factory]
' Description : Toutes les procédures et fonctions utiles à la gestion des zones de liste et zones de listes modifiables.
' Auteur : Jean-Paul Grumel (Valtrase)
' Date de Création :
' Dernière Modification : 27/11/2025
' Version : 1.2

' -----------------------------------------------------------------
' Clause de Redistribution et d'Utilisation
' -----------------------------------------------------------------
'
' Ce code est fourni **à titre d'exemple** et est destiné à des fins
' éducatives ou d'illustration uniquement.
'
' **Redistribution :**
' Vous avez la permission de redistribuer, modifier et utiliser ce code
' dans vos projets.
'
' **Attribution :**
' Toute redistribution ou utilisation substantielle de ce code doit
' impérativement **citer l'auteur original Jean-Paul Grumel (Valtrase)**.
'
' **Clause de Non-Responsabilité :**
' Ce code est fourni "tel quel", sans garantie d'aucune sorte, expresse
' ou implicite, y compris, mais sans s'y limiter, les garanties de
' qualité marchande, d'adéquation à un usage particulier et de non-
' contrefaçon. L'auteur ne sera en aucun cas responsable de tout
' dommage direct, indirect, spécial, accessoire ou consécutif découlant
' de l'utilisation ou de l'incapacité d'utiliser le code.
'
' -----------------------------------------------------------------


' -----------------CONSTANTES POUR LA GESTION DES PARAMETRES-------
Public Const SETTINGS_COL_KEYS_NAME As String = "Keys"
Public Const SETTINGS_COL_VALUES_NAME As String = "Values"
Public Const SETTINGS_COL_INITIALVALUES_NAME As String = "Initial values"
Public Const SETTINGS_COL_NOTES_NAME As String = "Notes"

' -----------------CONSTANTES POUR LA GESTION DES DONNEES----------



'@Description "Retourne un objet ListObject s'il existe sinon retourne Nothing"
Private Function getListObject( _
        ByVal ListName As String, _
        Optional ByVal Workbook As Excel.Workbook _
        ) As Excel.ListObject

    Dim localWorkbook As Excel.Workbook
    Set localWorkbook = Workbook
    If localWorkbook Is Nothing Then Set localWorkbook = ThisWorkbook
    
    With localWorkbook
        Do
            Dim CounterSheets As Integer
            CounterSheets = CounterSheets + 1
            Dim CounterListObjects As Integer: CounterListObjects = 0
            With .Worksheets(CounterSheets)
                Do While CounterListObjects < .ListObjects.Count And getListObject Is Nothing
                    CounterListObjects = CounterListObjects + 1
                    If StrComp(ListName, .ListObjects(CounterListObjects).Name, vbTextCompare) = 0 Then Set getListObject = .ListObjects(CounterListObjects)
                Loop
            End With
        Loop While CounterSheets < .Worksheets.Count And getListObject Is Nothing
    End With
End Function

'@Description "Initialise le tableau des paramètres."
Public Function InitTabSettings( _
       Optional ByVal Reset As Boolean _
       ) As ListObject
    
    Static item As ListObject
    If item Is Nothing Or Reset Then
        Set item = getListObject("vt_Settings")
    End If
    Set InitTabSettings = item
End Function

'@Description "Initialise le tableau des données de base."
Public Function InitTabData( _
       Optional ByVal Reset As Boolean _
       ) As ListObject
    
    Static item As ListObject
    If item Is Nothing Or Reset Then
        Set item = getListObject("vt_Data")
    End If
    Set InitTabData = item
End Function




