VBA : Tableau dont le nom est variable

garth_algar

XLDnaute Junior
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

Est-ce que quelqu'un voit mon(mes) erreur(s) ?

Merci d'avance pour vos réponses
 

garth_algar

XLDnaute Junior
Re : VBA : Tableau dont le nom est variable

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 ?
 

jp14

XLDnaute Barbatruc
Re : VBA : Tableau dont le nom est variable

Bonjour


Une piste

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.


Pour trouver les valeur

for i LBound(£param) to UBound(£param)

Next i

JP
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : VBA : Tableau dont le nom est variable

Bonjour


Une autre façon de faire (sans Tableau)

Code:
Function Test(T As String) As Double
    Test = Switch( _
        T = "A1", 10, _
        T = "A2", 20, _
        T = "B1", 30, _
        T = "B2", 40)
End Function
=Test("A2") renvoie 20 par exemple
 

garth_algar

XLDnaute Junior
Re : VBA : Tableau dont le nom est variable

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
 

Staple1600

XLDnaute Barbatruc
Re : VBA : Tableau dont le nom est variable

Re


En revenant dans les tableaux

Code:
Function test(a As Integer, b As Integer)
Dim data()
data = Array(Array(10, 20), Array(30, 40))
test = data(a)(b)
End Function
Code:
Sub tester()
m = test(0, 0) & Chr(13)
m = m & test(0, 1) & Chr(13)
m = m & test(1, 0) & Chr(13)
m = m & test(1, 1)
MsgBox m
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : VBA : Tableau dont le nom est variable

Bonjour à tous,

en tout cas, pour que ce code marche, il faut le modifier comme ça :

Code:
Function Essai(Variable As Long) As Long
Dim A([COLOR=red]1 to 2[/COLOR]) As Long
A(1) = 10
A(2) = 20
Essai = A(Variable)
End Function

Edit : sur le même principe, le select case devrait fonctionner...
 

garth_algar

XLDnaute Junior
Re : VBA : Tableau dont le nom est variable

@ 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.
 

Discussions similaires

Réponses
3
Affichages
144

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal