Flemmard ! Aucune excuse.Envoyé par Bibicmoi
À propos des déclarations de variables,T'as gagné.Envoyé par Bibicmoi
Option Explicit est un must absolu. On n'est pas là pour faire du vbScript, et la meilleure façon de comprendre à quoi servent les déclarations de variables, c'est précisément d'aller passer un mois (ou + !) sur quelques milliers de lignes en vbScript ! Tu comprendras ta douleur et tu ne te poseras plus jamais la question.
Sinon, d'accord de faire au + simple : toutes les variables locales en tête de procédure. L'ordre alphabétique ??? Bof, je sais pas si ça aide. Comme indiqué + haut, pour savoir le type et la portée d'une variable, Maj+F2 pour y aller, Maj+Ctrl+F2 pour revenir sur la ligne de code, c'est pas sorcier...
Ah, j'en profite pour ajouter :
- sauf cas forcé, mais très rare, je ne déclare jamais aucune variable '... As Variant', ni '... As Object'
- ... As Variant : laisse passer des erreurs de compilation ou de runtime très difficiles à détecter lorsqu'on attend un certain type de données et qu'on en obtient un autre. Surtout du fait que VBA convertit systématiquement les données d'un type en un autre. Donc, même si un paramètre de procédure doit être Variant, par exemple parcequ'il peut être Null ou String, je vérifie toujours le type de Variant. Exemple, dans le module de classe 'Bonhomme' :
- ... As Object : sauf cas impossible ou DLL non typée, dont la doc dit spécifiquement "Vous devez déclarer vos variables 'As Object'". Ce qui n'est pas bon signe quant à l'utilisation d'une telle DLL...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Option Compare Database Option Explicit Dim mNomFamille As Variant Public Property Get NomFamille() As Variant NomFamille = mNomFamille End Property Public Property Let NomFamille(ByVal NewNomFamille As Variant) If Not IsNull(NewNomFamille) Then If VarType(NewNomFamille) <> vbString Then Err.Raise vbObjectError + flerrTypeIncompatible, _ "Let NomFamille", "Le nom de famille doit être une chaîne de caractères." '========================================= End If End If mNomFamille = NewNomFamille End Property
Je dirais même plus : non seulement déclarer chaque objet '... As ObjetSpécifique', mais toujours indiquer la librairie qui contient l'objet. Exemple :
etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim rsBonshommes As DAO.Recordset 'ou bien, selon le choix de méthode Dim rsBonshommes As ADODB.Recordset 'mai jamais, au grand jamais : Dim rsBonshommes As Recordset 'De même : Dim Classeur As Excel.Workbook Dim Feuill1 As Excel.Spreadsheet
Ça évite pas mal de confusions, surtout bien sûr, lorsqu'on travaille à plusieurs. Il y a beaucoup plus de possibilités d'erreurs qu'on ne pense : Outlook.AddressEntry ou CDO.AddressEntry ? Donc, soyons aussi précis que possible !
Partager