Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule vide

  • Initiateur de la discussion Initiateur de la discussion bellenm
  • 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 !

bellenm

XLDnaute Impliqué
Bonjour à tous,

Je cherchais un moyen pour trier aléatoirement une colonne, je l'ai trouver sur ce forum MAIS il y a une chose qui ne vas pas car ce système de tris fonctionne sur toute une colonne jusqu’à la fin de la feuille.

Hors j'ai une limite, une liste de nom à trier aléatoirement mais ce tri ne devrait plus prendre les noms ce situant après une cellule trouvée vide ou ayant une notification du style "***" .

Voici un exemple en fichier joint.

Merci d'avance pour le temps passer a me lire.

Marc..
 

Pièces jointes

Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Bonjour PAF et JHA,

pour PAF, excuse je joint le fichier qui ouvre aussi les macros necessaire la feuille se trouve dans l'onglet " TIRAGELISTING".
pour JHA, je ne comprend pas la méthode et ne vois pas où tu veux en venir.

Je vous explique ce que j'aimerais faire:
- dans un premier temps mais cela ne concerne pas ce problème, j'encode des noms sur une autre feuille "joueurs" pour les importer après avoir trier si le joueur est bien présent, résultat en colonne "A"
- sur cette feuille je les mélange aléatoirement pour obtenir la colonne "B".

Il faudrait que le tris aléatoire de cette colonne "A" s’arrête dés qu'il y a "***" car les noms mis après les trois "*" sont absent SAUF si le nombre atteint est impair alors insérer la ligne "***" elle servira de joker!
- ensuite il faudrait refaire un tris sur la colonne "m2:m13" et mettre le résultat dans la colonne "n2:n13" et également pour la suite "m16:m21" dans la colonne "n16:n21".

J'espère qu'on me comprend, c'est pour un tournoi de double avec maximun 24 participants joueurs tiré au sort pour chaque tour. Les joueurs ayant perdus leurs rencontres sont éliminé.

PS: si quelqu'un saurait comment bougé le petit cadre avec Tirage sur fond orange , merciiii.
Marc.
 

Pièces jointes

Dernière modification par un modérateur:
Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Re,

pour ne prendre, dans la colonne A de la feuille TIRAGELISTING, que jusqu'à la valeur "***", un essai:

dans la Sub TirageNoms():

remplacer
Code:
With Sheets("TIRAGELISTING")
lig = .Range("A65536").End(xlUp).Row
TabNom = .Range("A3:A" & lig)
.Range("B3:B" & lig).ClearContents
' Fin de liste
n = .Range("A65536").End(xlUp).Row
' Nombre de joueurs inscrits
Nbinscrits = n - 1
End With
par
Code:
With Sheets("TIRAGELISTING")
Set c = .Range("A:A").Find("~***", LookIn:=xlValues)
If c Is Nothing Then Exit Sub
TabNom = .Range("A3:A" & c.Row)
.Range("B3:B" & c.Row).ClearContents
' Fin de liste
' Nombre de joueurs inscrits
Nbinscrits = c.Row - 1
End With

pas regardé les implications de cette modif dans les résultats affichés

A+
 
Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Re bonjour PAF,

Ta solution fonctionne, il reste plus que le tri à faire sur les cellules "m3:m13 et m16:m21" et sachant que la les 3 * se transforme en "0" .

Tu aurais une idée sur le petit rectangle orange? (pour le suprimer)

Déjà merci pour la formule

Marc
 
Dernière modification par un modérateur:
Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Bonjour à tous,

Paf m'a résolu le premier problème, mais pourquoi même en modifiant le code pour les cellules adéquate à savoir le tri aléatoire sur la colonne "A" et le résultat sur la colonne "B" sur la feuille "TIRAGELISTING"

Mais il me reste deux tris aléatoire à faire sur les cellules "N2:N13" résultat en colonne "O2:O13"et une autre sur les cellules "N16:N21" résultat en " O16:O21".

