XL 2019 Classement aleatoire.

gg13

XLDnaute Occasionnel
Bonjour,
Je fais suite à une discussion de la semaine et d'une proposition de JDH. (merci encore)
Sur le fichier joint, la limite de classement est définie ( ligne11) mais en fait la zone à classer est variable.
Je voudrais que cette limite soit lue dans une cellule mais aprés plusieurs essais je ne sais pas à comment l'écrire.
Merci de votre aide.
GG13
 

Pièces jointes

  • Classement Liste aléatoire.xlsm
    24.1 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonsoir gg13,

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target <> "Tirage" Then Exit Sub
Dim tablo
Cancel = True
Application.ScreenUpdating = False
With Range(Target(2, 0), Cells(Rows.Count, Target.Column - 1).End(xlUp))
    tablo = .Value
    .Formula = "=RAND()"
    .Columns(2) = tablo
    .Resize(, 2).Sort .Cells, Header:=xlNo 'tri
    .Value = tablo
End With
End Sub
Elle se déclenche quand on fait un double-clic sur une cellule Tirage.

A+
 

Pièces jointes

  • Classement Liste aléatoire.xlsm
    17.7 KB · Affichages: 7

gg13

XLDnaute Occasionnel
Bonjour,
Je réponds un peu tard weekend occupé.
Merci Job 75 pour la réponse qui fonctionne très bien.
Mais est-il possible de lire le nombre de Rows dans une cellule plutôt que utiliser la formule

Cells(Rows.Count, Target.Column - 1).End(xlUp))

soit les récuperer dans C1 , F1 , I1 , par exemple et de dire row=Range("C1").Value...............
GG13
 

job75

XLDnaute Barbatruc
Bonsoir gg13,
soit les récuperer dans C1 , F1 , I1 , par exemple et de dire row=Range("C1").Value...............
est-il possible de lancer cette macro plutôt par un bouton que un doubleclic dans la cellule.
Formule en C1 du fichier joint :
Code:
=EQUIV("zzz";A:A)
Les valeurs sous A1 doivent être des textes.

Il y a 3 boutons avec cette unique macro :
VB:
Sub Tirage()
If IsError(Application.Caller) Then Exit Sub
Dim Target As Range, tablo
With Feuil1 'CodeName
    Set Target = .Range(.Shapes(Application.Caller).TopLeftCell.Address)
End With
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
End Sub
A+
 

Pièces jointes

  • Classement Liste aléatoire(1).xlsm
    20.3 KB · Affichages: 4

gg13

XLDnaute Occasionnel
Bonsoir gg13,


Formule en C1 du fichier joint :
Code:
=EQUIV("zzz";A:A)
Les valeurs sous A1 doivent être des textes.

Il y a 3 boutons avec cette unique macro :
VB:
Sub Tirage()
If IsError(Application.Caller) Then Exit Sub
Dim Target As Range, tablo
With Feuil1 'CodeName
    Set Target = .Range(.Shapes(Application.Caller).TopLeftCell.Address)
End With
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
End Sub
A+
Bonsoir Job 75
Merci pour ton aide.
Cette solution marche très bien sur la feuille .
Le classement sera en fait déclenché par un bouton sur un USF (je n'ai posté que la partie classement pour simplifier).
J'ai utilisé la,méthode enregistrement de macro pour voir comment l'écrire mis le classement est déclenché sans enregistrer quoi que ce soit donc je ne sais pas lancer ta macro par USF sans utiliser les boutons sur la feuille1
J'espère avoir été assez clair .
Merci.
GG13
 

Statistiques des forums

Discussions
312 236
Messages
2 086 477
Membres
103 232
dernier inscrit
logan035