Qu'est-ce qu'une bonne pratique et une bonne hygiène du code? Mettre du code dans des modules ou des feuilles?
J'ai ce classeur Excel, avec des interfaces utilisateur dans chaque feuille. Chaque feuille du classeur effectue une partie différente d'une tâche globale. Dois-je placer le code correspondant à chaque feuille à l'intérieur des objets Feuille ou dans les modules? Regroupez-vous en un seul module ou en modules séparés?
J'utilise Excel 2003.
Certainement dans les modules.
Étant donné que l'outillage est si pauvre dans les systèmes primitifs tels que Excel VBA, les meilleures pratiques, l'hygiène obsessionnelle du code et le respect religieux des conventions sont importants, surtout si vous essayez de faire quelque chose de complexe à distance avec lui.
Cet article explique les utilisations prévues de différents types de conteneurs de code. Il ne précise pas pourquoi ces distinctions devraient être faites, mais je crois que la plupart des développeurs qui essaient de développer des applications sérieuses sur la plate-forme Excel les suivent.
Il existe également une liste de conventions de codage VBA que j'ai trouvées utiles, bien qu'elles ne soient pas directement liées à Excel VBA. Veuillez ignorer les conventions de dénomination folles qu'ils ont sur ce site, c'est tout hongrois fou .
D'après mon expérience, il est préférable de mettre autant de code que possible dans des modules bien nommés, et de ne mettre autant de code que nécessaire dans les objets de feuille de calcul réels.
Exemple: tout code qui utilise des événements de feuille de calcul comme Worksheet_SelectionChange ou Worksheet_Calculate.
Je suggérerais de séparer votre code en fonction de la fonctionnalité et du but spécifiques à chaque feuille ou module. De cette manière, vous mettriez uniquement le code relatif à l'interface utilisateur d'une feuille à l'intérieur du module de la feuille et vous ne mettriez que le code lié aux modules dans les modules respectifs. Utilisez également des modules distincts pour encapsuler le code partagé ou réutilisé entre plusieurs feuilles différentes.
Par exemple, disons que vous avez plusieurs feuilles chargées d'afficher les données d'une base de données d'une manière spéciale. Quels types de fonctionnalités avons-nous dans cette situation? Nous avons des fonctionnalités liées à chaque feuille spécifique, des tâches liées à l'obtention de données de la base de données et des tâches liées au remplissage d'une feuille avec des données. Dans ce cas, je pourrais commencer par un module pour l'accès aux données, un module pour remplir une feuille avec des données, et dans chaque feuille, j'aurais du code pour accéder au code dans ces modules.
Cela pourrait être présenté comme ceci.
Module: DataAccess:
Function GetData(strTableName As String, strCondition1 As String) As Recordset
'Code Related to getting data from the database'
End Function
Module: PopulateSheet:
Sub PopulateASheet(wsSheet As Worksheet, rs As Recordset)
'Code to populate a worksheet '
End Function
Feuille: Code Sheet1:
Sub GetDataAndPopulate()
'Sample Code'
Dim rs As New Recordset
Dim ws As Worksheet
Dim strParam As String
Set ws = ActiveSheet
strParam = ws.Range("A1").Value
Set rs = GetData("Orders",strParam)
PopulateASheet ws, rs
End Sub
Sub Button1_Click()
Call GetDataAndPopulate
End Sub