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 :
En fait, je me demandais s'il fallait faire une déclaration pré-compilation ou non.
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
J'ai donc testé :
Résultat :
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
ce qui semble évident.Erreur de compilation :
Déclaration existante dans la portée en cours
J'ai donc ensuite essayé :
qui me renvoie :
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
TestDim("t")
Cas 2 : strCas = t
t -> 2Il 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.







Répondre avec citation
Partager