voici ce qui a été fait pour le premier tri:
Code:
Sub TirageNoms()
Dim TabNom As Variant, temp As Variant, lig As Integer, i As Byte, j As Integer, k As Integer, l As Integer
Dim n As Integer, x As Double, Z As Byte, Nbinscrits As Byte
Randomize
With Sheets("TIRAGELISTING")
Set c = .Range("A:A").Find("~***", LookIn:=xlValues)
If c Is Nothing Then Exit Sub
TabNom = .Range("A3:A" & c.Row)
.Range("B3:B" & c.Row).ClearContents
' Fin de liste
' Nombre de joueurs inscrits
Nbinscrits = c.Row - 1
End With
' Mise en tableau des noms et des nombres aléatoires
ReDim Tablo(1 To UBound(TabNom), 1 To 3)
For j = 1 To UBound(TabNom)
        Tablo(j, 1) = Cells(j + 1, 1)
        Z = 0
            Do
            x = Rnd
               For k = 1 To j
               If Tablo(k, 2) = x Then
               Z = 0
               Else
               Z = 1
               End If
               Next k
            Loop Until Z = 1
        Tablo(j, 2) = x
        Tablo(j, 3) = x
    Next j
' Placer les nombres dans l'ordre décroissant dans la colonne 3 du tableau
For k = 1 To UBound(Tablo)
        For l = 1 To UBound(Tablo)
            If Tablo(k, 3) < Tablo(l, 3) Then
                    temp = Tablo(k, 3)
                    Tablo(k, 3) = Tablo(l, 3)
                    Tablo(l, 3) = temp
            End If
        Next l
Next k
' Mise en place des noms en colonne B
For i = 1 To UBound(Tablo)
      For j = 1 To UBound(Tablo)
         If Tablo(i, 3) = Tablo(j, 2) Then
         Cells(i + 1, 2) = Tablo(j, 1)
         End If
      Next j
Next i
End Sub

j'ai essayer pour le deuxième tri, mais il lance le débogueur et là je comprend pas où le code ne peut ce faire où ce n'est pas la bonne formule :
Code:
Sub TirageNoms2()
Dim TabNom As Variant, temp As Variant, lig As Integer, i As Byte, j As Integer, k As Integer, l As Integer
Dim n As Integer, x As Double, Z As Byte, Nbinscrits As Byte
Randomize
 ' voici le code de PAF que j'ai modifier avec les cellules adéquate mais ne fonctionne pas!
  With Sheets("TIRAGELISTING")
  Set c = .Range("N:N").Find("~***", LookIn:=xlValues)
  If c Is Nothing Then Exit Sub
  TabNom = .Range("N:N" & c.Row)
  .Range("O:O" & c.Row).ClearContents
  ' Fin de liste
  ' Nombre de joueurs inscrits
  Nbinscrits = c.Row - 1
  End With
' Mise en tableau des noms et des nombres aléatoires
ReDim Tablo(1 To UBound(TabNom), 1 To 3)
For j = 1 To UBound(TabNom)
        Tablo(j, 1) = Cells(j + 1, 1)
        Z = 0
            Do
            x = Rnd
               For k = 1 To j
               If Tablo(k, 2) = x Then
               Z = 0
               Else
               Z = 1
               End If
               Next k
            Loop Until Z = 1
        Tablo(j, 2) = x
        Tablo(j, 3) = x
    Next j
' Placer les nombres dans l'ordre décroissant dans la colonne 3 du tableau
For k = 1 To UBound(Tablo)
        For l = 1 To UBound(Tablo)
            If Tablo(k, 3) < Tablo(l, 3) Then
                    temp = Tablo(k, 3)
                    Tablo(k, 3) = Tablo(l, 3)
                    Tablo(l, 3) = temp
            End If
        Next l
Next k
' Mise en place des noms en colonne B
For i = 1 To UBound(Tablo)
      For j = 1 To UBound(Tablo)
         If Tablo(i, 3) = Tablo(j, 2) Then
         Cells(i + 1, 2) = Tablo(j, 1)
         End If
      Next j
