XL 2016 Générer des codes aléatoires à une liste d'élèves

stuka

XLDnaute Nouveau
Salut tout le monde;

J'ai une liste de noms et de prénoms d'élèves que je veux codifier en attribuant un code à chaque élève. Deux élèves ou plus peuvent avoir le même nom ou le même prénom mais chaque élève doit avoir un seul code (donc le même code doit figurer une seule fois sur ma liste et attribué à un seul élève). J'ai essayé de travailler avec la fonction ALEA mais j'ai eu des nombres qui se répètent, ce qui est faux dans mon cas.
Je vous joins donc un exemple en fichier Excel comme exemple qui récapitule le travail demandé.
  1. 1er cas: Générer des nombres entiers aléatoires (ne doivent pas contenir de décimales) qui contiennent 04 chiffres avec bornes inférieure (0000) et supérieure (9999);
  2. 2e cas: Générer des nombres entiers aléatoires multiples de 5 (ne doivent pas contenir de décimales) qui contiennent 04 chiffres avec bornes inférieure (0005) et supérieure (9995);
  3. 3e cas: Générer des nombres entiers aléatoires multiples de 10 (ne doivent pas contenir de décimales) qui contiennent 04 chiffres avec bornes inférieure (0010) et supérieure (9990);
  4. 4e cas: Générer des nombres entiers aléatoires multiples de 10 (ne doivent pas contenir de décimales) qui contiennent 04 chiffres avec bornes inférieure (1300) et supérieure (9650).
Est-ce que je dois faire appel à une macro (qui est difficile pour moi car je suis un débutant) ou je dois appliquer des combinaisons à la fonction ALEA pour chaque cas? Je vous prie donc de m'aider à concevoir mon fichier et vous en remercie vivement au préalable.

Sincères salutations!
 

Pièces jointes

  • Code aléatoire.xlsx
    90.2 KB · Affichages: 13

jm.andryszak

XLDnaute Occasionnel
Un exemple pour les multiples de 5 adaptable aux autres cas

Bonne journée

Option Explicit
Sub AleaMultipleDe5()
Dim DicoMultiple As Object
Dim DicoEleve As Object
Dim i
'Précaution le nombre d'élèves (699) est < au nombre de multiples de 5 de 5 à 9995 (1999)

'Multiple de 5 de 5 à 9995
Set DicoMultiple = CreateObject("Scripting.Dictionary")
Randomize
'j = 1
While DicoMultiple.Count < 9995 / 5
i = ((Int(Rnd() * 9995 / 5)) * 5) + 5
If Not DicoMultiple.exists(i) Then
DicoMultiple.Add Key:=i, _
Item:=i
End If
Wend

'Index pour chaque élève (669 élèves)
Set DicoEleve = CreateObject("Scripting.Dictionary")
Randomize
While DicoEleve.Count < 669
i = (Int(Rnd() * 669))
If Not DicoEleve.exists(i) Then
DicoEleve.Add Key:=i, _
Item:=i
End If
Wend

'Code pour chaque élève (669 élèves)
For i = 2 To 669 +1 'On commence à la ligne 2
Range("e" & i) = DicoMultiple.keys()(DicoEleve.keys()(i - 2))
Next
End Sub
 

dysorthographie

XLDnaute Accro
Bonjour,
VB:
Sub test()
Dim Multi5 As New Collection, I As Integer, Rn As Integer
For I = 5 To 9995 Step 5
    Multi5.Add I
Next
Randomize Format(Timer, "0")
With Sheets("Code aléatoire multiple de 5").Range("A1").CurrentRegion
    For I = 2 To .Rows.Count
        Rn = Int(Multi5.Count * Rnd + 1)
        .Cells(I, "E") = "'" & Format(Multi5(Rn), "0000")
        Multi5.Remove Rn
    Next
End With

End Sub
 

stuka

XLDnaute Nouveau
Bonjour tout le monde;

Tout d'abord, je tiens à vous remercier vivement pour votre précieuse aide et vos travaux.

