Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Problème syntaxe array

  • Initiateur de la discussion gerome1980
  • Date de début
G

gerome1980

Guest
Bonjour,

je suis débutant VBA et j'essaie de définir un tableau à deux entrées.
Voici le code:

Code:
Function fy(n, t)
Dim S As Variant
S(355) = Array(355, 345, 335, 325, 315, 295)
S(420) = Array(420, 400, 390, 370, 360, 340)
S(460) = Array(460, 440, 430, 410, 400, 'PM')
fy = S(n)(t)
End Function

Excel me sort #REF!
Le S(n)(t) n'a pas l'air joli joli...
Pourriez-vous m'aider?

Merci,

Jerome
 

Hervé

XLDnaute Barbatruc
Bonjour gerome

peut etre comme ceci, si ton n renvoi un emplacement (1,2 ou 3) :




salut
 

Jam

XLDnaute Accro
Salut gerome,

Plusieurs remarques concernant ton code:

1. Il faut définir le type des variables - c'est beaucoup mieux et fortement conseillé
ex:
Function fy (n as Integer, t as Double) as Variant

2. la fonction Array permet de créer un tableau comprenant les élements déclarés.
2bis. Tu ne peux pas donner une dimension à S (ex. 355).

3. Dans ta fonction tableau S(355) ou un autre, ne peut pas être interprété tel quel. Il faut que tu 'choisisse' l'élément du tableau que tu souhaites utiliser.

4. fy = S(n)(t) ne signifie rien en VBA J'imagine que tu veux multiplier ton tableau par la variable 't'

Donc pour tout cela il vaut mieux procéder ainsi:

(Attention: déclarations des variables à adapter à ton cas)

Bon courage
 

Gorfael

XLDnaute Barbatruc
Salut Jam
S=Array(355,345,335,325,315,295)
Peux-tu m'expliquer ce que signifie cette instruction ?
pour moi, Array servait à la déclaration de variables 'tableaux à n dimensions', donc, j'aimerais assez ne pas mourrir idiot et comprendre ses autres utilisations possibles.

Merci d'avance
A+
 
G

gerome1980

Guest
Re...

En fait le paramètre t est un intervalle (par exemple 8<t<16). Pour la definition de ces intervalles puis-je faire qqchose dans ce style:
Case 1
8<t and t<16
Case 2 etc...?

Je voulais savoir,également,dans la proposition d'Hervé à quoi correspondait Ss (appellation). Peut-on appeler ça une fonction? liste? ou est-ce une variant?
J'ai du mal avec le vocab

Et puis ATTENTION: tu ne peux pas renvoyer de tableau dans une fonction de feuille; c'est-à-dire? je ne peux pas utiliser fy dans ma feuille de calcul?

Merci,

Jerome
 

Hervé

XLDnaute Barbatruc
re gerome, salut jam

'Je voulais savoir,également,dans la proposition d'Hervé à quoi correspondait Ss (appellation).
Peut-on appeler ça une fonction? liste? ou est-ce une variant?'

il s'agit simplement d'une variable tableau à 3 dimensions, contenant les trois autres tableaux (S355, S420, S460)

j'ai voulu ne pas trop m'eloigner de ton code initiale et est donc utilisé une variable tableau contenant d'autres variables tableaux, et dans ce cas, cette syntaxe fy = S(n)(t) est admise.

'Et puis ATTENTION: tu ne peux pas renvoyer de tableau dans une fonction de feuille; c'est-à-dire? je
ne peux pas utiliser fy dans ma feuille de calcul?'

si tu peux, mais dans ce cas, ta fonction devient matricielle (Merci DidierMdf )

prenons l'exemple de ce code :



qui suivant la valeur de n (S355, S420 ou S460) te renverra un tableau.

1) en A1, tu met S355
2) tu sélectionnes les cellules B1 à B6
3) tu tapes : =transpose(fy(A1))
4) tu valides par CTRL+MAJ+ENTREE

et voilà ton tableau est retourné sur ta feuille.

si tu met S420 en A1 tes valeurs en colonne B se modifieront.

par contre, j'ai rien compris à ton histoire d'intervalle.

salut
 

Jam

XLDnaute Accro
Re Gorfael, Hervé, Gerome

1. Gorfael
Array sert bien à 'remplir' un tableau. Par conte pour l'utiliser il faut bien l'attribuer à une variable, ici S.

2. Merci Hervé pour cette explication concernant les formules matricielles. Moi qui ne les utilise pas (à tord peut-être) j'ignorais cette utilisation.

3. Pour les intervalles. J'imagine Gerome que tu veux tester si 't' est dans un interval. Un simple
If 8<t and t<16 Then ... devrait suffire. Après la complexité et la position dans le code variera en fonction de ce que tu veux faire. A toi de nous le dire.
 

Gorfael

XLDnaute Barbatruc
Jam écrit:
Re Gorfael, Hervé, Gerome

1. Gorfael
Array sert bien à 'remplir' un tableau. Par conte pour l'utiliser il faut bien l'attribuer à une variable, ici S.
salut et merci pour ta réponse Jam
Malheureusement, je dois être un peu dur de la comprenette pour moi :
S = Array(355, 345, 335, 325, 315, 295)
ferait un tableau à 6 dimensions soit 1,2×10^15 cellules.
Donc, la seule solution logique c'est que S remplace un tableau à une dimension de 6 cases, mais j'ai rien trouvé dans 'l'aide' Excel. Et surtout, je vois pas comment l'utiliser.
Mais c'est pas grave, je comprendrais quand je serais grand :silly:
A+
 

Jam

XLDnaute Accro
Salut Gorfael,

Avec Array tu as un tableau à une dimension, et pas 6. Il ne s'agit pas d'une déclaration de taille de tableau du type Dim monTablo(2,3) As monType.

A quoi cela peux servir ? Par exemple à établir une liste d'élément défini (et fixe) genre:

S= Array('Pomme','Carotte','Voiture',10,'la blague du jour')
S=Array('Janvier','Février','Mars')
S=Array('Boulon','Ecrou','Tournevis')

Voilà, j'espère que cela t'aidera à bien comprendre son utilité.

Bonne journée
 

Gorfael

XLDnaute Barbatruc
Salut à tous
Merci encore Jam
Mon réel problème est que j'ai pas réussi à voir la fonction Array dans l'aide Faut que je change de lunettes, y a pas à dire
Merci encore de votre patience
A+
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…