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 :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 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
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 ?
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
Merci pour l'aide que vous pourrez m'apporter.
Cédric
Partager