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 :

Répéter une macro à valeur aléatoire en fonction d'une InputBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Par défaut Répéter une macro à valeur aléatoire en fonction d'une InputBox
    Bonjour à tous,

    Voilà, mon objectif est de répéter une macro préalablement inscrite (qui génère des valeurs aléatoires) sur un nombre défini dans une InputBox.

    Simplement, je voudrais copier coller une macro qui génère des valeurs aléatoires sur la plage "B2:B7", une colonne sur deux à droite, en fonction d'un nombre inscrit dans une inputbox.

    Voici ma macro qui génère les valeurs aléatoirement en "B2:B7" et qu'il faut exécuter une colonne sur deux vers la droite jusqu'au nombre que j’inscris dans mon input box qui apparaît au départ :

    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
    Const plage = "B2:B7"
    Const total = 100
    Const mini = 0
    Const maxi = 100
     
    Sub thib()
     
    i = InputBox("nombre de simulation")
     
    Dim n As Long, tot As Long, a As Long, k As Long, d As Long, T
    If Range(plage).Columns.Count > 1 Then Exit Sub
    n = Range(plage).Cells.Count
    ReDim T(1 To n)
    tot = 0
    For k = 1 To n
    	a = mini + Int((maxi - mini + 1) * Rnd)
    	tot = tot + a
    	T(k) = a
    Next k
    If tot < total Then
    	d = total - tot
    	For k = 1 To d
    		a = 1 + Int(n * Rnd)
    		If T(a) < maxi Then
    			T(a) = T(a) + 1
    		Else
    			k = k - 1
    		End If
    	Next k
    ElseIf tot > total Then
    	d = tot - total
    	For k = 1 To d
    		a = 1 + Int(n * Rnd)
    		If T(a) > mini Then
    			T(a) = T(a) - 1
    		Else
    			k = k - 1
    		End If
    	Next k
    End If
    Range(plage) = Application.Transpose(T)
     
    End Sub
    SI quelqu'un pouvait me dépanner..... je suis encore que débutant....

    Un grand merci à vous,
    A+

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 153
    Par défaut
    Bonjour,

    Avant de te répondre, je te recommande fortement d'indenter ton code pour en améliorer la lisibilité.

    Tu trouveras ci-dessous une proposition qui devrait résoudre ton problème :

    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
    Const plage = "B2:B7"
    Const total = 100
    Const mini = 0
    Const maxi = 100
     
    Option Explicit
     
    Sub thib()
     
     
        Dim n As Long, tot As Long, a As Long, k As Long, d As Long, T() As Integer
        Dim i As Long
        Dim ColonneOffset As Long
     
        Application.Calculation = xlCalculationManual
     
        i = InputBox("nombre de simulation")
        If Range(plage).Columns.Count > 1 Then Exit Sub
     
        For ColonneOffset = 0 To i
            n = Range(plage).Cells.Count
            ReDim T(1 To n)
            tot = 0
            For k = 1 To n
                a = mini + Int((maxi - mini + 1) * Rnd)
                tot = tot + a
                T(k) = a
            Next k
            If tot < total Then
                d = total - tot
                For k = 1 To d
                    a = 1 + Int(n * Rnd)
                    If T(a) < maxi Then
                        T(a) = T(a) + 1
                    Else
                        k = k - 1
                    End If
                Next k
            ElseIf tot > total Then
                d = tot - total
                For k = 1 To d
                    a = 1 + Int(n * Rnd)
                    If T(a) > mini Then
                        T(a) = T(a) - 1
                    Else
                        k = k - 1
                    End If
                Next k
            End If
            Range(plage).Offset(0, ColonneOffset * 2) = Application.Transpose(T)
        Next ColonneOffset
        Application.Calculation = xlCalculationAutomatic
    End Sub
    Poulpe

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2019
    Messages : 5
    Par défaut Grand merci
    Bonjour Mr POULPE,

    Je vous suit très reconnaissant pour cette réponse rapide !! Votre code fonctionne comme demander !!! Je prend note de votre conseil à l'avenir !!
    Encore une fois merci à vous et bonne suite,

    Sky

Discussions similaires

  1. [XL-2007] Répéter une macro selon la valeur d'une ComboBox
    Par Jeromeric dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/12/2011, 13h02
  2. Macro répéter une Actualisation sans arret
    Par loic.logidis dans le forum IHM
    Réponses: 4
    Dernier message: 23/05/2008, 15h37
  3. Generateur aléatoire en fonction d'une somme
    Par tdenis13860 dans le forum C++
    Réponses: 13
    Dernier message: 08/05/2008, 18h47
  4. un fonction qui retourne une valeur aléatoire
    Par houwa dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 02/03/2008, 20h27
  5. Réponses: 2
    Dernier message: 09/11/2007, 10h18

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