XL 2013 Supprimer des doublons pendant un loop - Résolu par Dranreb.

Lone-wolf

XLDnaute Barbatruc
Bonjour le Forum, :)

Après plusieures tentatives faite avec Dictionnary, if cells(k, 3) = cells(k-1) then, boucle for each etc. Je me tourne vers vous pour trouvez une solution au problème.
En PJ, le fichier pour test.
 

Pièces jointes

  • Classeur1.xlsm
    18 KB · Affichages: 32

Dranreb

XLDnaute Barbatruc
Bonjour
Déjà je n'utiliserais surement pas si souvent Range, qui est long à exécuter. Je m'arrangerais pour les avoir dans des variables. Ensuite je préfèrerais partir d'une description de la règle. Parce que là je vois une incohérence : La 3ième condition Range("d2") > 21 And Range("d2") < 21 ne peut jamais être vraie.
 

patricktoulon

XLDnaute Barbatruc
Bonjour Pascal , re Dranreb

Une incohérence??? Sans vouloir vous offenser, vous n'avez jamais jouer au Black Jack.

Admettont que vous ayez 13(idem pour l'ordi), vous allez sûrement vouloir avoir une 3ème carte. Malheureusement, il y a un dix ou une figure qui apparaît, combien de points avez-vous dans les mains???
dans ce cas là c'est
ElseIf Range("d2") <> 21 Then

au pire c'est "Or" et non "And"
 

patricktoulon

XLDnaute Barbatruc
re
si j’analyse tout tes elseif
sauf erreur de part ça se résume a ça
VB:
 x = [b2] <= 21 And ([d2] < [b2] And [d2] <> 21)
    [C3] = IIf(x, "le joueur gagne", "La banque gagne")
    [l22] = [l22] + [l25] + IIf([d2] <> 21, ([l22] / 2), 0)    '<- mise de départ ex.: 100.  Partage en deux entre la banque et le joueur.

le principe est simple
tu a des conditions pour le joueur et d'autres pour la banque
ben c'est pas la peine de faire la banque
si c'est pas le joueur c'est la banque ;) :D :D :D
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Dranreb,

suite a ton conseil et connaîssant l'importance des variables, j'ai modifié comme ceci:



VB:
Sub MsgCroupier()
    Dim PntJoueur As Range, PntOrdi As Range, Croupier As Range
    Dim SommeDep As Range, Mise As Range, BJ As Byte

    Set PntJoueur = Range("b2"): Set PntOrdi = Range("d2"): Set Croupier = Range("c3")
    Set SommeDep = Range("l22"): Set Mise = Range("l24")

    BJ = 21
    Select Case PntOrdi
    Case Is > BJ
        Croupier = "Le joueur gagne"
        SommeDep = SommeDep + Mise
    Case Is = BJ
        Croupier = "BLACK JACK"
        SommeDep = (SommeDep - Mise) - (Mise / 2)
    Case Is > PntJoueur
        Croupier = "La banque gagne"
        SommeDep = SommeDep - Mise
    Case Is < PntJoueur
        Croupier = "Le joueur gagne"
        SommeDep = SommeDep + Mise
    Case Is = PntJoueur
        Croupier = "Égalité"
    End Select
 
End Sub

Dans le cas où le joueur aie 24 et l'ordi 20, comment écrire Case Is, vu qu'ici il y a déjà le signe <(inférieur à)?? Idem si l'ordi dépasse le 21 et le joueur aie 20 par exemple.
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
re
si j’analyse tout tes elseif
sauf erreur de part ça se résume a ça
VB:
x = [b2] <= 21 And ([d2] < [b2] And [d2] <> 21)
    [C3] = IIf(x, "le joueur gagne", "La banque gagne")
    [l22] = [l22] + [l25] + IIf([d2] <> 21, ([l22] / 2), 0)    '<- mise de départ ex.: 100.  Partage en deux entre la banque et le joueur.

le principe est simple
tu a des conditions pour le joueur et d'autres pour la banque
ben c'est pas la peine de faire la banque
si c'est pas le joueur c'est la banque ;) :D :D :D

Peux pas faire la banque, ch'ui maigre et fauché; et comme avec le COVID faut porter un masque, trop facile de braquer la banque. :D :D :D
 

Lone-wolf

XLDnaute Barbatruc
hoh!! les mains c'est un XLUP!!!!!!!!
ok je sort :D

rire.gif
 

Dranreb

XLDnaute Barbatruc
Il y a deux sortes de solutions pour distinguer des sous cas
Si on tient absolument à les avoir dans des cas séparés on peut certes tout baser sur un Select Case True avec des Case ConditionComplète. Le code exécuté sera alors celui de la 1ère condition complète testée avérée. Mais je ne la retient qu'après avoir vérifié si c'est vraiment plus simple que de plutôt les subdiviser en blocs If Then … ElseIf … Else … End If ou en sous-Select Case
Les dépassements de 21 auraient peut être aussi intérêt à être testés en premier, comme ça il ne reste après que les cas où il n'y en a pas, donc inutiles à tester.
S'il faut tenir compte à la fois de PntJoueur et de PntOrdi, pas sûr que le Select Case soit la meilleure solution.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Si c'étaient les valeurs plutôt que les Range qui étaint récupérées en PntOrdi et PntJoueur, il serait peut être aussi possible de les mettre l'un et l'autre à 0 dès qu'ils dépassent 21, avant de tester ensuite simplement les différences ?
 

Lone-wolf

XLDnaute Barbatruc
Si c'étaient les valeurs plutôt que les Range qui étaint récupérées en PntOrdi et PntJoueur, il serait peut être aussi possible de les mettre l'un et l'autre à 0 dès qu'ils dépassent 21, avant de tester ensuite simplement les différences ?

Re Dranreb,

le dépassement de 21 existe bel et bien, les exemples donnés sont réels. J'ai plusieures fois joué au jeu du black jack sur zebest-3000 et il arrive que, soit moi, soit l'ordi dépassont le 21. Je te refais un exemple.

Avec le 2 premières cartes tu peux avoir 12-13-14 ou15, un peut petit pour faire au moins 18 ou avoir 21; tu tire donc une 3ème carte. La plupart du temps tu tombe avec: soit 10, sois l'une des 3 figures. Donc tu obtiens 22-23-24 ou 25. Ceci vaux aussi pour l'ordinateur, pourquoi? Parce-qu'il cherche tout simplement à voir plus de points que le joueur et ainsi gagner.

Moi j'ai 17 par exemple, l'ordi à 13. Pour pouvoir gagner, il doit tirer une 3ème carte. Manque de bol pour lui il tire un roi, ça fait donc 23.

En ce qui concerne PntOrdi et PntJoueur, ce n'est pas un problème. Au début de la macro je met l'éffacement des cellules concernées.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
L'ai-je jamais contesté ?
Je disais seulement de les remettre à 0 s'ils dépassent 21 pour simplifier les tests ultérieurs.
Mais il faut que ce soient les valeurs des cellules, et non pas celles ci car il ne s'agit pas de les effacer !
 

Discussions similaires

Statistiques des forums

Discussions
312 519
Messages
2 089 268
Membres
104 083
dernier inscrit
hecko