Bonjour,

J'ai un code qui fonctionne et une autre version qui ne fonctionne mais je n'arrive pas à comprendre pourquoi ...
En fait, j'essaye de récupérer des valeurs de variables que je spécifie dans un onglet dédié pour ne pas mettre en dur dans mon code mes variables. En l'occurence, la fonction ci dessous récupère le nom d'une colonne dans un onglet "ListeVariablesVBA" puis retourne la colonne de l'onglet "Demande de Prestation" possédant ce titre de colonne...

Ex: Je cherche où se situe la colonne date dans "Demande de prestation", je vais faire return_colonne("V_DATE"), la fonction va chercher la variable V_DATE dans l'onglet listant les variables VBA nommé "ListeVariablesVBA", il récupère la valeur de la variable (ex: 19/08/1982), cherche cette valeur dans l'onglet "Demande de prestation" puis retourne la colonne associée.

Le problème est le suivant: pour faire une recherche dans l'onglet "ListeVariablesVBA", je suis obligé de l'activer puis revenir sur mon onglet courant, ce qui fait assez moche à l'écran puisqu'on voit le passage d'un onglet à un autre ... du coup, j'aimerais qu'il récupère les valeurs automatiquement sans sélectionner l'onglet "ListeVariablesVBA".

Pour info, mon onglet ListeVariablesVBA est très basique et est structuré de la façon suivante:
Colonne A            Colonne B
Nom Variable        Valeur Variable
V_TOTO              Valeur de V_TOTO

Ainsi voici le code de ma fonction qui fonctionne mais assez moche à l'écran :
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
27
28
29
30
31
32
33
34
35
  Function return_colonne(var) As String
 
Dim celluleVariable As Range
    Dim columnSelected As Range
    Dim titreColonne As String
 
 
    Sheets("ListeVariablesVBA").Select
 
    Set celluleVariable = Range("A3:A300").Find(var, lookat:=xlWhole)
    MsgBox celluleVariable
    If celluleVariable Is Nothing Then
        MsgBox ("variable " & var & " non trouvée dans la liste des références")
        Exit Function
    End If
 
    titreColonne = Cells(celluleVariable.Row, celluleVariable.Column + 1).Value
    MsgBox titreColonne  
 
 
    ' ******************* Récupération du numéro de la colonne possédant la colonne associée **************************
    Sheets("Demande de Prestation").Select
 
    ' option LookIn:=xlValues permet de retourner la valeur d'une formule. Par défaut, find retourne la formule
    Set columnSelected = Range("A4:DD4").Find(titreColonne, lookat:=xlWhole, LookIn:=xlValues)
 
 
    If columnSelected Is Nothing Then
        MsgBox ("Colonne " & titreColonne & " non trouvée dans la liste des références")
        Exit Function
    End If
 
    return_colonne = NumCol2Lettre(columnSelected.Column)
 
End Function
Voici le code qui ne fonctionne pas (j'ai l'impression qu'il récupère bien le nom de ma variable mais pas la valeur associée ...):
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
27
28
29
30
31
32
33
34
35
36
37
Function return_colonne(var) As String
 
Dim celluleVariable As Range
    Dim columnSelected As Range
    Dim titreColonne As String
 
 
    ' ******************* Récupération du titre liée à la variable **************************
 
 
    Set celluleVariable = Sheets("ListeVariablesVBA").Range("A3:A300").Find(var, lookat:=xlWhole)
    'Retourne bien celluleVariable 
    MsgBox celluleVariable
 
    If celluleVariable Is Nothing Then
        MsgBox ("variable " & var & " non trouvée dans la liste des références")
        Exit Function
    End If
 
    titreColonne = Cells(celluleVariable.Row, celluleVariable.Column + 1).Value
    'titreColonne ne retourne plus rien ...
    MsgBox titreColonne
 
 
    ' ******************* Récupération du numéro de la colonne possédant la colonne associée **************************
 
    ' option LookIn:=xlValues permet de retourner la valeur d'une formule. Par défaut, find retourne la formule
    Set columnSelected = Sheets("Demande de Prestation").Range("A4:DD4").Find(titreColonne, lookat:=xlWhole, LookIn:=xlValues)
 
 
    If columnSelected Is Nothing Then
        MsgBox ("Colonne " & titreColonne & " non trouvée dans la liste des références")
        Exit Function
    End If
 
    return_colonne = NumCol2Lettre(columnSelected.Column)
End Function
Pourriez vous m'aider à comprendre pourquoi je suis obligé d'activer la feuille ? Pourquoi ai je l'impression de bien trouver ma variable mais je n'arrive plus ensuite à récupérer sa valeur ?
Merci pour l'aide que vous pourrez m'apporter.
Cédric