Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Une p'tite MACRO VBA

OlivGM

XLDnaute Occasionnel
Bonjour et bon lundi,

Je souhaiterais la création d'un code pour remplir un rectangle de nombres (sans doublon et sans classement ).
J'ai essayé avec "Alea entre bornes" mais ce fut un véritable échec. J'ai excel 2007 chez moi pour info.
Ce qui m'importe surtout est la vitesse d'exécution du code VBA.
Le code le plus rapide sera donc l'élu! (un chrono serait bien à ajouter pour savoir le temps d'affichage des 80 nombres simultanés)!!

MERCI
O.

ps: s'il y a trop d'écart de temps entre la production de 10 et 8 lignes de nombres, je me contenterai de 8 lignes (64 nombres).
 

Pièces jointes

  • Classeur2.xlsx
    7.9 KB · Affichages: 8

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@OlivGM

Au vu du fichier ce que tu demandes est impossible :



Chez moi 10 lignes de 8 numéros = 80
Et tu veux remplir ta grille sans doublon avec des nombres de 1 à 70 = 70

Y a comme un BIG problème !!!

Donc structure tes idées et repose le problème comme il faut.
De plus si c'est fait avec formule il n'y a pas de possibilité de mettre un chrono sur une formule.

Et juste en passant remplir 70 ou 80 nombres dans une grille c'est du quasi instantané ( de l'ordre de quelques centièmes de seconde ) j'en conclu que ce que tu veux faire ne correspond pas du tout à ce que tu demandes.

Bonne lecture
 

OlivGM

XLDnaute Occasionnel
Bonjour Xupsilon et Phil69970,
Je reformule:
Un code VBA (non une formule) qui remplirait un rectangle de 10 lignes de 8 nombres = 80 nombres.
Chaque ligne comporte 8 nombres compris entre 1 à 70 sans doublon.
Est-ce plus clair ainsi?
 

patricktoulon

XLDnaute Barbatruc
Bonjour
par vba un simple routine
le principe est simple
je met mes 80 num dans l'ordre et je les melange
il ne peut pas y avoir de doublons de cette manière
même si j'utilise la fonction RND à l'interieur du code
VB:
Sub test()
    Dim tbl(1 To 10, 1 To 8), I&, C&, X&, col&, Lig&
    For I = 1 To 10
        For C = 1 To 8
            X = X + 1
            tbl(I, C) = X
        Next
    Next
    For I = 1 To 10
        For C = 1 To 8
            Lig = Int(1 + (Rnd * 9))
            col = Int(1 + (Rnd * 7))
            tmp = tbl(I, C): tbl(I, C) = tbl(Lig, col): tbl(Lig, col) = tmp
        Next
    Next
    [u6].Resize(10, 8) = tbl
End Sub
 
Dernière édition:

OlivGM

XLDnaute Occasionnel
Bonjour Patricktoulon,
Macro rapide en effet.....mais les nombres vont de 1 à 70 sur chaque ligne et non 80.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai compris avec un tirage différent à chaque ligne, ou plus exactement très peu probablement identique à un autre, même dans un ordre différent.
Ma solution.
 

Pièces jointes

  • ListeAléatOlivGM.xlsm
    29.7 KB · Affichages: 4
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
donc si on considére q'un num peut se trouver sur plusieur ligne
alors ce sera une variante de mon premier exemple
VB:
Sub test()
    Dim I&, C&, X&, col&, Lig&, tbl()
    Randomize

    ReDim Preserve tbl(1 To 10, 1 To 70)
    For C = 1 To 70: For I = 1 To 10: tbl(I, C) = C: Next: Next


    For I = 1 To 10
        For C = 1 To 8
            col = Int(1 + (Rnd * 70))
            tmp = tbl(I, C): tbl(I, C) = tbl(I, col): tbl(I, col) = tmp
        Next
    Next
    [u6].Resize(10, 8) = tbl
End Sub
 

OlivGM

XLDnaute Occasionnel
Rebonjour a tous et grand merci.

Je regarderai tout a lheure, je suis en ville sur mon telephone,

Bien sur, il peut y avoir des doublons dans le rectangle mais pas sur une même ligne sinon un numero n'apparaitrait qu'une fois et c'est pas le but! Le principal atout est sa rapidité. La sortie ordonnée n'est pas utile.
Bon am
O.

Ps: Dranreb tu avais fait un alea qui comparait avec une base de 3 lignes extrêmement rapide que j'avais telechargée au cas où... Il me faut la retrouver.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Un autre code ? :
VB:
Sub cest_parti()
Dim t(1 To 10, 1 To 8), talea(1 To 70), nt&, na&, i&, j&, k&, n&, aux&
   Randomize: nt = UBound(t, 2): na = UBound(talea)
   For k = 1 To na: talea(k) = k: Next
   For i = 1 To UBound(t)
      For k = 1 To na: n = 1 + Int(Rnd * na): aux = talea(k): talea(k) = talea(n): talea(n) = aux: Next
      For j = 1 To nt: t(i, j) = talea(j): Next
   Next i
   Range("u6").Resize(UBound(t), nt) = t
End Sub
 

Pièces jointes

  • OlivGM- matrice alea- v1.xlsm
    16.3 KB · Affichages: 3

Modeste geedee

XLDnaute Barbatruc
une proposition :
 

Pièces jointes

  • GD_Keno.xlsx
    124 KB · Affichages: 4
  • monkeno.xlsm
    44.6 KB · Affichages: 0
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…