Option explicit

Publié le par Raymond

L’instruction Option Explicit est utilisée au niveau module VBA pour imposer la déclaration explicite de toutes les variables de ce module. Si l'instruction Option Explicit apparaît dans un module, vous devez déclarer explicitement toutes les variables à l'aide des instructions Dim, Private, Public, ReDim ou Static. Si vous tentez d'utiliser un nom de variable non déclarée, une erreur se produit à la compilation.
Si vous n'utilisez pas l'instruction Option Explicit, toutes les variables non déclarées sont de type Variant.
Vous pouvez aussi utiliser l'instruction Option Explicit pour éviter toute faute de frappe lors de la saisie du nom d'une variable existante ou pour écarter tout risque de confusion dans un code où la portée de la variable n'apparaît pas clairement.
Si votre application est de taille importante vous pouvez afficher les formulaires qui ne possèdent pas cette instruction à l’aide de la fonction VBA suivante :
Créer un module standard et placer le code ci-dessous. Ouvrir la fenêtre Exécution. Cliquer n’importe où à l’intérieur de la fonction fExplicit et enfoncer F5. Attendre que « terminé » soit affiché dans la fenêtre exécution.

Option Compare Database
Option Explicit
Dim mdl As Module
Dim lngSLine As Long, lngSCol As Long
Dim lngELine As Long, lngECol As Long
Dim Obj As AccessObject
Dim frm As Form
Public Function fExplicit()
    Debug.Print "Formulaires sans Option Explicit"
    On Error GoTo Err_Explicit
    For Each Obj In CurrentProject.AllForms
        If Left(Obj.Name, 1) <> "~" Then
            DoCmd.OpenForm Obj.Name, acDesign, , , , acHidden
            Set frm = Forms(Obj.Name)
            If frm.HasModule Then
                DoCmd.OpenModule frm.Module.Name
                Set mdl = frm.Module
                lngSLine = 0
                lngSCol = 0
                lngELine = 0
                lngECol = 0
                If Not mdl.Find("Option explicit", lngSLine, lngSCol, lngELine, lngECol) Then
                    Debug.Print "Forms(""" & Obj.Name & """)"
                End If
                DoEvents
                DoCmd.Close acModule, frm.Module.Name
            End If
            DoEvents
            DoCmd.Close acForm, Obj.Name
Err_Explicit:
        End If
        DoEvents
    Next Obj
    Set frm = Nothing
    Debug.Print "terminé"
End Function

Publié dans Astuces

Commenter cet article