Tri par ordre croissant de 100 nombres générés aléatoirement

Bonjour tout le monde,

Etant étudiant en école d'ingénieur, j'ai un exercice d'informatique où je dois trier par ordre croissant 100 nombres générés aléatoirement (par le biais de la formule : =ent(alea()*100)). Après plusieurs de recherches je n'y arrive pas.

J'ai donc entré cette formule dans une case et déployé sur les 100 cases (pour obtenir mes 100 nombres)

Cependant je rencontre plusieurs problèmes :

1) Quand je clique sur une cellule quelconque mes nombres changent automatiquement. Comment peut-on expliquer cela ?

2) Je sélectionne ma plage de données, j'utilise donc l'entonnoir (trier et filtrer de A à Z) puis la fonction "trier du plus petit au plus grand". Mais quand je clique pour valider il ne se passe rien et mes nombres se sont régénérer (donc 100 nouveaux nombres).

Merci d'avance pour ceux qui pourront m'aider.

Cordialement.

Pacman57

Bonjour pacman57,

Quand tes nombres changent à chaque fois, rien d'étonnant car c'est le fonctionnement normal ;

pour éviter ce changement, il y a 2 solutions : tu sélectionnes tous tes nombres ; Ctrl c ➯ copier ;

Alt L v v ➯ coller les valeurs : les données vont remplacer les formules ; sinon, passer par VBA

pour écrire les valeurs aléatoires dans la plage des résultats que tu as choisie.

Cordialement

Bonjour,

La fonction alea() est volatile et donc, recalculée à chaque calcul de la feuille et le tri génère le recalcul.

Soit tu mets le calcul en manuel avant de trier et tu le laisse tel quel, soit tu passe par VBA avec un code du genre :

Sub Test()

    Dim I As Integer

    For I = 1 To 100: Cells(I, 1).Value = Int(Rnd(1) * 100): Next I

    Range("A1:A100").Sort Range("A1"), xlAscending

End Sub

Bonjour dhani,

Je viens de suivre ta méthode et je viens de remarquer que c'était le collage des données que je n'arrivais plus à faire. En tout cas ca marche merci de ton aide.

Bonjour Theze,

Si je veux tester ta méthode en VBA j'entre ce code dans l'onglet "développeur" puis "Visual basic". Mais quand j'exécute ca me met une erreur liée au "sub test(). Merci d'avance (Ps : je n'ai jamais utilisé le VBA donc je découvre en même temps).

Et si je fais ca sous forme de bouton c'est assez facile à réaliser ?

Cordialement

Pacman57

Bonjour,

Quand tu es dans Excel, appuis sur la combinaison de touches Alt+F11 là, tu arrives dans le VBE (Visual Basic for Application), l'éditeur de code.

Dans le menu "Insersion" tu cliques sur "Module" et dans la zone d'édition qui vient de s'ouvrir, tu colles le code et ensuite, tu places le curseur n'importe où dans la Sub "Test" et tu appuis sur F5 puis tu retourne dans Excel pour voir le résultat en colonne A

Bonjour pacman57, Theze, le forum,

Depuis n'importe quelle feuille de calcul Excel : Alt F11 pour aller sur Visual Basic ; plus tard, 2 choix :

a) Tu veux retourner sur Excel en ayant l'intention de revenir sur Visual Basic : faire de nouveau Alt F11

(derrière, ça laisse ouverte la fenêtre « Microsoft Visual Basic »)

b) Alt q pour retourner sur Excel, mais cette fois, ça quitte Visual Basic (et donc ça le ferme)


Code VBA basé sur celui de Theze (Thèse en VBA appliquée à Excel 2007, et qui doit tourner sur ta version 2016)

Arrivé sur la fenêtre Microsoft Visual Basic, fais Alt i m pour insérer un module ; tu auras

la page vierge de Module1 ; c'est là qu'il faut copier / coller le code VBA suivant :

Option Explicit

Sub Test()
  Dim i As Integer: Randomize
  For i = 1 To 100: Cells(i, 1) = Int(Rnd * 100) + 1: Next i
  [A1:A100].Sort [A1], 1
End Sub

Après le copié / collé : Alt F11 ou Alt q pour retourner sur Excel ; Alt F8 ➯ fenêtre « Macro » ; sélectionne la sub Test ;

impossible de te tromper puisqu'il n'y a pas d'autre sub ! appui sur la touche Entrée pour l'exécuter ; tu as plus

qu'à regarder en colonne A tes nombres entiers aléatoires et fixes (au hasard entre 1 et 100), avec tri croissant.


En plus de toutes ces explications destinées à guider tes premiers pas en VBA, je joins quand même,

ci-dessous le fichier Excel .xlsm correspondant.

⚠ Un fichier .xlsx ne peut pas contenir de macros ! pour avoir un fichier .xlsm, il faut impérativement,

lors de l'enregistrement, choisir le type de fichier « Classeur Excel (prenant en charge les macros) ».


Si besoin, tu peux demander une adaptation ; par exemple : nombres aléatoires tirés au hasard entre 50 et 800 ;

tirage de 200 de ces nombres au lieu de 100 ; tirage sans doublons ; à écrire dans une autre plage de résultats ;

donc si tu ne me demandes pas de décrocher la lune, je pense que je pourrai t'aider davantage.

Mais si tu arrives à faire toutes ces adaptations par toi-même, c'est encore mieux !!!

« c'est en forgeant qu'on devient forgeron »


Merci de me dire si ça te convient.

Cordialement

71exo-pacman57.xlsm (13.15 Ko)

Bonjour Theze,

Merci je viens d'essayer et cela fonctionne bien

Bonjour dhany,

Il faut avouer qu'au début j'étais totalement perdu mais grâce à tes conseils je me rend compte que c'est pas aussi impossible que ca. En tout cas un grand merci pour tes explications très simples et surtout pour l'exercice que tu mis en pièce jointe. Ce sera une bonne base pour faire d'autres tests et entrainements pour la suite.

Vous avez répondu à tous mes doutes concernant EXCEL, c'est tout concernant mon sujet

Cordialement.

Pacman57

Ravi que tu aies apprécié mon long message explicatif, et aussi mon fichier joint ;

merci d'avoir passé le sujet en résolu ; bonne continuation ; cordialement, dhany

Rechercher des sujets similaires à "tri ordre croissant 100 nombres generes aleatoirement"