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 :

renvoie de variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 61
    Par défaut renvoie de variables
    Bonjour,
    voici le code que j'ai
    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
    Sub statistiques_elémentaires()
    Dim tableau_resultats() As Variant
    Dim ligne_tableau As Integer
    Dim feuille As Worksheet
    
    nb_actions = ThisWorkbook.Worksheets.Count - 1
    ReDim tableau_resultats(nb_actions, 7)
    ligne_tableau = 0
    For Each feuille In ThisWorkbook.Worksheets
    If feuille.Name <> "Statistiques" Then
    feuille.Activate
    Call calcule_rentas
    ligne_tableau = ligne_tableau + 1
    tableau_resultats = statistiques(feuille, tableau_resultats, ligne_tableau)
    End If
    Next feuille
    
    Worksheets("Statistiques").Activate
    Range("A2").Select
    Range(Selection, Selection.Offset(nb_actions - 1, 6)).Value = tableau_resultats
    End Sub
    Sub calculate_rentas()
    Range("C3").Select
    Set plage_rentas = Range(Selection, Selection.End(xlDown)).Offset(-1, 1)
    plage_rentas.FormulaR1C1 = "=ln((R[1]C2 + RC3) / RC2)"
    End Sub
    
    Function statistiques(feuille, tableau_resultats, ligne_tableau)
    tableau_resultats(ligne_tableau, 1) = feuille.Name
    tableau_resultats(ligne_tableau, 2) = plage_rentas.Cells.Count
    tableau_resultats(ligne_tableau, 3) = WorksheetFunction.Average(plage_rentas)
    tableau_resultats(ligne_tableau, 4) = WorksheetFunction.Median(plage_rentas)
    tableau_resultats(ligne_tableau, 5) = WorksheetFunction.StDev(plage_rentas)
    tableau_resultats(ligne_tableau, 6) = WorksheetFunction.Skew(plage_rentas)
    tableau_resultats(ligne_tableau, 7) = WorksheetFunction.Kurt(plage_rentas)
    statistiques = tableau_resultats
    
    
    End Function
    Bonjour, je ne trouve pas ce renvoi de variable très clair (en gras dans le code), qu'en pensez vous ?
    Si je comprends bien, on stocke dans tableau_résultats la fonction statistique(feuille, tableau_resultats, ligne_tableau)
    mais pourquoi à la fin de la fonction statistiques on met :
    statistiques = tableau_resultats ? quel est l'intérêt ?

  2. #2
    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
    C'est une simple coïncidence
    chaque variable tableau_resultats est déclarée dans une sub ou function à part
    Mais, le code à revoir soigneusement.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 61
    Par défaut
    Pourrait on se passer de :
    statistiques = tableau_resultats ?
    si non, peux tu m'expliquer stp à quoi sert cette ligne car je suis un peu perdu

    tableau_resultats = statistiques(feuille, tableau_resultats, ligne_tableau)
    Ceci signifie que toutes les données de la fonction statistique seront stockées dans tableau_resultats ?

  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
    Non, Statistique est une fonction qui récupère les données d'un tableau.
    j'ai modifié tes codes pour plus de lisibilité et compréhension.
    j'ai renommé les variables.
    Chaque variable a une portée de la procédure ou fonction où elle est déclarée.
    Je l'ai laissé telles pour l'exemple (on pourrait déclarer des variables à portée publique)
    ci joint code (éventuellement adapter la plage de travail, j'ai mis D2: Dx (x dernière ligne)
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Option Explicit
     
    Function Statistiques(Sht As Worksheet, X, i As Integer)
    Dim LastLig As Long
    Dim PlageRentas As Range
     
    With Sht
        LastLig = .Cells(Rows.Count, "C").End(xlUp).Row
        Set PlageRentas = .Range("D2:D" & LastLig)
        X(i, 0) = Sht.Name
        X(i, 1) = PlageRentas.Cells.Count
        With Application.WorksheetFunction
            X(i, 2) = .Average(PlageRentas)
            X(i, 3) = .Median(PlageRentas)
            X(i, 4) = .StDev(PlageRentas)
            X(i, 5) = .Skew(PlageRentas)
            X(i, 6) = .Kurt(PlageRentas)
        End With
    End With
    Statistiques = X
    End Function
     
    Sub Calculate_Rentas(ws As Worksheet)
    Dim LastLig As Long
     
    With ws
        LastLig = .Cells(Rows.Count, "C").End(xlUp).Row
        .Range("D2:D" & LastLig - 1).FormulaR1C1 = "=ln((R[1]C2 + RC3) / RC2)"
    End With
    End Sub
     
    Sub statistiques_elémentaires()
    Dim TabResult() As Variant
    Dim Ligne_Tableau As Integer, Nb_Actions As Integer
    Dim Feuille As Worksheet
     
    Nb_Actions = ThisWorkbook.Worksheets.Count - 1
    ReDim TabResult(0 To Nb_Actions, 7)
    Ligne_Tableau = 0
    For Each Feuille In ThisWorkbook.Worksheets
        If Feuille.Name <> "Statistiques" Then
        Call Calculate_Rentas(Feuille)
        TabResult = Statistiques(Feuille, TabResult, Ligne_Tableau)
        Ligne_Tableau = Ligne_Tableau + 1
        End If
        With Worksheets("Statistiques")
            .Range(.Cells(2, 1), .Cells(Nb_Actions + 1, 7)).Value = TabResult
        End With
    Next Feuille
    End Sub

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 61
    Par défaut
    merci d'avoir pris le temps de m'expliquer.

Discussions similaires

  1. [PHP 5.2] Ma fonction crée renvoi la variable en double
    Par juronius dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2009, 22h54
  2. renvoi des variables de l'url dans mon formulaire
    Par cajoline06 dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2009, 16h11
  3. Fonction qui renvoie plusieurs variables
    Par _Aravis dans le forum MATLAB
    Réponses: 1
    Dernier message: 28/09/2008, 19h55
  4. probleme d'execution de mon code à cause d'un renvoie de variable.
    Par yorukaze dans le forum Général Python
    Réponses: 2
    Dernier message: 01/03/2008, 15h36
  5. Renvoi valeur variable popup
    Par RedBit dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2007, 16h05

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