• Initiateur de la discussion Initiateur de la discussion mafaro
  • 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 !

M

mafaro

Guest
comment à partir d'une liste de nom dans un tableau effectuer automatiquement un autre tableau avec cette même liste mais modifiée dans son ordre: faire un tirage au sort qui soit différent à chaque demande de tirage au sort. :whistle:
 
Bonjour,
Comme on n'a pas beaucoup d'indication sur cette liste, la réponse est générique et à adapter :

Cette macro suppose que ta liste commence à la cellule A1 et que la colonne B est vide
En face de chaque nom la macro attribue un N° d'ordre :
Yapuka trier !
Sub Test()
Dim Tablo, i%, j%, k%, x%
Tablo = Range('A1:B' & Range('A1').End(xlDown).Row)
j = UBound(Tablo)
For i = 1 To j
Do
Tablo(i, 2) = Int(j * Rnd()) + 1
For k = 1 To i
If Tablo(k, 2) = Tablo(i, 2) Then x = x + 1
If x > 1 Then
x = 0
Exit For
End If
Next
Loop Until x = 1
x = 0
Next
Range('A1:B' & Range('A1').End(xlDown).Row) = Tablo
Tablo = Clear
End Sub
Ok ?
 
Bonjour Mafaro, dj62, Galopin01, le Forum

Une autre solution sans VBA

Bonne après-midi

PhiBou [file name=aleatoireMafaro.zip size=7198]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/aleatoireMafaro.zip[/file]
 

Pièces jointes

Bonsoir,
Dans le même gout que la précédente mais beaucoup plus rapide, la macro suivante prend les item de la colonne 1 et te les ressort dans un autre ordre en colonne B (5000 en 13 secondes !)
J'ai testé sur des nombres car je n'ai malheureusement pas de base de données ad'hoc mais je pense que ça ne fait pas de différence :
Attention pour exécuter correctement cette macro il faut mettre cette première ligne dans les déclarations du module avant toute macro : Option Base 1
Option Base 1

Sub test()
Dim Tablo, i%, j%, k%
Application.ScreenUpdating = False
i = Range('A1').End(xlDown).Row
ReDim Tablo(i)
For j = 1 To i
k = Int(((i + 1 - j) * Rnd) + 1)
Tablo(j) = Cells(k, 1)
Cells(k, 1).Delete Shift:=xlUp
Next
Range('B1:B' & i) = Application.Transpose(Tablo)
Tablo = Clear
End Sub
Nota :
A noter que dans la dernière ligne :
Range('B1:B' & i) = Application.Transpose(Tablo)
on peut remplacer B par A :
Range('A1:A' & i) = Application.Transpose(Tablo)
dans ce cas le tableau est purement et simplement remplacé par un autre tirage.

A+

Message édité par: galopin01, à: 19/04/2005 08:10
 
bonjour,dj62, phibou,galopin01,le forum,

je suis 'épaté' par les réponses proposées, moi qui ne prend pas le temps à me former aux macros ...
J'aurais du expliquer mon problème bien plutôt:

