Bonjour,
Voici mon problème :
Je souhaite faire une fonction qui détermine un valeur dans un tableau. La fonction dépend du nom du tableau, de la position où il faut chercher la valeur.
Chaque valeur de chaque tableau est renseignée.
Voici ma fonction dans l'état actuel :
Code:
Function Test(Tableau As String, Variable As Double) As Double
Dim A() As Double
Dim B() As Double
A(1) = 10
A(2) = 20
B(1) = 30
B(2) = 40
Test = Tableau & "(" & Variable & ")"
End Function
=Test("A";1) doit me revoyer 10, mais j'obtiens un #Valeur
Exact, merci.
Donc maintenant j'ai (au moins) 2 problèmes !
- Si je déclare Test en tant que chaîne de caractères, =Test("A";1) devrait me renvoyer A(1), mais j'obtiens un #Valeur
- ensuite, il faudra que je crée une variable String :
chaine = Tableau & "(" & Variable & ")" (mais il y a surement une erreur de syntaxe vu mon premier problème).
comment faire alors pour déterminer la valeur correspondant cette variable chaine ?
Il faut déclarer le tableau avec ParamArray
exemple
Private sub rechercheligne( ParamArray £param())
appel
call rechercheligne(toto) ' toto est un tableau
call rechercheligne(tutu) ' tutu est un tableau
aide VBA : ParamArray
' * Doit obligatoirement être déclaré en type Variant.
' * Ne peut pas coexister avec des arguments Optional.
' * Doit être placé en dernière position dans la liste des arguments.
' * Les arguments ne sont pas facultatifs.
' * Chaque argument peut être d'un type de données différent.
' * Le nombre d'arguments n'est pas limité.
' * L'indice inférieur du tableau est toujours 0.
jp14 et staple1600, merci pour vos propositions, mais je pense qu'il serait très difficile de les appliquer à mon cas, car la fontion que j'ai présentée n'est qu'un exemple, en fait j'ai une quinzaine de tableaux, dont plusieurs à 2 dimensions, et au total plus de 30 000 valeurs.
Etant donné que je n'ai "que" une quinzaine de tables, j'avais pensé à faire un Select Case, ce qui contourne le problème du String :
Select Case Tableau
Case "A"
Test = A(variable)
Case "B"
Test = B(variable)
Case Else
Test = 0
End Select
Mais ça ne marche toujours pas, et même ceci ne fonctionne pas (#valeur) :
Function Essai(Variable As Long) As Long
Dim A() As Long
A(1) = 10
A(2) = 20
Essai = A(Variable)
End Function
Je ne comprends rien, je dois avoir de la m**** dans les yeux, je ne vois pas ce qui ne va pas. Ca commence à m'agacer d'ailleurs !
Je crois que j'ai besoin d'un oeil extérieur !
Merci d'avance
Un fichier sans données confidentielles avec les tenants et aboutissants cela nous permettrait d'avoir cet oeil neuf et de proposer une solution plus adaptée.
@ tototiti2008
C'est parfait, ça fonctionne bien, et en ajoutant un Select Case aussi.
Merci beaucoup.
@ jp14
tototiti2008 m'a apporté cet oeil neuf, merci quand même !
@Staple1600
Je n'ai jamais utilisé les Array, mais ça me semble difficilement gérable avec mes 15 tableaux, de différentes tailles et dimensions, et contenant plus de 30 000 données au total, ne serait-ce qu'au niveau de la lisibilité dans le code.
Je vais donc opter pour la solution de facilité, à savoir le Select Case.
Je te remercie tout de même de t'être décarcassé pour m'aider.