Next i
End Sub

Quelqu'un aurait'il la solution ?

Merci

Marc
 
Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

re,

mais il lance le débogueur et là je comprend pas où le code ne peut ce faire...

il aurait été bien de préciser la ligne surligné en jaune par le 'debogueur'.

a priori, ça se situerait bien là:

.Range("O:O" & c.Row).ClearContents on précise la fin de la plage en colonne O, mais pas le début .

peut-être : .Range("O3:O" & c.Row).ClearContents

Bonne suite
 
Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Bonjour PAF,

j'ai essayer avec ".Range"O3:O" & c.Row).ClearContents" alors c'est la ligne juste au dessus qui buge j'ai donc mis "TabNom = .Range("N3:N" & c.Row)" mais alors c'est comme si je lançais ta formule et donc bien la colonne "B" qui ce met en tris et pas la colonne demandée "O".

Ou trouver la solution ou bien avec "alea()" pour cette rangée de donnée mais je cherche la formule sur le forum j'ai déjà et c'est simple su mettre de valeur aléatoire mais faut encore les trier après pour que les noms soit bien aléatoire tout en sachant que dès qu'il y a un "0" la liste est finie!

Merci d'avance
Marc.
 

Pièces jointes

Re : Tris aléatoire d'une colonne qui devrait se limiter jusqu'à la première cellule

Bonjour à Tous,

- PAF j'ai réfléchis pendant le WE et peut-être trouvé solution mais pour ce faire il me faudrait la même liste que la colonne "B" mais non Trier en colonne "AC"

voici le code de départ avec une seul modification dans le nom de "Find" j'ai rajouter"FIN DE LISTE ***"

Code:
Sub TirageNoms()
Dim TabNom As Variant, temp As Variant, lig As Integer, i As Byte, j As Integer, k As Integer, l As Integer
Dim n As Integer, x As Double, Z As Byte, Nbinscrits As Byte
Randomize
With Sheets("TIRAGELISTING")
Set c = .Range("A:A").Find("~*** FIN DE LISTE ***", LookIn:=xlValues)
If c Is Nothing Then Exit Sub
TabNom = .Range("A3:A" & c.Row)
.Range("B3:B" & c.Row).ClearContents
' Fin de liste
' Nombre de joueurs inscrits
Nbinscrits = c.Row - 1
End With
' Mise en tableau des noms et des nombres aléatoires
ReDim Tablo(1 To UBound(TabNom), 1 To 3)
For j = 1 To UBound(TabNom)
        Tablo(j, 1) = Cells(j + 1, 1)
        Z = 0
            Do
            x = Rnd
               For k = 1 To j
               If Tablo(k, 2) = x Then
               Z = 0
               Else
               Z = 1
               End If
               Next k
            Loop Until Z = 1
        Tablo(j, 2) = x
        Tablo(j, 3) = x
    Next j
' Placer les nombres dans l'ordre décroissant dans la colonne 3 du tableau
For k = 1 To UBound(Tablo)
        For l = 1 To UBound(Tablo)
            If Tablo(k, 3) < Tablo(l, 3) Then
                    temp = Tablo(k, 3)
                    Tablo(k, 3) = Tablo(l, 3)
                    Tablo(l, 3) = temp
            End If
        Next l
Next k
' Mise en place des noms en colonne B
For i = 1 To UBound(Tablo)
      For j = 1 To UBound(Tablo)
         If Tablo(i, 3) = Tablo(j, 2) Then
         Cells(i + 1, 2) = Tablo(j, 1)
         End If
      Next j
Next i
End Sub

Merci de me dire si c'est faisable ou pas.

Merci d'avance.

Marc
 
- 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

M
Réponses
2
Affichages
728
A
Réponses
17
Affichages
3 K
AlexandreB94
A
C
Réponses
8
Affichages
1 K
CHTING
C
W
Réponses
1
Affichages
820
E
Réponses
3
Affichages
4 K
eldorado
E
Retour