Nombres dans le désordre

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

Claudy

XLDnaute Accro
Bonjour à tous,
Cinq nombres de 1 à 20 , cellules A1 à E1 Comment avoir dans les cellules G1 à K1 les mêmes nombres mais dans un ordre différent et cela de manière aléatoire??
Exemple:
A1 à E1: 12 3 14 1 20

G1 à K1: 14 20 1 12 3

Merci d'avance, Claudy
 
Re : Nombres dans le désordre

Bonjour,

Une solution avec des cellules intermédiaires :

On a 5 nombres de A1 à E1.

En A2, cette formule :

Code:
=ALEA()

à recopier jusque E2

En G1, cette formule :

Code:
=INDEX($A$1:$E$1;RANG(A2;$A$2:$E$2))

à recopier jusque K1

La ligne 2 peut être masquée.


Bon WE

@+
 
Re : Nombres dans le désordre

Bonjour, resalut Tibo

De façon aléatoire fait penser à la fonction ALEA ou ALEA.ENTRE.BORNES, mais il y a deux problèmes : les doublons et la mise à jour du résultat à chaque validation d'une cellule quelconque du fichier.

Il existe sous les macros complémentaires MOREFUNC la fonction ALEAS qui solutionne ces deux problèmes.
Sélectionner G1:K1
Saisir : =ALEAS(5;;;VRAI) à valider en matricielle (Ctrl+Maj+Entrée)
En G2 : =DECALER($A1;G1) à étirer vers la droite.

abcd
 
Re : Nombres dans le désordre

Bonjour à tous.

Solution avec une Macro.

1. Placez le code suivant dans la feuille concernée :
Code:
Sub MELANGE()
Dim dest, o, d, i As Long, j As Long, s
    Me.Activate
    o = InputBox("Zone d'origine (première cellule:dernière cellule) :", , Selection.Address)
    If o = "" Then Exit Sub
    d = InputBox("Zone de destination (adresse de la première cellule) :")
    If d = "" Then Exit Sub
    Set dest = Me.Range(Me.Range(d).Cells(1, 1), Me.Range(d).Cells(1, 1).Offset(Me.Range(o).Rows.Count - 1, Me.Range(o).Columns.Count - 1))
    Application.ScreenUpdating = False
    dest.Value = Me.Range(o).Value
    Randomize
    For i = 2 To dest.Cells.Count
        j = i + Int((dest.Cells.Count - i) * Rnd())
        s = dest.Cells(j)
        dest.Cells(j) = dest.Cells(i - 1)
        dest.Cells(i - 1) = s
    Next i
    Application.ScreenUpdating = True
End Sub
2. Exécutez la procédure 'MELANGE'.

3. Donnez l'adresse de la plage de données.
Pour Claudy : A1:E1
Par défaut, la procédure propose la plage sélectionnée dans la feuille. Validez (OK).

4. Donnez l'adresse de la première cellule de la plage de destination (cellule en haut à gauche de la plage de destination).
Pour Claudy : G1
Validez (OK).

Intérêt de cette méthode :
  • Elle permet de travailler sur une plage quelconque de la feuille, et pas seulement sur une ligne ou une colonne.

  • Rapidité : 4 s pour 1000 lignes x 25 colonnes, 13 s pour 2000 lignes x 50 colonnes.

Voilà...

Remarque pour Tibo :
Votre solution suppose que la fonction ALEA() engendre des valeurs uniques, ce qui n'est pas le cas. Prudence...
 
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
4
Affichages
284
Réponses
16
Affichages
556
Réponses
5
Affichages
186
Réponses
9
Affichages
326
Réponses
17
Affichages
1 K
Retour