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 :

matrice sous VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut matrice sous VBA
    Bonjour à tous,

    Actuellement je fais des stats et je me heurte au problème suivant: je tire un grand nombre de fois (ex: 10000) des valeurs aléatoires avec la fonction excel alea(). Le but est d'obtenir une valeur moyenne de ce tirage. Actuellement chaque nouvel tirage est rajouté au tirage précédent (le premier tirage est enregistré dans une cellule dont la valeur est augmentée à chaque tirage) et à la fin je divise le tout par le nombre d'itérations pour obtenir une moyenne. Mais je m'intéresse à d'autres statistiques comme l'écart-type ou la valeur maximale/minimale.
    Je pense que ma méthode n'est donc plus adaptée. A partir de là j'ai deux solutions:
    1. j'enregistre dans une feuille excel les 10000 tirages pour ensuite faire ma petite cuisine. L'incovénient de cette méthode est sa lenteur car elle va occuper beaucoup de mémoire.
    2. Je fais la même matrice mais sous VBA. Ma question est donc: est-il possible que VBA "enregistre" une telle matrice et surtout puis-je la manipuler un minimum (moyenne ok mais écart-type et min/max?).
    Pour la matrice je pense que c'est possible car j'ai vu une discussion dans ce forum sur une simulation monte carlo. En revanche je n'ai pas compris la syntaxe.

    alex

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour sash6,
    Ça, c'est une question pour Random...
    Mais en attendant qu'il passe par là, si tu nous passais l'URL de la discussion sur la simulation monte carlo, on pourrait "peut-être" te "débrouiller" un peu le code.
    Juste une suggestion

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    Salut Ouskel,

    Voici le lien de la discussion:
    http://www.developpez.net/forums/sho...ht=monte+carlo

    En fait j'ai commencé à potasser le truc mais pour l'instant ça ne marche pas trop. Voici ce que j'ai obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim i As Long
    Dim matrice() As Single
     
    For i = 1 To Sheets("Feuil2").Range("D37").Value
        matrice(i, 1) = i
        matrice(i, 2) = Sheets("Feuil2").Range("I28").Value
        matrice(i, 3) = Sheets("Feuil2").Range("I29").Value
        matrice(i, 4) = Sheets("Feuil2").Range("I30").Value
        matrice(i, 5) = Sheets("Feuil2").Range("I31").Value
        matrice(i, 6) = Sheets("Feuil2").Range("I32").Value
        matrice(i, 7) = Sheets("Feuil2").Range("I33").Value
    Next

  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
    Par défaut
    fais nous la liste des valeurs souhaitées

    pour l'instant j'ai moyenne et écart type mini maxi

    en tout état de cause
    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
    51
    52
    53
     
    Sub moy()
    Dim boucle As Long
    Dim quand As Double
    Dim total As Double
    Dim totalvalcar As Double
    Dim maxi As Double
    Dim mini As Double
    Dim tirage As Double
    Dim ecarty As Double
    maxi = 0
    mini = 1
    Rnd (-10)
    quand = Now()
    Randomize (quand)
    For boucle = 1 To 100000
    tirage = Rnd()
    total = total + tirage
    totalvalcar = totalvalcar + (tirage * tirage)
    If tirage > maxi Then maxi = tirage
    If tirage < mini Then mini = tirage
    Next boucle
    ecarty = totalvalcar * 100000
    ecarty = ecarty - (total * total)
    ecarty = ecarty / 100000 / 100000
    ecarty = Sqr(ecarty)
    MsgBox ("moyenne " & total / 100000)
    MsgBox ("écartyp" & ecarty)
    MsgBox ("mini " & mini)
    MsgBox ("maxi " & maxi)
    Rnd (-10)
    'si on a besoin deux fois de la série
    maxi = 0
    mini = 1
    total = 0
    totalvalcar = 0
    Randomize (quand)
    For boucle = 1 To 100000
    tirage = Rnd()
    total = total + tirage
    totalvalcar = totalvalcar + (tirage * tirage)
    If tirage > maxi Then maxi = tirage
    If tirage < mini Then mini = tirage
    Next boucle
    ecarty = totalvalcar * 100000
    ecarty = ecarty - (total * total)
    ecarty = ecarty / 100000 / 100000
    ecarty = Sqr(ecarty)
    MsgBox ("moyenne " & total / 100000)
    MsgBox ("écartyp" & ecarty)
    MsgBox ("mini " & mini)
    MsgBox ("maxi " & maxi)
    End Sub

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    salut random,

    il y a en effet moyenne, écart-type, médiane, minimum, maximum

  6. #6
    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
    Par défaut
    la médiane sera très coûteuse en terme de calcul et surtout de stockage
    tu es certain ?

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    Random,

    Je pensais que j'allais construire mon code tout seul et je n'ai pas été suffisamment explicite. En fait, la fonction excel alea() ou rnd() est utilisée dans une fonction loi normale inverse pour chaque vecteur de ma matrice 6x6. Seulement les totaux des lignes m'intéressent et c'est sur eux que j'ai besoin de faire des tests et des stats. Je vais commencer à potasser ton code pour voir si je peux l'adapter à mon cas.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 192
    Par défaut
    Ho Ho Ho à tous sages enfants du forum!

    Je reviens vers vous sur un sujet que j'avais mis de côté faute de temps. J'ai réussi à adapter le code de Random pour ce qu'il me fallait. En revanche, tel que le code est construit, je ne peux faire les différents calculs que pour une variable aléatoire à la fois. Or j'en ai 6. J'ai essayé donc de faire une boucle pour que mes 6 variables aléatoires soient traitées simultanément. Voici ce que ça donne sans toutefois fonctionner:
    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
    Dim boucle As Long
    Dim quand As Double
    Dim total As Double
    Dim totalvalcar As Double
    Dim maxi As Double
    Dim mini As Double
    Dim tirage As Double
    Dim ecarty As Double
    Dim i As Integer
     
    maxi = 0
    mini = 130000000
     
    For boucle = 1 To Sheets("Feuil2").Range("D37").Value
        Calculate
            For i = 28 To 33
                tirage(i) = Sheets("Feuil2").Range("I" & i).Value
                total(i) = total(i) + tirage(i)
                totalvalcar(i) = totalvalcar(i) + (tirage(i) * tirage(i))
                If tirage(i) > maxi(i) Then maxi(i) = tirage(i)
                If tirage(i) < mini(i) Then mini(i) = tirage(i)
            Next i
     
    Next boucle
     
    For i = 28 To 33
    ecarty(i) = totalvalcar(i) * Sheets("Feuil2").Range("D37").Value
    ecarty(i) = ecarty(i) - (total(i) * total(i))
    ecarty(i) = ecarty(i) / Sheets("Feuil2").Range("D37").Value / Sheets("Feuil2").Range("D37").Value
    ecarty(i) = Sqr(ecarty(i))
    ActiveSheet.Cells(38, i - 23) = total(i) / Sheets("Feuil2").Range("D37").Value
    ActiveSheet.Cells(39, i - 23) = ecarty(i)
    ActiveSheet.Cells(40, i - 23) = mini(i)
    ActiveSheet.Cells(41, i - 23) = maxi(i)
     
    Next i
    En gros, VBA me dit que le tableau est introuvable. J'ai une solution de rechange, qui consisterait à multiplier la plupart des variables déclarées dans le code par 6. Avant que je ne le fasse, j'aimerais savoir si ma solution de tableau peut fonctionner et comment fait-on un tableau virtuel?

Discussions similaires

  1. matrice de corrélation sous VBA Excel
    Par fox971 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 09/11/2008, 22h15
  2. dimension d'une matrice sous VBA
    Par galaguiloe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/06/2007, 11h20
  3. Réponses: 8
    Dernier message: 07/10/2004, 11h08
  4. (VBA-A] Requete access sous VBA
    Par vanima dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/07/2004, 16h07
  5. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39

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