Bonjour à toutes et tous !

comme indiqué dans le titre, je butte sur un problème de déclaration conditionnelle...

Ce que j'entends par là ?

D'abord, le contexte dans lequel j'ai besoin de la réponse :
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
19
20
21
22
23
24
25
26
Public Sub ModifierProprieteBdd(ByVal strNomPropriete As String, _
                                ByVal intTypeVariable As Variant, _
                                ByVal varValeur As Variant, _
                                Optional ByVal strCheminCompletBaseAccess As String)
 
' Permet de modifier les propriétés d'une base Access.
' Si la propriété n'existe pas, elle est ajoutée à la base.
 
    #If strCheminCompletBaseAccess = "" Then
        Dim Db As DAO.Database
    #Else
        Dim Db As Access.Application
    #End If
 
    If strCheminCompletBaseAccess = "" Then
        Set Db = CurrentDb
    Else
        Set Db = New Access.Application
        On Error GoTo Erreur_BddIntrouvable
            Db.OpenCurrentDatabase (strCheminCompletBaseAccess)
        On Error GoTo 0
    End If
 
    Code trouvé ici et en cours de personalisation
 
End Sub
En fait, je me demandais s'il fallait faire une déclaration pré-compilation ou non.

J'ai donc testé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Sub TestDim(strCas As String)
    If strCas = "t" Then
        Dim varValeur As String
        Debug.Print "Cas 1 : strCas = " & strCas
    Else
        Dim varValeur As Integer
        Debug.Print "Cas 2 : strCas = " & strCas
    End If
    Debug.Print strCas & " -> " & VarType(varValeur)
End Sub
Résultat :
Erreur de compilation :

Déclaration existante dans la portée en cours
ce qui semble évident.

J'ai donc ensuite essayé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Sub TestDim(strCas As String)
    #If strCas = "t" Then
        Dim varValeur As String
        Debug.Print "Cas 1 : strCas = " & strCas
    #Else
        Dim varValeur As Integer
        Debug.Print "Cas 2 : strCas = " & strCas
    #End If
    Debug.Print strCas & " -> " & VarType(varValeur)
End Sub
qui me renvoie :
TestDim("t")
Cas 2 : strCas = t
t -> 2
Il a bu... ou il doit boire ???
Selon toute évidence, il passe bien par la condition précompilation, mais il semblerait qu'il ne "voit pas" la variable passée en paramètre...

Quelqu'un peut-il m'expliquer ce qui se passe, et éventuellement me donner un tuyau pour mon code tout en haut ?
Notez que j'ai déjà envisagé de découper ma routine en 3 (la première teste la présence d'un chemin de base et appelle la seconde ou la troisième selon le cas), mais je trouve ça "pas propre", "pas logique", et "pas normal".
Après, j'ai aussi imaginé 2 variables et deux codes en fonction de la présence du chemin, mais j'ai trouvé ça presque aussi bof que l'idée précédente parce que trop encombrant pour rien...

En clair, j'aimerai vraiment pouvoir faire une déclaration conditionnelle de variable !


Je remercie donc chaleureusement et par avance quiconque pourra m'éclairer !

Cordialement,
Eric.