Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 VBA remise a zero

jilooou

XLDnaute Junior
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
 

Pièces jointes

  • Copie de tirage-exercice-crise.xls.xlsm
    25.9 KB · Affichages: 9

Deadpool_CC

XLDnaute Accro
Bonjour,

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 :
une synthèse de exercice réalisé par nom prénom

A+
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Deadpool, le fil,

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
 

Deadpool_CC

XLDnaute Accro
@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
 

soan

XLDnaute Barbatruc
Inactif

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 B sauf B1 ; 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 !

soan
 
Dernière édition:

Jean-Eric

XLDnaute Occasionnel
Bonjour,
Une proposition 365 et 2021.
Série aléatoire de 30 DPU sans doublon.
A adapter. F9 pour relancer le calcul
Cordialement.

=INDEX(TRIERPAR(d.pdu;TABLEAU.ALEA(NBVAL(d.pdu)));SEQUENCE(LIGNES(s.participants)))
 

Pièces jointes

  • Copie de tirage-exercice-crise.xls.xlsm
    38.6 KB · Affichages: 5

soan

XLDnaute Barbatruc
Inactif
Bonsoir jilooou, le fil,

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 11 derniers 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 11 derniers 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 42même longueur que la colonne Hy'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 30 premiers 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

soan
 

Pièces jointes

  • Copie de tirage-exercice-crise.xls.xlsm
    26.1 KB · Affichages: 8
Dernière édition:

jilooou

XLDnaute Junior

merci
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…