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

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 !

urbanito1

XLDnaute Occasionnel
bonsoir au forum,

je cherche un moyen de ne pas avoir de doublons dans un petit tri aléatoire
je joins mon fichier sur base de ce que je déjà trouvé
en vous remerciant
urbanito1
 

Pièces jointes

Re : Tri aleatoire

Bonsoir,
si j'ai bien compris ta demande, une idée en PJ.
A+
 

Pièces jointes

Re : Tri aleatoire

Bonsoir urbanito1, david84, phlaurent55,

Un autre essai basé sur une macro avec paramètres. Je n'ai jamais apprécié les mélanges basés sur les formules dont on ne maitrise pas complètement les moments où elles seront recalculées (c'est une opinion perso 😱)

Le code est dans module1. la macro "générique" s'utilise comme suit:
melanger Vecteur_Source, Cellule_Destination [,TRUE, FALSE ou Absent]
.

  • le premier paramètre est la plage à mélanger (zone à une seule colonne ou une seule ligne)
  • le deuxième paramètre est la cellule de destination
  • le troisième paramètre indique la forme du résultat :
    • si FAlSE ou absent, le résultat est analogue à la source (si source en ligne alors résultat en ligne, si source en colonne alors résultat en colonne)
    • si TRUE, le résultat est transposé par rapport à la source (si source en ligne alors résultat en colonne, si source en colonne alors résultat en ligne )

Cliquer sur les boutons roses pour mélanger. Voir utilisation dans le fichier dans module1.
 

Pièces jointes

Dernière édition:
Re : Tri aleatoire

Bonsoir à tous,

Visiblement, on ne comprends pas tous la même chose 😛
Un essai :
VB:
Sub Essai1()
    Application.ScreenUpdating = False
    Cells(1).CurrentRegion.Clear
    ReDim a(1 To 4)
    For i = 1 To 5
        For j = 1 To 4
            a(j) = j
        Next j
        For j = 1 To 4
            k = Int((4 - j + 1) * Rnd() + j)
            x = a(j)
            a(j) = a(k)
            a(k) = x
            Cells(j + 1, i).Value = a(j)
        Next j
    Next
    Cells(1).Resize(, 5) = [{"Lundi","Mardi","Mercredi","Jeudi","Vendredi"}]
    With Cells(1).CurrentRegion
        .Rows(1).BorderAround ColorIndex:=1, Weight:=xlThin
        .Rows(1).Interior.ColorIndex = 44
        .BorderAround ColorIndex:=1, Weight:=xlThin
        .Borders(xlInsideVertical).Weight = xlThin
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
    End With
    Application.ScreenUpdating = True
End Sub
Si j'ai bien compris, il y a 4 éléments donc 24 permutations possibles.
Evidemment comme c'est aléatoire, tu peux te retrouver avec des permutations identiques🙄
klin89
 

Pièces jointes

Re : Tri aleatoire

Bonjour,
un essai via une fonction personnalisée en passant par un dictionnaire :
Code:
Function Mélanger(Plage As Range, Optional transposer As Boolean = False)
Dim Dico As Object, Tablo(), i As Long

Set Dico = CreateObject("scripting.dictionary")
Tablo = Plage
Randomize
Do
  i = Int((Plage.Count * Rnd) + 1)
  If Not Dico.exists(Tablo(i, 1)) Then Dico(Tablo(i, 1)) = ""
Loop Until Dico.Count = Plage.Count
If transposer Then
  Mélanger = Application.Transpose(Dico.keys)
Else
  Mélanger = Dico.keys
End If
End Function

Sélectionner la plage à traiter et passer le 2ème argument à VRAI si l'on veut les données en lignes (sinon ne rien préciser ou le passer à FAUX).
Validation matricielle.
A+
 
Re : Tri aleatoire

Re urbanito1

Sur la base de mon fichier, Feuil1 en colonne H et I à partir de la ligne 1, tu crées une table de correspondance.
Comme ceci :
H1 = 1 : I1 = Vincent
H2 = 2 : I2 = Claire
H3 = 3 : I3 = Sandra
H4 = 4 : I4 = Paul

Puis tu exécutes cette macro :
VB:
Sub remplace()
    Dim r As Range
    For Each r In Sheets("Feuil1").Range("H1").CurrentRegion.Columns(1).Cells
        Sheets("Feuil1").Range("A1").CurrentRegion.Replace r.Value, r(, 2).Value, 1
    Next
End Sub
Une autre façon de procéder sans passer par une table de correspondance dans le tableur :
VB:
Sub remplace1()
    tablo1 = Array(1, 2, 3, 4)
    tablo2 = Array("Vincent", "Claire", "Sandra", "Paul")
    Set Rng = Sheets("Feuil1").Range("A1").CurrentRegion
    For i = 0 To 3
        Rng.Replace tablo1(i), tablo2(i), 1
    Next
End Sub
Klin89
 
Dernière édition:
Re : Tri aleatoire

le forum
david84, klin89 merci

(je reviens après pour la proposition de david84)

pour klin89
la méthode 2 (deuxième macro ) fonctionne et je peux modifier

la méthode 1 ( première macro ) non: c'est juste pour essayer de comprendre ce qui cloche

merci
 

Pièces jointes

Re : Tri aleatoire

Bonjour,
ci-joint un essai comportant 2 formules personnalisées :
Mixmat permet un mélange aléatoire des données.
MixSansDoublonMat permet la même chose mais sans conserver les éventuels doublons.

Pour MixMat je suis parti de l'idée de permutation de mapomme.
Pour MixSansDoublonMat j'ai intégré un dictionnaire.

La plage des résultats peut être :
- 1 ligne * x colonnes
- 1 colonne * x lignes
- x lignes * x colonnes

Si vous détectez des bugs merci de me les signaler.
A+
 

Pièces jointes

Dernière édition:
- 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
5
Affichages
258
Réponses
2
Affichages
165
Réponses
3
Affichages
202
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…