IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction renvoyant tableau [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Par défaut Fonction renvoyant tableau
    Bonjour à tous,

    J'ai un petit soucis avec mon code vba.
    Je souhaite réaliser une fonction recevant 3 doubles et un tableau et renvoyant un tableau.
    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
     
    Function Calc(Sqv As Double, Total As Double, Exo As Double, TableauVal() As Variant) As Variant()
        Dim I As Integer
        Dim Cap As Variant 
     
        I = 1
        For I = 1 To UBound(TableauVal, 1)
     
            Cap = TableauVal(I, 2)*0.389 +3*Sqv
            CalC(I, 1) = Cap
     
        Next I
     
    End Function
     
    Sub App()
     
    Dim Plage() As Variant, test As Variant
     
    Plage  = Feuil3.Range("B4:E16").Value
    test = Calc(12,7.8,6,Plage)
     
     
    EndSub
    Le problème est qu'il ne veut pas me mettre la valeur dans le tableau de la fonction Calc :
    Je pensais que ce code remplissait une case... J'ai une erreur du style "Un appel de fonction de la parti gauche de l' affectation doit renvoyer Variant ou Object.

    EN mode pas à pas je vois bien pourtant que le tableau que je lui envoit est bien lu.
    Je ne vois pas trop ce qu'il attend mais en tout cas je m'y prend mal pour le remplir

    Merci et Bonne journée

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Peut être comme cela
    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
    Function Calc(Sqv As Double, Total As Double, Exo As Double, TableauVal() As Variant) As Variant()
        Dim I As Integer
        Dim Cap() As Variant
     
        ReDim Cap(UBound(TableauVal, 1))
        I = 1
        For I = 1 To UBound(TableauVal, 1)
     
            Cap(I - 1) = TableauVal(I, 2) * 0.389 + 3 * Sqv
     
        Next I
     
        Calc = Cap
     
    End Function

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    J'ai testé cela et ça fonctionne, mais mon problème est que je n'arrive pas récupérer le tableau que la fonction renvoie.
    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
    Sub App()
     
    Dim Plage() As Variant, test As Variant
     
    Plage  = Feuil3.Range("B4:E16").Value
    Redim test(Plage(test, 1))
    test = Calc(12,7.8,6,Plage)
     
     
    For I = 1 To UBound(test, 1)
     
           Feuil1.Range("D" & I) = test(I)
     
     
        Next I
     
    EndSub
    J'ai mis un 'for' pour l'exemple car je n'arrive pas à récupérer la dimension de 'test'. "l'indice n'appartient pas à la sélection"

    Ya un truc qui m'echappe


    Bonne soirée et merci

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    Function Calc(Sqv As Double, Total As Double, Exo As Double, TableauVal As Variant) As Variant
    Dim i As Integer
    Dim Cap() As Variant
     
    ReDim Cap(1 To UBound(TableauVal, 1))
    For i = 1 To UBound(TableauVal, 1)
        Cap(i) = TableauVal(i, 2) * 0.389 + 3 * Sqv
    Next i
    Calc = Cap
    End Function
     
    Sub App()
    Dim Tb, Test
     
    Tb = Feuil3.Range("B4:E16").Value
    Test = Calc(12, 7.8, 6, Tb)
    Feuil1.Range("D1:D" & UBound(Test)) = Application.Transpose(Test)
    End Sub
    Avec TableauVal est une variable tableau

  5. #5
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 29
    Par défaut
    Merci beaucoup!!!

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Fonction renvoyant un tableau
    Par glycerine dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/03/2013, 22h27
  2. C++ fonction renvoye tableau d 'objets
    Par fontaigo dans le forum C++
    Réponses: 6
    Dernier message: 13/12/2007, 21h55
  3. Fonction renvoyant un tableau :
    Par spyk dans le forum Delphi
    Réponses: 3
    Dernier message: 01/09/2006, 15h32
  4. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33
  5. fonction renvoyant un tableau en argument
    Par Jones dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2002, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo