Autres Une p'tite MACRO VBA

  • Initiateur de la discussion Initiateur de la discussion OlivGM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Bonjour à tous

@OlivGM

Au vu du fichier ce que tu demandes est impossible :

1701075498066.png


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
 
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?
 
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:
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
Bonjour Patricktoulon,
Macro rapide en effet.....mais les nombres vont de 1 à 70 sur chaque ligne et non 80.
 
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
 
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.👍
 
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

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).
une proposition :
1701101165620.png
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour