Numéros aléatoires dans une plage avec cellules pleines, vides
Fermé
Titi 75
-
24 juin 2016 à 11:28
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 24 juin 2016 à 17:27
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 24 juin 2016 à 17:27
A voir également:
- Numéros aléatoires dans une plage avec cellules pleines, vides
- Whatsapp 2 numéros - Guide
- Aller à la ligne dans une cellule excel - Guide
- Excel additionner des cellules - Guide
- Verrouiller cellules excel - Guide
- Comment faire une liste déroulante dans excel à partir d'une plage nommée ? - Guide
2 réponses
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 396
24 juin 2016 à 12:40
24 juin 2016 à 12:40
Bonjour
un essaie qui reste aléatoire, mais je n'ai pas pu le prendre en défaut avec une cinquantaine de test_ (c'est un début, on regarde pour coplèter)
Mais il subsiste quand même le risque de doublons
=en A22, à ajuster en B et C22
=SI(A21>0;A21;ALEA.ENTRE.BORNES(MIN(A1:A20);MAX(A1:A20)))
et dans les autres comme simplement en B23:
=ALE.ENTE.BORNES(MION(B1:B20);MAX(B1:B20))
A suivre pour amélioration
(par exemple, admettiez vous un renvoi dans des colonnes masquées des valeurs de A, B, C ce qui permettrait de réduire la liste au N° non affectés? pour adresser la code ALEA à ces colonnes, et donc ne prendre en compte que les valeurs restantes?)
crdlmnt
un essaie qui reste aléatoire, mais je n'ai pas pu le prendre en défaut avec une cinquantaine de test_ (c'est un début, on regarde pour coplèter)
Mais il subsiste quand même le risque de doublons
=en A22, à ajuster en B et C22
=SI(A21>0;A21;ALEA.ENTRE.BORNES(MIN(A1:A20);MAX(A1:A20)))
et dans les autres comme simplement en B23:
=ALE.ENTE.BORNES(MION(B1:B20);MAX(B1:B20))
A suivre pour amélioration
(par exemple, admettiez vous un renvoi dans des colonnes masquées des valeurs de A, B, C ce qui permettrait de réduire la liste au N° non affectés? pour adresser la code ALEA à ces colonnes, et donc ne prendre en compte que les valeurs restantes?)
crdlmnt
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
24 juin 2016 à 16:09
24 juin 2016 à 16:09
Bonjour
Salut Vaucluse, comment vas tu depuis longtemps qu'on ne s'était pas croisé ;o)
je vois mal une solution avec des formules mais....
Pour Titi
Solution par VBA
si tu es OK avec ma bidouille, j'insèrerais des commentaires dans le code
http://www.cjoint.com/c/FFyohNbbc2t
Salut Vaucluse, comment vas tu depuis longtemps qu'on ne s'était pas croisé ;o)
je vois mal une solution avec des formules mais....
Pour Titi
Solution par VBA
si tu es OK avec ma bidouille, j'insèrerais des commentaires dans le code
http://www.cjoint.com/c/FFyohNbbc2t
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
>
Titi 75
Modifié par michel_m le 24/06/2016 à 17:30
Modifié par michel_m le 24/06/2016 à 17:30
nouvel essai
http://www.cjoint.com/c/FFypAE0Sm8t
edit 17:28
je viens de réessayer sur mon 1° envoi et ca a marché....
en attendanrt, au cas où le code
http://www.cjoint.com/c/FFypAE0Sm8t
edit 17:28
je viens de réessayer sur mon 1° envoi et ca a marché....
en attendanrt, au cas où le code
Option Explicit
'-----------------------------------
Sub attribuer_aléatoirement()
Dim Col As Byte
Dim dico As Object, Ref As Byte, Nbre As Byte, Lig As Byte, Liste
Dim test
Range("A22:C24").ClearContents
For Col = 1 To 3
Randomize
Set dico = CreateObject("scripting.dictionary")
For Lig = 1 To 21
Ref = Cells(Lig, Col)
Nbre = Application.CountIf(Range(Cells(22, Col), Cells(24, Col)), Ref)
If Not dico.exists(Ref) And Ref <> 0 And Nbre = 0 Then dico.Add Ref, ""
Next
Liste = dico.keys
If Cells(21, Col) <> "" Then
Cells(22, Col) = Cells(21, Col)
Else
Cells(22, Col) = Liste(Int(Rnd * UBound(Liste)))
End If
If Col > 1 Then
dico.Remove Cells(22, Col).Value
Liste = dico.keys
Cells(23, Col) = Liste(Int(Rnd * UBound(Liste)))
End If
If Col > 2 Then
dico.Remove Cells(23, Col).Value
Liste = dico.keys
Cells(24, Col) = Liste(Int(Rnd * UBound(Liste)))
End If
Next
End Sub
24 juin 2016 à 16:51
Il faudrait que le nombre aléatoire choisi soit présent dans la plage, et pas uniquement compris entre ses minimum et maximum.
La fonction ALEA.ENTRE.BORNES seule ou combinée avec une autre fonction peut elle y répondre ou faut il obligatoirement passé par un code ?
Cdlt
Titi
Modifié par Vaucluse le 24/06/2016 à 17:09
=INDEX(A3:A20;EQUIV(ALEA.ENTRE.BORNES(MIN(A3:A20);MAX(A3:A20));A3:A20))
(et salut Michel en passant)
crdlmnt
24 juin 2016 à 17:08
En complément de ma réponse : toute opération qui permettrait de ne pas prendre en compte les numéros non présents dans une plage est acceptée, le résultat est copié automatiquement dans une autre feuille et la présentation de la feuille où se font les calculs n'est pas un empêchement.
Cdlmt
Titi