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 :

Comment appeler une fonction qui renvoie une matrice dans une autre function


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2016
    Messages : 69
    Par défaut Comment appeler une fonction qui renvoie une matrice dans une autre function
    bonjour tout le monde,

    J'ai un probème sur une fonction qui doit appeler une autre fonction qui retourne une matrice.
    ci-après la premiere fonction que je dois appeler dans une autre fonction
    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
    Function foyer(longueurs As Range) As range
     
    n = Application.Count(longueurs)
    Dim fd As Double
    Dim foyerg() As Double
    Dim foyerd() As Double
    ReDim foyerg(1 To n)
    ReDim foyerd(1 To n)
     
    For i = n To 1 Step -1
     
    'CALCUL DES FOYERS GAUCHE ET DROITE
        If i = n Then
            fd = 0
            Else
            fd = (longueurs(i) / 6) / ((longueurs(i) / 3) _
            + (longueurs(i + 1) / 3) - (longueurs(i + 1) / 6) * fd)
        End If
        foyerd(i) = (fd)
         'Debug.Print foyerd(i)
     Next i
     
    For i = 1 To n
        If i = 1 Then
        fg = 0
        Else
        fg = (longueurs(i) / 6) / ((longueurs(i - 1) / 3) _
        + (longueurs(i) / 3) - (longueurs(i - 1) / 6) * fg)
        End If
        foyerg(i) = (fg)
        'Debug.Print foyerg(i)
    Next i
     
     
    foyer = Array(foyerg, foyerd)
     
    End Function
    Je dois utiliser la fonction dont le code est donné ci-dessus dans une autre fonction pour faire un calcul complémentaire. Cependant en appellant la fonction foyer définit ci-avant, j'ai rien en affichage avec debug.print.
    le code qui me pose problème est donnée ci-dessous.

    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
    Function poutres_continues_répartie(longueurs As Range, repartie As Range, xetude)
    n = Application.Count(longueurs)
    Dim foy() As Double
    ReDim foy(1 To n, 1 To n)
    foy() = foyer(longueurs)
     
    For i = 1 To n
    For j = 1 To n
        foy(i, j) = foyer(longueurs)
     
        Debug.Print foy(i, j)
     
    Next
    Next
     
    End Function
    Merci d'avance pour vos aides qui me seront précieuses.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour

    Teste en mettant foy() as Variant et sans le dimensionner, puis te te crée un autre tableau avec le résultat.
    eric

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2016
    Messages : 69
    Par défaut
    Salut Eriic merci beaucoup pour ton aide mais si j'ai bien compris ta proposition le code serai:
    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
    Function poutres_continues_répartie(longueurs As Range, repartie As Range, xetude)
    n = Application.Count(longueurs)
    Dim foy() As Variant
     
    foy() = foyer(longueurs)
     
    For i = 1 To n
    For j = 1 To n
        foy(i, j) = foyer(longueurs)
     
        Debug.Print foy(i, j)
     
    Next
    Next
     
    End Function
    En faisant cela j'ai toujours rien en affichage (debug.print).
    Peut être que j'ai mal compris ta proposition.
    Merci beaucoup

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    En fait c'est foy as variant, sans les ()

    Sinon beaucoup trop d'erreurs et d'incohérences dans ton code. Je suppose que tu as dû avoir des messages d'erreurs avant même d'arriver au debug.print.

    Déjà avec n = Application.Count(longueurs) n=0. C'est vraiment ça que tu veux ? il fait t'aider des espions pour contrôler tes variables et déboguer.
    Je suppose que tu voulais plus qq chose comme n = longueurs.Rows.Count

    Ensuite foy prendra les dimensions de ton range, pas celle que tu voulais : ReDim foy(1 To n, 1 To n)
    A toi de créer un autre tableau que tu remplis en bouclant s'il faut.

    Et encore foyer = Array(foyerg, foyerd), soit un tableau de 2 tableaux à 1 dimension que tu veux faire rentrer dans un tableau (1 To n, 1 To n). Tout cela n'a aucun sens, on a l'impression que tu programme au hasard en espérant que ça marche. Leçon 1 : ça ne marche JAMAIS cette technique. Il comprendre un minimum ce qu'on fait.
    Penche-toi sur les bases qui sont nécessaires, et sur le débogage si tu veux avancer.
    eric

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2016
    Messages : 69
    Par défaut
    bonjour Eriiic,
    effectivement en faisant un debug.print Ubound (foyer) j'obtiens 1 (MEA CULPA erreur de débutant).
    Je me suis laisser tromper par le rendu des résultats sur exel que voici.
    Nom : donnees dentree fucntion foyer.JPG
Affichages : 450
Taille : 20,5 Ko
    En effet, le résultat est affiché sur 2 lignes et 7 colonnes.
    par ailleurs, avec les données longueurs de l'image ci-dessus, j'obtiens n=7 (infos non fournis au début de ma question aussi).

    Les données d'entrée pour repartie sont (voir image ci-dessous)
    Nom : dinnées repartie.JPG
Affichages : 452
Taille : 13,6 Ko
    et xetude=3 mais pour le moment sans importance.

    Merci pour les pistes et pour ton aide.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2016
    Messages : 69
    Par défaut
    Merci pour vos aides qui seront les bienvenus.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/06/2015, 11h34
  2. erreur ios_base dans une fonction qui renvoie un fichier.
    Par jamsgoodon dans le forum Débuter
    Réponses: 3
    Dernier message: 03/03/2011, 18h57
  3. Réponses: 2
    Dernier message: 29/07/2010, 22h58
  4. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 01h13

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