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 :

Nombre aléatoire n itérations


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Nombre aléatoire n itérations
    C’est mon premier message sur ce forum que j’ai déjà eu l’honneur de parcourir.
    Tout d’abord, salutations à tous les membres.

    Je suis nullissime en VBA et après avoir cherché pas mal, je viens vers vous afin que quelqu’un puisse m’aider.
    J’ai Office XP et VBA6 en Anglais.

    Je cherche dans le cadre d’un processus stochastique (GBM, Wiener et autres) à obtenir une colonne de nombres aléatoires.
    Cependant, afin qu’il y’est une certaine pertinence, je souhaiterai que le processus soit réalisé N fois (par exemple, 500 fois).
    En mettant rand() dans Excel, j’obtiens ces nombres aléatoires.
    Mais il faut que je passe par VBA (impossible de faire 500 colonnes comme cela, vous en conviendrez), pour avoir une procédure qui lance 500 fois pour chaque cellule de la colonne et en fasse la somme ou la moyenne arithmétique.
    Par exemple, dans la colonne concernée, disons C, dans une cellule, j’aurai les résultats aléatoires suivants : 0.1, 0.25, 0925,0.124…..et grâce au code, j’obtiendrais sois la somme (alors, je diviser par N, avec une autre colonne) soit directement la moyenne de ces 500 itérations.

    Je suis désolé de ne pas avoir été en mesure de produire ne serait-ce qu’un commencement de code, mais je suis vraiment mauvais et je bloque sur cet aspect depuis plusieurs jours.

    Je vous remercie d’avance de votre aide.


    Elvaiz

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 137
    Par défaut
    Citation Envoyé par Elvaiz Voir le message
    C’est mon premier message sur ce forum que j’ai déjà eu l’honneur de parcourir.
    Tout d’abord, salutations à tous les membres.
    ..........................
    Je suis nullissime en VBA et après avoir cherché pas mal, je viens vers vous afin que quelqu’un puisse m’aider.
    J’ai Office XP et VBA6 en Anglais.
    ................
    Je vous remercie d’avance de votre aide.
    Elvaiz
    Bienvenue sur DVP
    Regardes ce lien et confirme nous quel outils de programmation tu vas utiliser pour ton programme.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Merci à toi.
    Je viens d'apprendre quelque chose, à savoir qu'il existe 2 Visual Basic distinct, que l'un est autonome et l'autre "intégré" à une application.
    Après recherche, le mien est un VBA , correspondant à l'icône du haut du lien que tu as posté. Version en langue anglaise. J'ai trouvé l'information (cela peut éventuellement servir à d'autres) en cliquant sur : Help/ About Microsoft Visual Basic.

    Je joints à mon message un petit fichier excel, vide de code (hélas), peut-être que cela peut aider à contextualiser ce que je veux faire.

    Merci.
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Bonjour,
    2 remarques :
    1°) Moyenner un ensemble de tirages aléatoires ne peut que lisser ces tirages dans un espace plus restreint
    qui ne correspondra en rien à l'espace de tirage initial.
    2°) Plus le nombre d'éléments moyennés sera important, plus l'intervalle résultant sera restreint.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Bonjour DarkVader,


    C'est en effet ce que je recherche: je fais un processus de Wiener, de façon à obtenir un path probable de l'évolution du cours futur d'une action.
    Or, avec une seule itération, la probabilité n'est pas suffisante.
    Avec un nombre N elevé, effectivement, l'intervalle de confiance se réduit.

    Quelqu'un peut il m'aider à solutionner ce problème d'itération s'il vous plait.

    Merci beaucoup pour vos commentaires et aides.
    C'est très important pour moi.


    Elvaiz.

    PS: Je n'ai pas finis le fichier avec le processus de Wiener, mais j'ai uploadé un fichier simple avec une seule colonne, avec un seul nombre aléatoire par cellule. il peut servir de base pour la construction d'un code.
    Encore merci à vous.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    J'espère avoir compris ton problème car je suis nul en stat, par contre je me débrouille en VBA

    Voici un petit code qui va te mettre sur la feuille deux le résultat de la moyenne de la plage C2:C26 de la feuille 1.
    Je te laisse tester...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Iteration()
    '
    Dim i As Integer, r As Double
     
    '
     
    For i = 1 To 500 'Boucle de 1 à 500, i sera incrémenté à chaque passage
        Calculate 'correspond à F9, actualise le résultat du Rand de la feuille 1
        r = Application.Subtotal(1, Sheets("sheet1").Range("c2:c26")) 'la variable r prend la moyenne de la plage
        Sheets("sheet2").Cells(i + 1, 1) = "Résultat " & i 'On indique le numéro du résultat dans la colonne A
        Sheets("sheet2").Cells(i + 1, 2) = r 'On met le résultat via la variable r dans la colonne B de la feuille 2
    Next i
     
    End Sub
    A+

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut Big Thanks
    Tout d’abord, je voulais te remercier infiniment, car en plus de m’avoir aidé, tu as pris la peine d’être pédagogique en expliquant ce que les lignes de codes signifiaient.
    Je t’assure que j’ai vraiment apprécié.
    Je ne t’ai pas immédiatement répondu, car j’ai essayé d’intégrer cela à ma feuille, avant de te rendre compte.
    J’avoue que j’ai un petit peu pataugé, mais au final, je pense que j’ai réussi.
    Voudrais tu avoir la gentillesse de regarder si je n’ai pas fait d’erreurs ? (fichier en pièce attachée)

    Si je ne craignais d’abuser, je te demanderais bien également s’il te plait, de me donner un coup de main pour le bouton : je souhaites lancer la fonction à partir d’un bouton (le bouton calibration) , mais tu pourras constater par toi-même que je n’y suis pas arrivé.

    Enfin, c’est un peu HS, mais ton pseudo me fait penser à quelque chose : FVandermeulen, ne serait il pas sans rapport avec Van Der Moolen/ Curvalue ?

    Encore merci beaucoup

    Merci également à l'équipe du forum pour mettre à disposition une telle aide.


    Elvaiz
    Fichiers attachés Fichiers attachés

  8. #8
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Concernant le Hors Sujet, désolé mais non, mon pseudo n'a rien à voir avec ça.

    Pour ton cas, en voyant ton fichier et en essayant de comprendre l'aspect stat' selon ton explication de base, je crois qu'il faut revoir notre copie.

    Concrètementent, tu veux que pour le 01/04/09 il t'indique en G4 la moyenne sur base de la somme de 500 fois la Rand de C4.
    C'est bien ça ?

    A+

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Concrètementent, tu veux que pour le 01/04/09 il t'indique en G4 la moyenne sur base de la somme de 500 fois la Rand de C4.
    C'est bien ça ?
    C'est tout à fait celà.

    Désolé si je ne me suis pas très bien exprimé la 1ere fois.

  10. #10
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Dans ce cas, voici la copie corrigée

    Attention je suis resté sur une plage fixe de C4 à C43, je pense que les commentaires dans le code sont assez explicites.

    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
    Sub Iteration()
    '
    Dim i As Integer, k As Integer, r As Double
     
    Application.Calculation = xlManual 'On désactive le calcul automatique pour ne pas fausser le Rand()
    '
     
    For i = 1 To 500 'Boucle de 1 à 500, i sera incrémenté à chaque passage
        Calculate 'correspond à F9, actualise le résultat du Rand de la feuille 1
            For k = 4 To 43 'Boucle pour balayer la plage C4:C43
            Cells(k, 7) = (Cells(k, 7).Value + Cells(k, 3)) 'On somme la valeur des Rand dans la colonne g
            Next k
    Next i
     
    For k = 4 To 43 'Boucle pour balayer les lignes la plage C4:C43
        Cells(k, 7) = Cells(k, 7).Value / 500 'On divise la somme des rand() par 500 pour avoir la moyenne
    Next k
     
    Application.Calculation = xlAutomatic 'On réactive le calcul automatique
     
    End Sub

    A+

    J'avais oublié ton problème de bouton.
    Tu as utiliser un 'CommandButton', tu dois donc mettre le code dans le module de feuille avec un 'click'.
    Pour ça, fais un click droit sur l'onglet de ta feuille "Ornstein Uhlenbeck" et choisi "voir code", ensuite tu colles le code tel qu'il est 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
    17
    18
    19
    20
    21
    Private Sub CommandButton1_Click()
     
    Dim i As Integer, k As Integer, r As Double
     
    Application.Calculation = xlManual 'On désactive le calcul automatique pour ne pas fausser le Rand()
    '
     
    For i = 1 To 500 'Boucle de 1 à 500, i sera incrémenté à chaque passage
        Calculate 'correspond à F9, actualise le résultat du Rand de la feuille 1
            For k = 4 To 43 'Boucle pour balayer la plage C4:C43
            Cells(k, 7) = (Cells(k, 7).Value + Cells(k, 3)) 'On somme la valeur des Rand dans la colonne g
            Next k
    Next i
     
    For k = 4 To 43 'Boucle pour balayer la plage C4:C43
        Cells(k, 7) = Cells(k, 7).Value / 500 'On divise la somme des rand() par 500 pour avoir la moyenne
    Next k
     
    Application.Calculation = xlAutomatic 'On réactive le calcul automatique
     
    End Sub
    A+

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Par défaut
    Un très grand merci à toi, FVandermeulen.
    Merci d'avoir pris ton temps, d'avoir corrigé, de m'avoir expliqué.
    Formidable.
    Je vais continuer là dessus, et quand ce travail sera terminé, j'aurai plaisir à t'envoyer le fichier, car tu y as grandement contribué.

    Merci beaucoup.


Discussions similaires

  1. p'tite question de cryptage ( nombre aléatoire )
    Par smyley dans le forum Algorithmes et structures de données
    Réponses: 53
    Dernier message: 08/11/2004, 11h07
  2. Nombres aléatoires
    Par Mat 74 dans le forum Assembleur
    Réponses: 20
    Dernier message: 29/08/2004, 14h31
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 15h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 13h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 17h30

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