XL 2019 Classement list aléatoire -USF

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

  • xld - Classement Liste aléatoire.xlsm
    19.1 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonsoir gg13,

Vous ne vous êtes pas cassé la tête avec votre USF !

Je l'ai complété avec des OptionButtons, voyez le fichier joint.

Il s'ouvre en non modal quand on ouvre le fichier.

Edit : bonsoir Bernard.

A+
 

Pièces jointes

  • xld - Classement Liste aléatoire.xlsm
    21.4 KB · Affichages: 7
Dernière édition:

Dranreb

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

  • ListeAléatGg13.xlsm
    27.9 KB · Affichages: 5

gg13

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

gg13

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

  • xld - Classement Liste aléatoire(3).xlsm
    45.4 KB · Affichages: 4

Dranreb

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

  • ListeAléatGg13.xlsm
    53.6 KB · Affichages: 2

Dranreb

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

  • ListeAléatGg13.xlsm
    52 KB · Affichages: 3

gg13

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

  • 2 -ListeAléatGg13.xlsm
    49.3 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 132
Membres
103 127
dernier inscrit
willwebdesign