je gére une liste de noms(A2)et prénoms (B2);A1 et B1 étant titre nom et prenom.(excel 2000).Je pars d'un classeur vierge et j'y inscrit des noms au fur et à mesure.
Cette liste au départ n'est pas triée. j'ai donc un nombre X de noms et prénoms (maxi 100 pour l'instant....) sur 2 colonnes.
Je voudrais allouer un chiffre aléatoire à chaque noms (merci à galopin01 1° solution), si 30 noms....chiffres de 1 à 30.Ce 'nouveau tableau pouvant être trié par ces chiffres associés aux noms.
Ce que j'ai appelé: tirage au sort.

pour ta 2°proposition je suis dépassé car 'déclaration du module' est déjà trop fort pour moi....(très basique que je suis). Peux-tu m'expliquer comment faire??
Merci Phibou, les fonctions F9 et total des noms sont bien rapide, sans mes explications beau travail....que je ne saurais reprendre pour associer au macro de galopin01
 
re-bonjour (suite),
Avec un peu de reflexion j'ai réussi à mettre en place ta 2° propostion galopin01.Interressant. J'ai le choix maintenant entre 2 solutions : ou un chiffre est associé, ou les noms sont mis directement dans un ordre aléatoire. Bien.
J'opterai bien pour la premiére. Dans quelle ligne de la macro changer l'emplacement des chiffres (en C1)???
Merci
 
bonjour,
Comme ça entre 2 portes et sans vérif, pour un tirage en colonne C:

Option Base 1

Sub testC()
Dim Tablo, i%, j%, k%
Application.ScreenUpdating = False
i = Range('C1').End(xlDown).Row
ReDim Tablo(i)
For j = 1 To i
k = Int(((i + 1 - j) * Rnd) + 1)
Tablo(j) = Cells(k, 3)
Cells(k, 3).Delete Shift:=xlUp
Next
Range('C1:C' & i) = Application.Transpose(Tablo)
Tablo = Clear
End Sub

Sinon tu peux aussi essayer ça (toujours sans filet...)
En supposant que
colonne A contienne les noms et
colonne B les prenoms, cette macro devrait faire un tirage avec les noms, prenoms concaténés.
Il suffit de mettre au départ une copie de la liste des noms (ou des prénoms, ou des chiffres...) en colonne C
Il faut et il suffit qu'il y ait autant d'éléments dans chaque colonne.

Option Base 1

Sub testConc()
Dim Tablo, i%, j%, k%
Application.ScreenUpdating = False
i = Range('C1').End(xlDown).Row
ReDim Tablo(i)
For j = 1 To i
k = Int(((i + 1 - j) * Rnd) + 1)
Tablo(j) = Cells(k, 1) & ' ' & Cells(k, 2)
Range(Cells(k, 1), Cells(k, 2)).Delete Shift:=xlUp
Next
Range('C1:C' & i) = Application.Transpose(Tablo)
Tablo = Clear
End Sub

Ok ?

Message édité par: galopin01, à: 19/04/2005 23:17
 
remerci galopin01

essai de ta premiere macro :
elle me renvoie une erreur à la ligne 6 'trop d'arguments.....'
je n'ai pas testé le seconde car si je concatene il me faudra déconcaténé dans access..;alors là !!!??????


mais ce n'est pas grave j'ai, pour ma part, tout ce qu' il me faut. Ton premier jet a été le bon . j'ai juste changé la colonne où apparaît les chiffres (je la voulais en c).
je suis heureux, je vais pouvoir m'amuser à faire des tirages au sort........
Encore Merci..Excel et surtout galopin01
 
Bonsoir,
Ben, c'est curieux je viens de tester les 2 à la maison :
La première marche bien.
Quand à la deuxième la concaténation pose problème, mais j'avais vraiment fait çà la sauvette entre la poire et le café, c'est pas trop étonnant... mais je vais gratter dessus quand même !

Sinon, je pense qu'on peut valider la 1ére (TestC) quand même ¿

A+
 
Bonsoir,
Pour info je viens de modifier la deuxième (TestConC) qui concatène maintenant correctement les colonnes A et B
Attention ! Elle efface en même temps colonne A et B : ensuite c'est la première macro (testC) qui s'applique...
Compte tenu de la vitesse de travail je pense qu'on peut les conserver en archives.
Pour indication la toute première macro travaillait 3000 lignes en 35 '
J'en ai bricolé une autre assz performante également avec CountIF qui faisait aussi ses 3000 en 18 ' mais là l'algo est vraiment fantastique 5000 en 13 secondes c'est quasiment 10 fois plus rapide !
C'est toute la puissance des tableaux...
Bonne nuit !
A+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
1
Affichages
456
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
752
Réponses
1
Affichages
236
Réponses
14
Affichages
901
Retour