Listes aléatoires

bonjour,

J'ai un liste de 30 élèves et une liste de 36 questions. Je souhaite tirer aléatoirement 3 élèves et attribuer à chacun 4 questions sans doublons.

Pour la première liste j'ai trouvé sur le net la combinaison de deux fonctions " =INDEX($A$1:$A$30;ALEA.ENTRE.BORNES(1;30))" mais j'ai des doublons pour tirer les 5 élèves. la meme formule est utilisée pour tirer les questions avec des doublons aussi.

Quelqu'un a une idée?

Merci d'avance

Bonsoir,

Un petit fichier illustrant le problème dans lequel je pourrais te mettre en place une fonction qui tire sans doublon !

Cordialement.

Bonsoir,

Un petit fichier illustrant le problème dans lequel je pourrais te mettre en place une fonction qui tire sans doublon !

Cordialement.

Bonsoir,

ci joint un fichier fictif

merci d'avance

Cordialement

Re,

Tu trouveras dans ton classeur en retour :

- une fonction personnalisée intitulé TIRAGESELEC

[une fonction personnalisée est une macro VBA de type Function destinée à être utilisée comme fonction de feuille de calcul]

Cette fonction réclame un argument : le nombre d'éléments parmi lesquels on tire.

Elle s'utilise sur une plage de cellule à une ligne ou une colonne, qui doit être sélectionnée avant de taper la formule, et de la valider pour l'ensemble de la plage sélectionnée par la combinaison Ctl+Maj+Entrée (c'est une fonction matricielle). Elle renvoie autant de résultats parmi les nombres de 1 à la valeur de l'argument qui lui a été passé, sans doublons (si on lui passe en argument un nombre inférieur à 1, elle renverra l'erreur #NOMBRE?, et si le nombre de cellules sélectionnées est supérieur au nombre passé en argument, les cellules supplémentaires recevront la valeur #N/A).

Les nombres ainsi tirés, sont utilisés dans une fonction INDEX pour renvoyer un nom.

La fonction n'est pas volatile, elle ne se recalcule pas à chaque recalcul, de façon qu'on puisse maîtriser le tirage réaliser sans le voir se modifier à n'importe quel moment...

- pour la raison ci-dessus, j'ai ajouté une macro ordinaire qui réinsère les formules de tirage :

Sub RéactTirage()
    With ActiveSheet
        .Range("D5:D16").FormulaArray = "=TIRAGESELEC(30)"
        .Range("G5:G16").FormulaArray = "=TIRAGESELEC(16)"
    End With
End Sub

Cette macro est associée à un bouton sur la feuille, qui permet donc de réactiver le tirage ou le renouveler.

De ce fait, si les plages indiquées dans lesquelles on tire ou si le nombre d'éléments parmi lesquels on tire, sont modifiés, c'est dans ce code qu'il conviendra d'opérer les modifications.

- les colonnes sur lesquelles se fait le tirage sont masquées.

NB- Du fait des cellules fusionnées que je ne pouvais supprimer, j'ai étendu le tirage élèves correspondant en D sur 12 lignes de façon que la formule affichant les noms en E soit recopiable en la tirant simplement vers le bas (elle s'incrémente du nombre de lignes fusionnées à chaque fois). [Ce qui n'est pas gênant puisqu'on est bien en dessous du nombre d'élèves.]

Cordialement.

Bonjour,

Merci beaucoup MFerrand.

C 'est parfait. J'ai réussi à élargir le nombre des questions et ça tourne. Je peux adapter le fichier à mes besoins. Merci encore.

Par contre si je peux abuser de votre aide, je sèche toujours sur le tirage de N ( 5 à 7 ) élèves tirés au hasard dans une liste sans doublons. Je souhaite ramasser entre 5 et 7 devoirs maisons censés être faits par toute une classe de 30 élèves.

Cordialement

Le principe reste le même, que tu en tires 4, 5 ou 7. La particularité dans ton modèle où on en tirait 4 à afficher dans des cellules fusionnées en E, lesquelles occupent en fait 12 cellules dont 4 seulement peuvent recevoir une valeur.

Pour avoir le numéro tiré en regard des cellules utiles pour l'affichage des noms, on tirait sur la plage de 12 cellules contiguës, dont 4 seulement était utilisés. ce qui ne gêne en rien tant que le nombre d'éléments tirés reste inférieur ou égal au nombre d'éléments tirables. Si on dépassait, il faudrait réduire la plage de tirage et ajuster les formules dans les cellules fusionnées...

NB- On pourrait incorporer la fonction personnalisée matricielle dans la fonction INDEX, elle y fournirait l'index de ligne pour renvoyer le nom. Mais pas dans des cellules fusionnées qui interdisent l'utilisation de formules matricielles. Et d'autres part, relancer le calcul impliquerait manuellement de resélectionner la plage, se repositionner dans la zone de formule pour l'éditer, et la revalider par Ctrl+Maj+Entrée, ce qui de façon répétée deviendrait fastidieux. On l'évite avec une petite macro qui réinsère la formule matricielle, mais elle doit se limiter à réinsérer une formule ne comprenant que la fonction personnalisée, car Excel rejette une formule composée l'utilisant avec d'autres fonctions (alors que cela fonctionne manuellement). D'où la généralisation de la méthode en deux temps, tirage dans des plages dédiées au tirage, et affichage dans les plages destinataires à partir des numéros tirés. Méthode en deux temps qui était de toute façon obligée pour les cellules fusionnées...

Cordialement.

Effectivement , c est plus clair avec votre explication.

Merci

Rechercher des sujets similaires à "listes aleatoires"