XL 2019 Classement list aléatoire -USF

  • Initiateur de la discussion Initiateur de la discussion gg13
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gg13

XLDnaute Occasionnel
Bonsoir,
Je reprends cette discussion suivant les conseil de Job 75 en précisant que je cherche à intégrer cette macro dans un USF.
Sur le fichier joint crée par Job 75 la macro de classement est lancée par un bouton sur la feuille lié à une cellule
Je voudrai que cette macro soit en fait déclenchée par un bouton sur un USF et pas par un bouton sur la feuille.
J'ai utilisé la,méthode enregistrement de macro pour voir comment l'écrire mais le classement est déclenché sans enregistrer quoi que ce soit donc je ne sais pas lancer la macro par USF sans utiliser les boutons sur la feuille1

Le but de la macro est de faire un classement de trois listes différentes avec chacune un nombre de lignes différent récuperé dans trois cellules.
J'ai ajouté un USF au fichier fourni par Job75.
Merci.
GG13
 

Pièces jointes

Le code qui utilise un ListeAléat évoqué dans une autre discussion :
VB:
Private Sub CommandButton1_Click()
   Dim LAt As New ListeAléat, TNomsE(), TNomsS(), C As Integer, L As Long
   For C = 1 To 7 Step 3
      TNomsE = Cells(2, C).Resize(Cells(250, C).End(xlUp).Row - 1).Value
      Randomize
      LAt.Init UBound(TNomsE, 1)
      ReDim TNomsS(1 To LAt.Count, 1 To 1)
      For L = 1 To LAt.Count
         TNomsS(LAt.Aléat(L), 1) = TNomsE(L, 1)
         Next L
      Cells(2, C + 1).Resize(LAt.Count).Value = TNomsS
      Next C
   End Sub
 

Pièces jointes

Job 75
Merci pour cette nouvelle version qui fonctionne très bien.
Pour le USF j'ai fais plusieurs essais sans aucun résultat donc je n'ai laissé que le bouton sans toutes mes élugubrations.
Je ne comprends pas ces macros merci à vous tous car elles permettent d'être plus rapide et efficace que les boucles VBA classiques.
GG13
 
Bonjour,
Je reprends un fil de la semaine avec une aide de Job 75.
Je cherche à adapter cette routine à mon programme car je dois utiliser des colonnes, feuilles et lignes différentes de l’exemple ci-joint.
Mais malgré plusieurs essais je n’y arrive pas.
Je pensais que en changeant les chiffres après Target je pourrais modifier les colonnes et lignes d’affichages des classements.
Mais je ne comprends pas ce que représentent ces chiffres.

Application.ScreenUpdating = False
With Target(2, 0).Resize(Target(1, 2) - 1)
tablo = .Value
.Formula = "=RAND()"
.Columns(2) = tablo
.Resize(, 2).Sort .Cells, Header:=xlNo 'tri
.Value = tablo
End With

J’ai cherché sur les aides, beaucoup d’exemples mais pas vraiment d’explications pour les chiffres.
Merci de votre aide si vous connaissez la réponse.
GG13
 

Pièces jointes

Bonjour.
Avec mon ListeAléat :
VB:
Option Explicit
Private Sub CommandButton1_Click()
   Dim I As Byte, Target As Range, LAt As New ListeAléat, TNomsE(), TNomsS(), L As Long
   For I = 1 To 3
      If Me("OptionButton" & I) Then
         Set Target = Feuil1.Cells.Find("Tirage " & I, , xlValues, xlWhole)
         Exit For: End If
      Next I
   If Target Is Nothing Then Exit Sub
   Randomize
   LAt.Init Target(1, 2).Value
   TNomsE = Target(2, 0).Resize(LAt.Count).Value
   ReDim TNomsS(1 To LAt.Count, 1 To 1)
   For L = 1 To LAt.Count
      TNomsS(L, 1) = TNomsE(LAt.Aléat(L), 1)
      Next L
   Target(2, 1).Resize(1000).ClearContents
   Target(2, 1).Resize(LAt.Count).Value = TNomsS
   End Sub
 

Pièces jointes

Si c'est bien comme ça qu'il fallait l'interpréter :
Code:
Private Sub CommandButton1_Click()
   Dim I As Byte, Target As Range, LAt As New ListeAléat, TNomsE(), TNomsS(), LMax As Long, L As Long
   For I = 1 To 3
      If Me("OptionButton" & I) Then
         Set Target = Feuil1.Cells.Find("Tirage " & I, , xlValues, xlWhole)
         Exit For: End If
      Next I
   If Target Is Nothing Then Exit Sub
   TNomsE = Target(2, 0).Resize(Target(1000000, 0).End(xlUp).Row - 1).Value
   Randomize
   LAt.Init UBound(TNomsE, 1)
   LMax = Target(1, 2).Value
   ReDim TNomsS(1 To LMax, 1 To 1)
   For L = 1 To LMax
      TNomsS(L, 1) = TNomsE(LAt.Aléat(L), 1)
      Next L
   Target(2, 1).Resize(1000).ClearContents
   Target(2, 1).Resize(LMax).Value = TNomsS
   End Sub
 

Pièces jointes

Merci pour vos réponses, je ne comprends rien aux modules de classes mais ça fonctionne très bien.

J’ai supprimé le choix avec OptionButton car les 3 listes seront calculées en même temps et j’ai donc
affecté la macro au bouton sur la feuille.

Par contre le nombre de noms à classer peut être quelconque mais le tirage ne doit se faire que sur le même nombre de noms afin que tous le noms apparaissent et pas des cases vides.

Si 20 noms à classer les mêmes 20 noms apparaissent dans un ordre diffèrent.

Je joins le fichier modifié.

GG13
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
441
Réponses
6
Affichages
511
Retour