Excel est excellent pour générer des nombres aléatoires, mais il est moins efficace pour remplir une plage de cellules avec des nombres aléatoires dans lesquels aucun nombre particulier n’est répété deux fois. Par exemple, vous souhaiterez peut-être remplir 52 cellules avec les nombres 1 à 52, dans un ordre aléatoire. (Ceci est très similaire au choix des cartes d’un jeu dans un ordre aléatoire, où une carte particulière ne peut être choisie qu’une seule fois. Ainsi, le titre de cette astuce.)

Il n’y a évidemment pas de fonction Excel intégrée pour fournir cette capacité, vous devez donc travailler avec des macros. Heureusement, une telle macro n’est pas terriblement difficile à créer. La macro suivante fera très bien l’affaire:

Sub FillRand()

Dim nums() As Integer     Dim maxval As Integer     Dim nrows As Integer, ncols As Integer     Dim j As Integer, k As Integer     Dim Ptr As Integer     Randomize

Set s = Selection     maxval = s.Cells.Count     nrows = s.Rows.Count     ncols = s.Columns.Count

ReDim nums(maxval, 2)



'Fill the initial array     For j = 1 To maxval         nums(j, 1) = j         nums(j, 2) = Int((Rnd * maxval) + 1)

Next j

'Sort the array based on the random numbers     For j = 1 To maxval - 1         Ptr = j         For k = j + 1 To maxval             If nums(Ptr, 2) > nums(k, 2) Then Ptr = k         Next k         If Ptr <> j Then             k = nums(Ptr, 1)

nums(Ptr, 1) = nums(j, 1)

nums(j, 1) = k             k = nums(Ptr, 2)

nums(Ptr, 2) = nums(j, 2)

nums(j, 2) = k         End If     Next j

'Fill in the cells     Ptr = 0     For j = 1 To nrows         For k = 1 To ncols             Ptr = Ptr + 1             s.Cells(j, k) = nums(Ptr, 1)

Next k     Next j End Sub

Cette macro utilise un tableau à deux dimensions (nums) pour déterminer les nombres à utiliser et l’ordre dans lequel ils doivent être utilisés. Près du début de la macro, le tableau est rempli d’un nombre statique (de 1 au nombre de cellules) et d’un nombre aléatoire compris entre 1 et le nombre de cellules. Ce deuxième numéro est ensuite utilisé pour trier le tableau. Une fois le tableau stocké, il suffit de placer les numéros d’origine dans les cellules.

À propos, la raison pour laquelle un tableau à deux dimensions est utilisé est que la fonction Rnd utilisée par VBA pour générer des nombres aléatoires peut renvoyer des valeurs en double. Ainsi, même si la deuxième dimension du tableau peut contenir des doublons, lorsque le tableau est finalement trié, la première dimension n’aura pas de doublons.

Pour utiliser la macro, commencez par sélectionner les cellules que vous souhaitez remplir avec des valeurs séquentielles dans un ordre aléatoire. Lorsque vous exécutez la macro, cette plage est remplie. Par exemple, si vous sélectionnez dix cellules, puis exécutez la macro, ces cellules sont remplies avec les nombres 1 à 10, dans un ordre aléatoire.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (8269) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Playing_with_a_Full_Deck [Jouer avec un deck complet].