Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Bonjour,
Je dois réalisé un tirage au sort pour effectuer des tests et j'aimerai ajouter deux options
La plus importante remise à zéro et l'autre une synthèse de exercice réalisé par nom prénom.
Merci
c'est vague comme demande ...
1) remise à zéro c'est quoi pour toi ... juste effacement de la colonne B ou il faut en plus reconstituer "PDU testé" d'origine ? ( un range("B2:b31").ClearContents + l'équivalent d'un "copier/coller" des valeurs originales "pdu testé" que tu auras ailleurs dans la feuille ou une autre feuille
2) je comprend pas ce que tu attends comme résultat pour :
au cas où il s'agit d'un tirage sans remise, je pense que « remise à zéro » signifie ceci :
a) une fois que toutes les boules du sac ont été tirées sans les y avoir remises, ça fait que le sac est vide et donc on ne peut plus faire de tirage !
b) remise à zéro ➯ on remet toutes les boules dans le sac pour pouvoir continuer à jouer ! prêts ? alors comme au casino : « faites vos jeux ! »
@soan ...
dans son fichier un tirage prend une valeur dans un colonne, l'affecte alea face à un nom dans une autre colonne et l'efface de la colonne d'origine ... donc c'est déjà sans remise en jeu de la valeur.
pour voir => dans son fichier clique plein de fois sur le gros bouton ... lol
dans son fichier un tirage prend une valeur dans un colonne, l'affecte alea face à un nom dans une autre colonne et l'efface de la colonne d'origine ... donc c'est déjà sans remise en jeu de la valeur.
pour voir => dans son fichier clique plein de fois sur le gros bouton ... lol
j'ai vu le fichier ; ça prend dans l'ordre les données STE-PDU-0001 à STE-PDU-0041 de la colonne H et ça les affecte aléatoirement en colonne B ; comme juste après, ça supprime de la colonne H l'item qui vient d'être affecté en colonne B, c'est bien un tirage sans remise ; donc à la fin, quand tout a été tiré, il faut faire une réinitialisation(via un autre bouton) pour tout remettre comme c'était au départ :
a)effacer le contenu de toute la colonne BsaufB1 ; plus simplement : [B2:B31].ClearContents
b) en H2:H42, remettre les valeurs STE-PDU-0001 à STE-PDU-0041 : utiliser une boucle, ou mieux : utiliser .AutoFill ; j'ai pas l'temps d'le faire maint'nant, mais j'suis sûr que Deadpool saura très bien le faire !
Dsl j'ai aussi un taf rémunéré à faire ... lol
mais vu sa macro et tes explications, je suis sur qu'il va réussier à faire ce bout de code de quelques lignes, et ajouter un bouton pour la lancer
ta sub Tirage() initiale comportait des erreurs, et j'ai préféré la réécrire entièrement ; j'en ai profité pour choisir une méthode plus efficace, selon laquelle c'est tout à fait inutile de modifier la colonne H : pas de suppressions, donc pas besoin de la réécrire pour une remise à zéro.
d'autre part, ceci est très important : tu es bien d'accord avec moi que ta sub Tirage() initiale mettait en colonne B, de façon aléatoire, les items de la colonne H lus successivement et dans cet ordre : H2 ; H3 ; H4 ; H5 ; H6 ; etc... or compare la longueur des 2 listes : en colonne H, de H2 à H42, il y a 41 items, de "STE-PDU-0001" à "STE-PDU-0041" ; en colonne B, de B2 à B31, il y a de la place pour 30 items ; conclusion : on va pouvoir écrire les 30 premiers items de la liste de la colonne H : "STE-PDU-0001" à "STE-PDU-0030" ; mais ensuite, c'est fini ! car y'a plus de place en colonne B pour y mettre les 11derniers items de la colonne H : "STE-PDU-0031" à "STE-PDU-0041".
mode d'emploi : clique plusieurs fois sur le bouton "Tirage" ; tu peux aussi faire Ctrl t : c'est plus simple ! quand tout sera plein à gauche, fais encore une fois Ctrl t, et lis le message de la boîte de dialogue ; clique sur le bouton OK pour en sortir ; pour faire la remise à zéro (initialisation), fais Ctrl i ; lis le message de la boîte de dialogue, et clique sur OK ; tu peux voir que ça a remis comme c'était au début ➯ c'est prêt pour de nouveaux tirages : à toi de jouer de nouveau avec Ctrl t !
du fait qu'y'a pas assez d'place en colonne B pour les 11derniers items de la colonne H, tu voudras peut-être allonger la liste des colonnes A:B ? ça ferait 11 lignes de plus ➯ ça irait jusqu'en ligne 42 ➯ même longueur que la colonne H ➯ y'aura la place d'écrire tous les items de la colonne H en colonne B ; mais peut-être que ton tirage au sort est du style : « seuls les 30premiers participants au jeu auront le droit de recevoir un cadeau, Maître Huissier Jilooou ayant été mandaté pour contrôler le bon déroulement du tirage au sort » ? remarque : les salariés de l'entreprise n'ont pas le droit de participer au jeu, car c'est réservé pour le public !
si besoin, tu peux demander une adaptation ; à te lire pour avoir ton avis.
code VBA de ThisWorkbook (3 lignes) :
VB:
Private Sub Workbook_Open()
T(2) = 255: TblInit
End Sub
code VBA de Module1 (30 lignes) :
VB:
Option Explicit
Public T(2 To 31) As Byte, j As Byte
Sub TblInit()
If T(2) < 255 Then
Feuil1.CommandButton_tirage.Caption = "Tirage"
MsgBox "Initialisation des tirages", 64, "Remise à Zéro"
End If
Dim i As Byte: [B2:B31].ClearContents: Randomize
For i = 2 To 31: T(i) = i: Next i: j = 1
End Sub
Sub Tirage()
Dim n As Byte, i As Byte
Do
For i = 2 To 31
If T(i) > 0 Then n = 1: Exit For
Next i
If n = 0 Then _
MsgBox "La plage verte des résultats est pleine.", _
64, "Terminé !": GoTo Fin
n = Int(30 * Rnd) + 2: If T(n) > 0 Then T(n) = 0: Exit Do
Loop
Feuil1.CommandButton_tirage.Caption = Cells(n, 1)
j = j + 1: Cells(n, 2) = Cells(j, 8)
Fin:
ActiveCell.Select 'désélectionne le bouton
End Sub
c'est vague comme demande ...
1) remise à zéro c'est quoi pour toi ... juste effacement de la colonne B ou il faut en plus reconstituer "PDU testé" d'origine ? ( un range("B2:b31").ClearContents + l'équivalent d'un "copier/coller" des valeurs originales "pdu testé" que tu auras ailleurs dans la feuille ou une autre feuille
2) je comprend pas ce que tu attends comme résultat po
ta sub Tirage() initiale comportait des erreurs, et j'ai préféré la réécrire entièrement ; j'en ai profité pour choisir une méthode plus efficace, selon laquelle c'est tout à fait inutile de modifier la colonne H : pas de suppressions, donc pas besoin de la réécrire pour une remise à zéro.
d'autre part, ceci est très important : tu es bien d'accord avec moi que ta sub Tirage() initiale mettait en colonne B, de façon aléatoire, les items de la colonne H lus successivement et dans cet ordre : H2 ; H3 ; H4 ; H5 ; H6 ; etc... or compare la longueur des 2 listes : en colonne H, de H2 à H42, il y a 41 items, de "STE-PDU-0001" à "STE-PDU-0041" ; en colonne B, de B2 à B31, il y a de la place pour 30 items ; conclusion : on va pouvoir écrire les 30 premiers items de la liste de la colonne H : "STE-PDU-0001" à "STE-PDU-0030" ; mais ensuite, c'est fini ! car y'a plus de place en colonne B pour y mettre les 11derniers items de la colonne H : "STE-PDU-0031" à "STE-PDU-0041".
mode d'emploi : clique plusieurs fois sur le bouton "Tirage" ; tu peux aussi faire Ctrl t : c'est plus simple ! quand tout sera plein à gauche, fais encore une fois Ctrl t, et lis le message de la boîte de dialogue ; clique sur le bouton OK pour en sortir ; pour faire la remise à zéro (initialisation), fais Ctrl i ; lis le message de la boîte de dialogue, et clique sur OK ; tu peux voir que ça a remis comme c'était au début ➯ c'est prêt pour de nouveaux tirages : à toi de jouer de nouveau avec Ctrl t !
du fait qu'y'a pas assez d'place en colonne B pour les 11derniers items de la colonne H, tu voudras peut-être allonger la liste des colonnes A:B ? ça ferait 11 lignes de plus ➯ ça irait jusqu'en ligne 42 ➯ même longueur que la colonne H ➯ y'aura la place d'écrire tous les items de la colonne H en colonne B ; mais peut-être que ton tirage au sort est du style : « seuls les 30premiers participants au jeu auront le droit de recevoir un cadeau, Maître Huissier Jilooou ayant été mandaté pour contrôler le bon déroulement du tirage au sort » ? remarque : les salariés de l'entreprise n'ont pas le droit de participer au jeu, car c'est réservé pour le public !
si besoin, tu peux demander une adaptation ; à te lire pour avoir ton avis.
code VBA de ThisWorkbook (3 lignes) :
VB:
Private Sub Workbook_Open()
T(2) = 255: TblInit
End Sub
code VBA de Module1 (30 lignes) :
VB:
Option Explicit
Public T(2 To 31) As Byte, j As Byte
Sub TblInit()
If T(2) < 255 Then
Feuil1.CommandButton_tirage.Caption = "Tirage"
MsgBox "Initialisation des tirages", 64, "Remise à Zéro"
End If
Dim i As Byte: [B2:B31].ClearContents: Randomize
For i = 2 To 31: T(i) = i: Next i: j = 1
End Sub
Sub Tirage()
Dim n As Byte, i As Byte
Do
For i = 2 To 31
If T(i) > 0 Then n = 1: Exit For
Next i
If n = 0 Then _
MsgBox "La plage verte des résultats est pleine.", _
64, "Terminé !": GoTo Fin
n = Int(30 * Rnd) + 2: If T(n) > 0 Then T(n) = 0: Exit Do
Loop
Feuil1.CommandButton_tirage.Caption = Cells(n, 1)
j = j + 1: Cells(n, 2) = Cells(j, 8)
Fin:
ActiveCell.Select 'désélectionne le bouton
End Sub
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.