Tirage au sort de lots

Bonsoir, dans un cadre scolaire, je souhaite réutiliser le code contenu dans le VBA du lien sauf que je n'arrive pas à comprendre le fonction du code VBA du lien ci-dessous. Pouriez-vous me détailler la fonction de chaque ligne de code... J'apprecierais beaucoup votre aide!!! Merci

Voici le lien en question :

https://www.excel-pratique.com/fr/telechargements/utilitaires/tirage-au-sort-de-lots-no51.php

bonjour,

pas de lien

Bonjour MPANDEFA,

Le code VBA de l'exercice Excel-Pratique est celui-ci (j'ai ajouté les #N° devant pour faciliter l'explication) :

#01   'https://www.excel-pratique.com/fr/telechargements/utilitaires/tirage-au-sort-de-lots-no51.php
#02   Sub tirage()
#03       Randomize
#04       Range("B2:B" & Range("A1").End(xlDown).Row).ClearContents
#05       For i = 2 To Range("H1").End(xlDown).Row
#06           alea = Int(Rnd * (Range("A1").End(xlDown).Row - 1)) + 2
#07           If Cells(alea, 2) = "" Then
#08               Cells(alea, 2) = Cells(i, 8)
#09           Else
#10               i = i - 1
#11           End If
#12       Next
#13   End Sub

#01 La ligne commence par un caractère apostrophe « ' » ; c'est donc un commentaire ; ici un lien URL.

#02 La Sub s'appelle "tirage".

#13 Fin de la Sub "tirage".

#03 Randomize est une instruction pour initialiser le générateur de nombres aléatoires ; c'est utile, car ça évite que les séries de nombres « au hasard » soient toujours les mêmes ; j'ai mis des guillemets car il s'agit en fait de nombres « pseudo-aléatoires » puisque calculés selon une formule qui simule le hasard ; rappel : le vrai hasard fait que chaque nombre a exactement autant de chances de sortir qu'un autre : la probabilité de sortir est donc identique.

#04 Efface tous les résultats précédents, afin de ne pas mélanger les résultats d'un tirage à l'autre ; plage : B2:B & dernière ligne occupée ; donc pour l'exemple donné avec 34 participants : B2:B35.

#05 Boucle i : de la ligne 2 à la dernière ligne occupée de la colonne H ; ici, de 2 à 9 ; c'est pour prendre tous les prix en jeu, un par un ; il faudra ensuite affecter le prix à un participant, tout en évitant de lui attribuer plus d'un prix.

#12 Fin de la boucle, mais en fait, c'est mieux de préciser la variable de boucle ainsi : Next i (ça accélère l'exécution du code : VBA n'a pas à rechercher quelle est la variable qui correspond au For associé à Next car on la lui indique explicitement).

#06 La variable alea doit contenir un n° de ligne au hasard entre 2 et 35, pour choisir la ligne d'un des 34 participants. Soit un nombre aléatoire x à choisir entre les 2 bornes a et b ; alors : c = nombre de valeurs = b - a + 1 et formule pour tirer x : = Int(Rnd * c) + a ; c'est possible d'utiliser à la place : alea = WorksheetFunction.RandBetween(2, 35) : équivalent VBA de ALEA.ENTRE.BORNES().

#07 à #11 : si la cellule de destination est vide, c'est qu'on n'a attribué encore aucun prix au participant choisi au hasard, donc on peut le lui attribuer ; sinon (donc si la cellule de destination n'est pas vide), c'est qu'un prix a déjà été attribué au participant choisi au hasard, donc on ne lui en attribue pas un autre (ce qui d'ailleurs « écraserait » le prix précédent), et à la place, on décrémente i pour annuler une incrémentation de boucle qui a été faite « pour rien » puisque pas de prix attribué.

Bien sûr, ça aurait été mieux aussi de déclarer les deux variables i et alea avec un type entier.

Cordialement,

dhany

Bonsoir à vous Mr Dhany...

J'ai bien reçu votre explication, et c'est bien détaillé... et en conséquance, je tiens à vous adresser mes vifs rémerciements... Mais je me permets aussi d'être franche avec vous, car en vérité, je suis novice en la matière, alors qu'à l'école on nous démande de faire un travail qui pour moi, est vraiment pas facile. Et je suis vraiment content et réconnaissant de pouvoir compter sur votre aide, si besoin ultérieurement.

Vous rémercie beaucoup et vous souhaite une bonne soirée.

Bonsoir MPANDEFA,

Tu peux m'appeler dhany (sans écrire « Mr ») et me tutoyer ; merci ... pour tes vifs remerciements.

J'aide avec plaisir sur ce forum d'entraide quand j'en ai le temps et si j'ai une réponse valable à apporter ; donc tu peux compter sur moi ultérieurement si je suis disponible (ce qui n'est pas toujours le cas, car j'ai aussi d'autres occupations à côté).

Je te souhaite bonne chance pour tes études.

Bonne soirée à toi aussi,

dhany

Rechercher des sujets similaires à "tirage sort lots"