Comme je vous l'ai dit, mon utilisation d'Excel ne dépasse pas le stade de créer des tableaux avec des calculs très simples (addition, multiplication, division, calcul d'une moyenne, ...).

Pour mieux insérer les codes VBA proposés, j'ai suivi des vidéos sur Youtube et j'ai activé l'onglet "Développeur" sur Excel, puis j'ai cliqué sur Visual Basic ensuite, menu contextuel sur Feuil 1 puis insertion module et j'ai fait copier-coller le programme proposé par jm.andryszak, et une autre fois celui proposé par dysorthographie mais j'ai eu des erreurs. Même Excel m'envoyais un message qu'il ne peut pas se fermer. Malheureusement, je suis très novice dans le VBA et les macros d'Excel.

Aussi, je voudrais préciser une chose, ce que je veux c'est avoir la possibilité de changer le code à chaque fois parce que je dois travailler avec plusieurs classes et d'après les travaux que vous m'avez envoyés, j'ai constaté que le code attribué à l'élève ne change pas. Donc, si plusieurs élèves de classes différentes ont le même rang (les même cases) sur le tableau Excel, ils vont certainement avoir le même code et c'est ce que je veux éviter. Je veux donc, à chaque fois des codes différents pour des listes différentes.

Je vous renouvelle tous mes vifs remerciements pour vos efforts et vous prie de m'excuser.

Excellente journée à vous tous.



 

dysorthographie

XLDnaute Accro
Bonjour Stuka,
ça vas sans dire mais ça va toujours mieux en le disant tu travail pas sur MAC?

beaucoup de personne travail sur Windows et moi qui n'es vue des MAC que de très loin ne sais pas si mon code fonctionne sur MAC!

dans la fenêtre des projet du fait un click droit sur modules=>insertion =>Module
et tu copy col le code dans l'editeur de texte qui s'auvre.

1658329415242.png
 

Dranreb

XLDnaute Barbatruc
Ne manquez pas de me dire ce que vous souhaiteriez comme boutons de commande sur les feuilles de mon ListeAlStuka.xlsm. Actuellement le code est dans les modules des objets Worksheet représentant les feuilles. En particulier la dernière est assez complète, mais le code ne reconstruit pas la formule si le nombre d'élèves change.
 

stuka

XLDnaute Nouveau
Re-bonjour;

Merci pour toutes vos explications. Aujourd'hui, j'ai fait un grand pas. J'ai pu insérer et exécuter une macro sur Excel! et ce, avec votre soutien et vos explications. Un très grand merci de ma part pour vous tous!

Je m'excuse une nouvelle fois dysorthographie. J'ai pu réaliser mon travail à l'aide de votre programme mais pour l'adapter à toutes les situations, j'ai fait ceci:
1. pour que la macro soit appliquée à une feuille du classeur j'ai changé le nom que j'ai mis en rouge suivant la feuille où doit être appliqué le code, et j'ai bien réussi:
With Sheets("Code aléatoire multiple de 5").Range("A1").CurrentRegion

2. Pour limiter les bornes "min" et "max" des nombres à générer, je n'ai pas su le faire.
3. Même chose pour générer des multiples d'un autre nombre que 5. Par exemple: mettre n'importe quel nombre aléatoire, un multiple de 3, de 7 ou de 10. Il m'est impossible de le faire. Lorsque j'ai fait des changements et après exécution, j'ai obtenu le code d'erreur 424 avec la possibilité de débogage fin.

Je vous prie donc de bien vouloir m'indiquer ce que je dois changer pour adapter ce programme à d'autres situations telles que la situation 2 ou 3 suscitées.

Je vous réitère toutes mes excuses et vous présente tous mes vifs remerciements pour votre aide.

Sincères salutations!
 

dysorthographie

XLDnaute Accro
en factorisant on peut aménager pour les 3 cas de figure!
Code:
Sub test()
Aleatoir Sheets("Code aléatoire multiple de 5"), 5
Aleatoir Sheets("Code aléatoire multiple de 10"), 10
Aleatoir Sheets("Code aléatoire multiple de 10b"), 10, 1300
End Sub
Sub Aleatoir(Sht As Worksheet, Pas As Integer, Optional Strat As Integer = 0)
Dim Multi As New Collection, I As Integer, Rn As Integer
With Sht.Range("A1").CurrentRegion
For I = 1 To .Rows.Count - 1
    Multi.Add Strat - IIf(Strat = 0, 0, Pas) + (I * Pas)
Next
Randomize Format(Timer, "0")
    For I = 2 To .Rows.Count
        Rn = Int(Multi.Count * Rnd + 1)
        .Cells(I, "E") = "'" & Format(Multi(Rn), "0000")
        Multi.Remove Rn
    Next
End With

End Sub
 

Dranreb

XLDnaute Barbatruc
Je n'ai laissé qu'une feuille et mis des noms aux cellules.
Pour refaire un tirage, sélectionnez la cellule Graine.
À part ça vous pouvez changer comme vous voulez le Mini, le Maxi et le Pas.
J'ai aussi ajouté un CommandButton pour supprimer ou rétablir la formule, afin de ne pas être gêné pour ajouter ou supprimer des élèves.
Vous pouvez aussi prendre des copies de la feuille pour d'autres élèves avec des conditions différentes.
Dites moi ce que vous en pensez.

Préfèreriez vous qu'il n'y ait qu'un bouton Tirage qui mette des valeurs au lieu d'une formule matricielle ?
 

Pièces jointes

  • ListeAlStuka.xlsm
    58.9 KB · Affichages: 16
Dernière édition:

stuka

XLDnaute Nouveau
Je ne sais pas comment vous remercier pour votre aide. Merci Merci Merci du fond du cœur pour votre aide!
Juste une petite remarque pour Dranreb, lorsque je génère des nombres avec un pas de 3, 6, 7, 8 ou 9, je n'obtiens pas des multiples de ces chiffres mais ce n'est que le pas qui est calculé ainsi. Ce n'est pas trop grave, l'essentiel c'est que j'ai obtenu des codes différents pour chaque élève.

Merci infiniment pour vous tous et bonne continuation!
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 279
Membres
103 170
dernier inscrit
HASSEN@45