Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1731 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Affichage d un tableau retourne par une fonction

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage d un tableau retourne par une fonction

n°2009393
paflechiot
Posté le 16-07-2010 à 08:14:07  profilanswer
 

Bonjour,
Je debute la programmation vba pour excel et je suis confronte a un probleme. J essaie de creer une fonction test() qui retourne un tableau. Lorsque je fais appel a cette fonction dans une cellule de ma feuille excel j aimerais que le tableau s affiche dans les cellules adjacentes a la cellule appelante. En pratique je fais par exemple  
 
Function test() As Variant
Dim toto(1 To 2, 1 To 2) As Variant
toto(1, 1) = 2
toto(2, 2) = 3
toto(1, 2) = 4
toto(2, 1) = 5
test = toto
End Function
 
Et lorsque j appelle en D2 (par exemple) =test() seule la case D2 contient toto(1,1) c est a dire la valeur 2.
J utilise excel 2002.
Est ce normal ? Y a t il quelquechose que je n ai pas compris ?
Merci
 
Paf le chiot


Message édité par paflechiot le 16-07-2010 à 09:33:04
mood
Publicité
Posté le 16-07-2010 à 08:14:07  profilanswer
 

n°2009473
pepito_mi_​corazon
Posté le 16-07-2010 à 11:54:21  profilanswer
 

Oui c'est normal, il est nécessaire d'utiliser la fonction INDEX.
 
Dans Excel, tape par exemple :  
 
=INDEX(test();1;2) ... Il devrait te renvoyer 4.
 
Il n'est pas possible de taper test() dans la cellule D2 et d'avoir les cellules D2, D3, E2, E3 qui se remplissent :/


Message édité par pepito_mi_corazon le 16-07-2010 à 11:59:00
n°2009475
paflechiot
Posté le 16-07-2010 à 12:07:08  profilanswer
 

Merci de ton aide, effectivement cela m affiche bel et bien 4.
Cependant le remplissage de plusieurs cases par une fonction est possible.
L API bloomberg le fait (c est une application de donnees financieres) mais l acces aux sources est protege. La solution serait elle de mettre par exemple dans le code:
 
....
toto = 2 'la valeur de la premiere case de la matrice
call procedure_qui_remplit_les_autres_cases(coord_case_courante, toto)
....
 
Encore merci de ton aide

n°2009944
dje69r
Arme de distraction massive
Posté le 19-07-2010 à 11:30:58  profilanswer
 

Non le remplissage de cellules par une fonction n'est pas possible, du moins pas directement. Peut etre sous 2007, pas fait l'essai.
La preuve, tu parles d'API. Or, une API, d'où son nom n'est pas natif à Excel.
 
Parcontre, tu peux, detecter une modification sur la cellule, si elle contient ta fonction, tu recuperes le resultat et en fonction tu t'occupes de tes cellules.
 
Exemple :
Une fonction toute bete qui renvoit une valeur d'un tableau.

Code :
  1. Function MonTableau(Element)
  2.     'Définit la taille du tableau et le type de données.
  3.     Dim NomTableau(2) As String
  4.    
  5.     'Alimente les éléments du tableau
  6.     NomTableau(0) = "a"
  7.     NomTableau(1) = "b"
  8.     NomTableau(2) = "c"
  9.    
  10.     'Affiche l'element du tableau
  11.     MonTableau = NomTableau(Element)
  12. End Function


Donc si Element = 0 ca renvoit "a", Element = 1 ca renvoit "b" etc.
 
En A1 tu saisis : 0
En D2 tu saisis : =MonTableau(A1)
D2 renvoit bien "a"
 
Ensuite tu vas dans VBA, sur ta feuille :

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. 'Si la formule contient "MonTableau", le nom de la fonction
  3. If InStr(1, Target.FormulaR1C1, "MonTableau", vbTextCompare) <> 0 Then
  4.    
  5.     'code
  6.     'Ici un code a la con qui teste, si c'est "a" il met youpi dans la cellule d'a coté, en rouge.
  7.     If Target.Value = "a" Then
  8.         Cells(Target.Row, Target.Column + 1) = "Youpi"
  9.         Cells(Target.Row, Target.Column + 1).Font.ColorIndex = 3
  10.     End If
  11. End If
  12. End Sub


 
Donc en gros, tu entres ta fonction dans une cellule
Il calcule le resultat de la fonction
Et en fonction du resultat (dans cette meme cellule) il va mettre youpi dans la cellule d'a coté, en rouge.
 
Ca devrait te donner des pistes.


---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°2010531
pepito_mi_​corazon
Posté le 20-07-2010 à 22:32:33  profilanswer
 

Je pense avoir trouvé : Il faut écrire la fonction entre accolades {} ... ça permet d'écrire une matrice sous excel... Je détaillerai ça demain.

n°2187070
fahem87
Posté le 22-04-2013 à 20:24:31  profilanswer
 

salut pepito_mi_corazon
 
En fait, j'ai le même problème , ma fonction comprend beaucoup de boucle et ça prend beaucoup de temps pour le calcul, son résultat est une matrice de 2 ligne et de 6 colonnes, avec la fonction index ça marche mais,  je veux bien si tu te souviens de ta solution avec les accolades {}, pour faire  les boucle une fois mais pas 12 fois (pour chaque éléments) avec la fonction INDEX. je me suis dit que ça va marchera mieux avec cette solution des accolades {} pour optimiser le temps 12 fois moins.  merci d'avance


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Affichage d un tableau retourne par une fonction

 

Sujets relatifs
Afficher liste paramètres Fonction VBAFonction date Attachmate Extra
fichier -> tableauaffichage bit par bit
Affichage de caractères polonais depuis un xmlAjouter des cases dans un tableau en javascript
PB affichage requete dans PHPFPDF - Affichage sous condition
[RESOLU] Problème tableau php -> javascript 
Plus de sujets relatifs à : Affichage d un tableau retourne par une fonction


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR