chiffres interdits

raym1313

XLDnaute Occasionnel
bonjour a tous

mon probleme n'est je pense pas tres complexe mais :( :( :confused:

pouvez vous m'aider svp
je vous joins un petit fichier


amicalement
raymond
 

Pièces jointes

  • essaix.xls
    15.5 KB · Affichages: 49

claude65

XLDnaute Nouveau
Re : chiffres interdits

Salut Raymond

En pièce jointe ton fichier modifié avec 2 petites macros.

Que les spécialistes Excel et VBA me pardonnent l'amateurisne de la solution.

Je serais content de voir vos solutions.

A bientôt

Claude65
 

Pièces jointes

  • essaix(1).xls
    27 KB · Affichages: 59
  • essaix(1).xls
    27 KB · Affichages: 62
  • essaix(1).xls
    27 KB · Affichages: 57

raym1313

XLDnaute Occasionnel
Re : chiffres interdits

rebonjour

merci pour cette reponse rapide

la 1ere macro marche et je te remercie
quand les chiffres se suivent

par contre dans la deuxieme

le nombre aleatoire est compris entre le mini el le maxi
or je souhaitais que le chiffre aleatoire sortant soit un chiffre de la liste
lorsque j'execute la macro le chiffre sortant peut etre 43
il ne figure pas dans la liste des 8 chiffres

j ai du mal m'exprimer desolé

amicalement raymond :)
 

claude65

XLDnaute Nouveau
Re : chiffres interdits

Salut

Désolé je n'avais pas bien regardé le second cas.
Voici une solution mais j'attends avec impatience le pro qui pourra nous expliquer comment faire un tirage aléatoire d'une série de nombres pris au hazard.

A bientôt
Claude65
 

Pièces jointes

  • essaix(1).xls
    29 KB · Affichages: 51
  • essaix(1).xls
    29 KB · Affichages: 57
  • essaix(1).xls
    29 KB · Affichages: 53

Luki

XLDnaute Accro
Re : chiffres interdits

Bonjour le fil,

une solution avec une 'tite fonction personnalisée. à rafraîchir avec F9.


A+

Edition : j'enlève la pièce jointe à cause d'un bug sur la boucle dans certains cas.... je corrige et je reviens....
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : chiffres interdits

Re, bonjour Luki

bon je remet le code corrigé, en espérant avoir bien compris le problème :

Code:
Sub test()
Dim x, c As Range, t()
Randomize
Set x = CreateObject("scripting.dictionary")
For Each c In Range("C17:J17")
    x.Add c.Value, CStr(c.Value)
Next c
For Each c In Range("C15:F15")
    If x.Exists(c.Value) Then x.Remove c.Value
Next c
t = x.keys
Range("C19").Value = t(Int(x.Count * Rnd))
End Sub

donc génère un nombre au hasard dans la cellule C19, compris dans la plage C17:J17, mais pas présent dans la plage C15:F15.

bonne fin d'après midi
@+
 

Luki

XLDnaute Accro
Re : chiffres interdits

re à tous,

rentré à la maison, je reprends le fil:

Salut Pierrot et pierrejean

Pierrejean, tu es tombé dans le même piège que moi :(voir mon post précédent) la boucle infinie si aucune valeur n'est tirable!

Je corrige et je reviens!
 

pierrejean

XLDnaute Barbatruc
Re : chiffres interdits

Re
Pour qu'aucune valeur ne soit tirable il faut que la plage d'interdit soit au moins aussi etendue que la plage des valeurs et que les toutes les valeurs soient interdites
C'est effectivement un cas que je n'ai pas envisagé !!!
Mais est-ce plausible ??
 

Luki

XLDnaute Accro
Re : chiffres interdits

re PierreJean,

Plausible, certainement pas mais possible, très sûrement! Notamment en faisant des essais et des fausses manip! ( c'est comme ça que je suis tombé dessus)
Juste pour dire que je pense qu'il faut éviter de laisser partir une boucle infinie dans une macro, c'est déroutant pour qui ne sait pas comment l'arrêter.

Mais de mon côté je bute (c'est souvent le cas :mad:) sur le redim préserve d'un tablo...

Si je ne m'en sors pas, je passerai par une autre solution...

A+
 

Luki

XLDnaute Accro
Re : chiffres interdits

re à tous : la fonction perso qui utilise 2 plages

Code:
Function Tirage(Valeurs As Range, Exclus As Range) As Variant
Application.Volatile

Dim Tablo()
Dim C As Range
ReDim Tablo(0)
' création de la liste des valeurs tirables
For Each C In Valeurs.Cells
    If IsError(Application.Match(C.Value, Exclus, 0)) Then
        ReDim Preserve Tablo(UBound(Tablo) + 1)
        Tablo(UBound(Tablo)) = C.Value
    End If
Next C

If UBound(Tablo) = LBound(Tablo) Then
    Tirage = "Pas de tirage possible!"
Else
    Tirage = Tablo(Int((UBound(Tablo) * Rnd) + 1))
End If

End Function
bonne soirée
 

Discussions similaires

Réponses
3
Affichages
262
Réponses
3
Affichages
311

Statistiques des forums

Discussions
312 520
Messages
2 089 291
Membres
104 089
dernier inscrit
salimgtu