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 :

Aide pour déclarer fonction avec plusieurs paramètres de sortie


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 11
    Points
    11
    Par défaut Aide pour déclarer fonction avec plusieurs paramètres de sortie
    Bonjour,

    J'aimerai savoir comment faire pour déclarer une fonction avec plusieurs paramètres de sorties.
    Et comment récupérer ces paramètres?

    Merci d'avance

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Function unefonction() As Variant
        Dim unTableau(4) As Variant
        Dim unInteger As Integer
        Dim unLong As Long
        Dim uneCollection As Collection
        Dim unString As String
     
        unInteger = 1
        unLong = 2000000
        Set uneCollection = New Collection
        unString = "Bonjour"
     
    ' Version longue ---------
        Set unTableau(0) = uneCollection
        unTableau(1) = unLong
        unTableau(2) = unInteger
        unTableau(3) = unString
     
        unefonction = unTableau
    ' Version longue ---------
     
        ' Ou on évite l'emploi de unTableau par la version courte...
     
    ' Version courte ---------
        unefonction = Array(uneCollection, unLong, unInteger, unString)
    ' Version courte ---------
    End Function
     
    Sub tester()
        Dim unTableau As Variant
     
        unTableau = unefonction()
     
        MsgBox unTableau(0).Count
        MsgBox unTableau(1)
        MsgBox unTableau(2)
        MsgBox unTableau(3)
     
        MsgBox unefonction()(1)
    End Sub

  3. #3
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour tonio, singular

    Tes intéressé, j'aimerai savoir si on peut utiliser une telle fonction directement dans une feuille

    si oui, la syntaxe à utiliser STP

    Merci

    Cordialement
    Wilfried

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    l'exemple qui t'a été donné renvoie un tableau

    sous excel index(fonction(param entrée),1,1) devrait te renvoyer la première valeur

    et ainsi de suite
    Elle est pas belle la vie ?

  5. #5
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re: Bonjour Random

    j'ai un #Valeur qui apparait, je ne sais pas d'ou ca vient, je joins le fichier, je ne pense pas avoir mal utilisé les lignes de Singular, mais quand on s'abrutit sur un sujet, on passe souvent devant une grosse betise
    Alors qu'un oeuil neuf la voit de suite

    Merci à vous

    Cordialement
    Wilfried

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Pour qu'une fonction puisse être utilisée comme ça dans une feuille, elle ne doit jamais renvoyer un objet tel que Collection. Et comme il s'agit d'une fonction matricielle, tu dois peser sur CTRL+MAJ+ENTRÉE quand tu l'enregistre dans la cellule; des accolades se mettront automatiquement autour (courtoisie de Excel) pour indiquer que c'est une matricielle.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 8
    Points : 11
    Points
    11
    Par défaut problème "erreur de compilation : impossible d'affecter à un tableau
    Bonjour et merci pour la réponse.
    J'ai utilisé le programme que vous m'avez proposé et hier il fonctionnait.
    Mais aujourd'hui, j'essaie de le faire tourner à nouveau et j'ai un message qui apparait lorsque je lance la macro "Erreur de compilation : impossible d'affecter à un tableau" alors que j'ai déclaré la fonction As Variant.
    Je joins le programme.
    Pouvez vous me dire ce qui empêche le programme de tourner??

    Merci d'avance
    Fichiers attachés Fichiers attachés

  8. #8
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re:

    j'avais deja essayé en formule matricielle, mais j'avais toujours le meme resultat, M'enfin ce n'est pas tres grave...........

    Merci de t'etre penché sur la question

    Cordialement
    Wilfried

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Points : 520
    Points
    520
    Par défaut
    Pour affecter un tableau à un Variant, ce dernier ne dois pas être défini comme un tableau. La déclaration doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim unTableau As Variant

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu pourrais essayer ceci

    côté visual basic
    on peut tester dans la fenêtre éxécution print testpuiss(3)(3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function testpuiss(x As Double) As Variant
    Dim tempo(1 To 3) As Double
    Dim vartemp As Variant
    tempo(1) = x * x
    tempo(2) = tempo(1) * x
    tempo(3) = tempo(2) * x
    testpuiss = tempo
    End Function
    côté excel sans formule matricielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =INDEX(testpuiss(2);1;3)
    Elle est pas belle la vie ?

  11. #11
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Re:

    Merci random, ca marche maintenant,

    mais ce que je craignais c'est passé, la fonction s'est calculée 5 fois, puisque mon tableau retournais 5 valeurs.

    Merci à vous et bonne journée
    Wilfried

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

Discussions similaires

  1. threads et fonction avec plusieurs paramètres
    Par stevelaclasse dans le forum C
    Réponses: 1
    Dernier message: 03/04/2011, 14h02
  2. Réponses: 32
    Dernier message: 28/11/2010, 17h33
  3. Appel d'une fonction avec plusieurs paramètres
    Par kazarn dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/06/2009, 18h55
  4. créer une fonction avec plusieurs paramètres
    Par SHERPAE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2009, 17h41
  5. [Système] Fonction avec plusieurs paramètres optionnels
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2007, 14h36

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