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 :

Boucle nombre aleatoire [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut Boucle nombre aleatoire
    Bonjour et bonne année

    Avec la fonction Randomize et Int((9 * Rnd) + 1) je sais choisir aléatoirement un chiffre entre 1 et 9

    Mais voilà ce que je ne sais pas faire c'est faire 4 choix à la suite sans reprendre le même chiffre.

    Mon but est de colorier en bleu 4 cellules par ligne entre les colonnes de A à I (de 1 à 9) sur 1500 lignes
    et j'aimerai ne pas faire deux boucles une pour les lignes et une pour les colonnes.

    Exemple :
    - Pour le premier nombre : un chiffre compris entre 1 et 9 on dira que c'est 5
    - Pour le deuxième nombre : un chiffre entre 1 et 9 sans le 5 donc de la suite 1 2 3 4 6 7 8 9 on dira que c'est 1
    - Pour le troisième nombre : un chiffre entre 1 et 9 sans le 5 et le 1 donc de la suite 2 3 4 6 7 8 9 on dira que c'est 8
    - Pour le quatrième nombre : un chiffre entre 1 et 9 sans le 5 le 1 et le 8 donc de la suite 2 3 4 6 7 9

    Voici la macro que j'utilise, mais je pense qu'elle peut être plus rapide en enlevant la boucle sur j

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Randomize
    With Worksheets("Grilles")
    For i = 1 To 1500
    For j = 1 To 4
    k = Int((9 * Rnd) + 1)
    If Cells(i, k).Interior.ColorIndex = 8 Then j = j - 1 else Cells(i, k).Interior.ColorIndex = 8
    Next j
    Next i
    End With
    Merci pour votre aide

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour et bonne année


    bon personellement j'utiliserai un tableau mémoire

    Voici un code à titre d'exemple :
    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
    Option Base 1
     
    Public Tablo() As String            'Tableau contenant les valeurs de 1 à 9
    Public Mes_Supp                     'Tableaux des valeurs à supprimer à la place du random
    Public i As Integer, j As Integer   'Index de déplacement dans les tableaux
     
    Sub charg_tablo()
        'imaginons que les positions à supprimer sont 5 puis 1 puis 8 que l'on met dans un tableau
        Mes_Supp = Array("5", "1", "8")
     
        'Chargement du tableau contenant les valeur de 1 à 9
        ReDim Tablo(9)
        For i = 1 To 9
            Tablo(i) = Trim(Str(i))
        Next
     
        Stop
        'pour le tableau allant de 1 à la dernière valeur du tableau
        For j = 1 To UBound(Mes_Supp)
            For i = 1 To UBound(Tablo())
     
                'si la valeur du tableau : Tablo = la valeur du tableau : Mes_Supp
                If Tablo(i) = Mes_Supp(j) Then
                    'suppression de la valeur du tableau
                    Tablo(i) = ""
                    'tri pour que la valeur vide soit à la fin
                    Tri_Tablo
                    'redimentionne le tableau plus petit de 1
                    ReDim Preserve Tablo(UBound(Tablo()) - 1)
     
                End If
            Next
        Next
        Stop
    End Sub
     
    Sub Tri_Tablo()
        For i = 1 To UBound(Tablo())
            If Tablo(i) = "" And i < UBound(Tablo()) Then
                Tablo(i) = Tablo(i + 1)
                Tablo(i + 1) = ""
            End If
        Next
    End Sub
    tu dis :
    ... Mon but est de colorier en bleu 4 cellules par ligne entre les colonnes de A à I (de 1 à 9) sur 1500 lignes
    et j'aimerai ne pas faire deux boucles une pour les lignes et une pour les colonnes...
    en adaptant ma méthode tu peux récupérer dans un tabeau les colonnes à coloriés et donc y accéder directement (mais tu auras une boucle dans le tableau je vois pas comment faire autrement que 2 boucles

    une autre solution consisterait d'utiliser les statistiques
    les lois Binomiale, Normale, Poisson ... seraient adapté pour résoudre ton problème (prende un N° sans remise ...)

    Seulement cela fait plus de 30 ans que j'y ai pas toucher et j'ai franchement oublié

    As toi de voir

    tu dis

    A bientôt

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Une solution simple a été donnée dans plusieurs discussions :
    1) "touiller" aléatoirement les articles de l'array
    2) en extraire les n premiers éléments voulus

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Par défaut
    Bonjour,

    La discussion simple est introuvable car avec les mots aléatoire et array j'ai plus d'une trentaine de page dans tous les langage et surtout en Python...

    Mais bon je vais bidouiller...

    Merci quand même

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Ma proposition ne te convients pas ?

    Le ARRAY est juste présent pour la saisie on peut facilement le remplacer par un INPUTBOX

    un tableau que tu diminue à chaque passage Je vous pas ou est le problème

    C'est simple il me semble

    tu dis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/12/2016, 15h07
  2. Nombres aléatoires
    Par bdaboah dans le forum C
    Réponses: 10
    Dernier message: 05/10/2005, 11h04
  3. [langage] générer un nombre aléatoire gaussien
    Par kayari dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2005, 08h12
  4. nombres aleatoires en plsql
    Par al85 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 29/03/2005, 19h07
  5. nombre aleatoire
    Par Bob dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2002, 18h12

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