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 :

Utilisation de la Fonction Rand () avec des conditions


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Utilisation de la Fonction Rand () avec des conditions
    Bonjour,

    Je suis nouveau sur ce forum et tenais a me présenter avant tout. Je me nomme Bobi et suis novice dans la programmation VBA Excel. J'aurais une requête concernant l'utilisation de la fonction Rand () d'Excel (ma version d'Excel est en anglais). En fait, je souhaiterais créer une macro qui me permettrait de générer aléatoirement des valeurs pour des critères de choix de produit et qui respecterait un certain nombre de contraintes.
    Imaginons un nombre de critères allant jusqu'a 5 (ce nombre peut aller jusqu’à 8). Les contraintes sont les suivantes: 1) La génération de chaque valeur de critère devrait respecter un ordre de grandeur (classement) établi par le client qui veut acheter le produit tel que par exemple: si le critère 1 est préféré (ou égal) au critère 2; critère 2 est préféré (ou égal) au critère 3...jusqu'au critère 5, alors les valeurs respectives des critères devraient suivrent cet ordre de classement. 2) La valeur pour chaque critère doit varier entre 0 et 1; 3) La somme des critères doit être égale a 1. 4). Pour chaque critere, generer 1000 valeur aleatoire respectant les contraintes précitées. Faire la moyenne des valeurs pour chaque critere et produire la variance associée a chaque moyenne ainsi que son intervalle de confiance.

    J'apprecierais vraiment votre aide.

    Bobi

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    La difficulté concerne je pense seulement les 3 premiers points. Voici une procédure qui réalise un tirage avec les conditions 1 à 3, et pour une liste de n critères, n étant variable .
    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
    Sub subAlea(ByRef sngTab As Variant)
    'réalise un tirage entre 0 et 1 pour chaque élément de sngTab qui doit être un tableau 1 dimension
    'le total des valeurs tirée est ramené à 1
    'les valeurs sont triées de la plus grande à la plus petite
     
    Dim sngTot As Single
    Dim sngMax As Single
    Dim i As Integer, j As Integer, jMax As Integer
     
    'tirage des valeurs brutes, chacune entre 0 et 1
    Randomize
    For i = LBound(sngTab, 1) To UBound(sngTab, 1)
        sngTab(i) = Rnd
        sngTot = sngTot + sngTab(i)
    Next i
     
    'ramener la somme à 1
    For i = LBound(sngTab, 1) To UBound(sngTab, 1)
        sngTab(i) = sngTab(i) / sngTot
    Next i
     
    'trier
    For i = LBound(sngTab, 1) To UBound(sngTab, 1) - 1
        sngMax = 0
        For j = i To UBound(sngTab, 1)
            If sngMax < sngTab(j) Then
                sngMax = sngTab(j)
                jMax = j
            End If
        Next j
        sngTab(jMax) = sngTab(i)
        sngTab(i) = sngMax
    Next i
     
    End Sub
    L'argument de la procédure est une liste de dimension variable. Le premier index peut être O, 1 ou ce que tu veux. On affecte chaque index à un critère dans l'ordre d'importance des critères.
    Pour réaliser un tirage, tu peux par exemple faire :
    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 test()
    Dim sng(1 To 8) As Single
    Dim s As String
    Dim i As Integer
     
    Call subAlea(sng)
     
    s = sng(1)
    For i = 2 To 8
        s = s & ";" & sng(i)
    Next i
     
    Debug.Print s
    End Sub
    J'ai obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0,1733588;0,146215;0,1320548;0,1298985;0,1152831;0,1142225;0,1111151;7,785229E-02
    Il te reste à réaliser le code qui appelle 1000 tirages et réalise les stats.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Remerciements
    Bonjour PGZ,

    Je tiens a te remercier encore une fois pour ton aide. Je comprends la logique de ton code sauf que je tente de l'executer dans excel 2013 version anglaise 2013, j'ai ce message d'erreur '' argument not optional''. J'ai joint le fichier excel que j'ai et apprecierais que tu me dises ce que je devrais corriger.
    Merci.
    Code subAlea.xlsx
    Bobi

  4. #4
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Je veux bien regarder, mais tu as joint un classeur .xlsx et je ne m'attends pas à y trouver du code !

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Code vba
    Bonjour PGZ,

    Merci pour ton message. Le nouveau fichier joint contient le code vba. Tu pourras voir le code dans le visual basic editor, sous le projet code subAlea 2.

    Merci.

    Code subAlea 2.xlsm

    Bobi

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonjour,

    Sur qu'elle ligne l'erreur ?

    poste cette ligne ici entre balises de codes [code][/code]

  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Pour l'instant tu as simplement recopié la procédure subAlea, mais aucune procédure d'appel comme test() d'un précédent message.
    Il n'y a plus qu'à ...

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

Discussions similaires

  1. [XL-2010] Fonction aleatoire (rand) avec multi conditions
    Par askan dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/11/2012, 18h55
  2. utilisation de la fonction "deconv" avec des inconnues
    Par tcheck_vi dans le forum MATLAB
    Réponses: 11
    Dernier message: 27/07/2009, 19h49
  3. [RegEx] Utilisation de la fonction "preg_match_all" avec des apostrophe ou des œ
    Par arnaudperfect dans le forum Langage
    Réponses: 4
    Dernier message: 16/08/2008, 23h05
  4. Réponses: 5
    Dernier message: 28/04/2006, 14h40
  5. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 21h06

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