IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Faire un jeu qui donne une liste sous Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut Faire un jeu qui donne une liste sous Excel
    Bonjour à tous,

    Je suis toute nouvelle sur le forum et toute novice en VBA.

    J'ai un TP à faire sur Excel / VBA 2007 (je suis dans mes 1ers mois de programmation et c'est là mon premier jeu à réaliser toute seule) le principe est simple, j'ai fait mon arbre puis je l'ai retraduit dans VBA :

    Chaque joueur doit répéter à son tour la liste des lettres données par le joueur précédent et en ajouter une.
    le joueur qui se trompe a perdu.

    Pour le moment, j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub PP_Jeu() 
    Dim Liste1 As String 
    Dim Fin As Boolean 
    Dim joueurs As Integer 
    Dim Liste2 As String 
    Dim Compteur As Integer 
    Dim nouvellelettre As String 
     
     
    Liste1 = InputBox("Entrer une lettre") 
    Fin = False 
    joueurs = 1 
    Liste2 = "" 
    Compteur = 1 
    MsgBox (Liste1) 
     
    While Fin = False Or Compteur > 50 
    Call Echange_J 
    Liste2 = InputBox("Entrer la liste") 
     
    If Liste1 = Liste2 Then 
    nouvellelettre = InputBox("entrez une nouvelle lettre") 
    Liste1 = Liste1 & nouvellelettre 
    Liste1 = Liste1 & MsgBox(Liste1) 
    Call Echange_J 
    Else: Fin = True 
    End If 
     
    Compteur = Compteur + 1 
     
    Wend 
     
    MsgBox ("Bravo") 
    End Sub 
     
    Sub Echange_J() 
     
    Dim joueurs 
    joueurs = 1 
     
    If joueurs = 1 Then 
    joueurs = 2 
    Else: joueurs = 1 
    End If 
     
    End Sub
    Le hic : il tourne seulement une fois, si vous le testez vous verrez que on rentre 2 lettres et qu'après le jeu s'arrête. Il doit tourner tant que fin=false OU tant que les joueurs n'ont pas rentré 50 lettres.

    Est ce que vous voyez où je me suis trompée? Je tourne en rond dessus depuis ce matin et j'avoue ne plus y voir bien clair.

    Bonne soirée, merci de m'avoir lue.
    Configuration:
    PC / Windows Vista
    Excel 2007

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Première chose quand tu donne un code utilise les balise code tu sélectionnes le code et tu clique sur le petit dièse au dessus de la zone de texte. Sinon tu peut regarder le tout premier sujet du forum il y a une très bonne explication


    Voila quelque modif sur ton code mais je ne pense pas que ton algorythme soit corect (je dirais meme faut)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub PP_Jeu()
    Dim Liste1 As String
    Dim Fin As Boolean
    Dim joueurs As Byte 'on met 1 ou 2 on aurait pu utiliser un booleen mais un byte est déja pas mal
    Dim Liste2 As String
    Dim Compteur As Integer
    Dim nouvellelettre As String
     
     
    Liste1 = InputBox("Entrer une lettre")
    Fin = False
    joueurs = 1
    Liste2 = ""
    Compteur = 1
    MsgBox (Liste1)
     
    While Fin = False Or Compteur > 50
     
    Echange_J joueurs
    Liste2 = InputBox("Joueur" & joueurs & " entre la liste")
     
    If Liste1 = Liste2 Then
    Do
    nouvellelettre = InputBox("Joueur" & joueurs & "entrez une nouvelle lettre ")
    If (Len(nouvellelettre) <> 1 Or Not nouvellelettre Like ("[a-zA-Z]")) Then MsgBox "Entrer une seule lettre"
    Loop Until Len(nouvellelettre) = 1 And nouvellelettre Like ("[a-zA-Z]")
    'on boucle tant que le joueur ne donne pas un seul caractère caratère qui doit etre une lettre minusculeou majuscule
     
    Liste1 = Liste1 & nouvellelettre
    'Liste1 = Liste1 & MsgBox(Liste1)  'ceci ne veux rien dire
    'enfin ca veu dire que tu rajoute la réponse a la message box a la suite de la liste
    MsgBox Liste1
     
    Echange_J joueurs 'le call est inutile et il t'habitu a utiliser des parenthèse dans tous les cas alors que ce n'est pas conseillé
     
    Else: Fin = True
    End If
     
    Compteur = Compteur + 1
     
    Wend
     
    MsgBox "Bravo" 'evite les parenthèse elle sont a utiliser uniquement si on renvoie une valeur
    End Sub
     
    Sub Echange_J(joueurs As Byte) 'il fgaut lui donner une variable sinon tu a toujours joueur deux qui sort
     
     
     
    If joueurs = 1 Then
    joueurs = 2
    Else: joueurs = 1
    End If
     
    End Sub

    A mon avis tu devrais aller comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Le joueur 1 entre une lettre
    vérification de la saisie
     
    tant que pas fin et longeur de la liste<50
       echange du joueur actif
       joueur actif donne la suite
       si la liste est bonne 
           joueuractif rajoute une lettre
       sinon 
           fin = vrai
       fin si
    fin tant que
    boucle
     
    si longeur<=50 le joueur actif a perdu
    sinon egalité
    fin si

  3. #3
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Je m'enuyais un peu et je crois que le code que je t''ai donné nest pas très juste

    Mais celui la et bon c'est pratiquement sure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    Sub PP_Jeu()
    Dim joueur As Byte
    Dim liste As String
    Dim rep As String
    Dim lettre As String
    Dim fin As Boolean
     
    'initialisation
    joueur = 1
    fin = False
    Do
    lettre = InputBox("Joueur" & joueur & " entre la première lettre ")
    If (Len(lettre) <> 1 Or Not lettre Like ("[a-zA-Z]")) Then MsgBox "Entrer une seule lettre", vbOKOnly
    Loop Until Len(lettre) = 1 And lettre Like ("[a-zA-Z]")
    liste = lettre
    'début du jeu
    Do
        joueur = Abs(joueur - 2) + 1 ' si joueur=2 on a |2-2|+1=1 si joueur=1 on a |1-2|+1=2 cest plus classe que sous proédure
            rep = InputBox("Joueur" & joueur & " entre la liste." & Chr(13) & "(" & Len(liste) & "caractères)", vbOKOnly)
        If rep <> liste Then
            fin = True
        Else
        Do
            lettre = InputBox("Joueur" & joueur & " entre la lettre suivante.")
            If (Len(lettre) <> 1 Or Not lettre Like ("[a-zA-Z]")) Then MsgBox "Entrer une seule lettre", vbOKOnly
        Loop Until Len(lettre) = 1 And lettre Like ("[a-zA-Z]")
        liste = liste & lettre
        End If
    Loop Until fin Or Len(liste) > 50
     
    joueur = Abs(joueur - 2) + 1
    If fin Then
        MsgBox "Le joueur " & joueur & " a gagné!", vbOKOnly + vbExclamation, "Résultat"
    Else
        MsgBox "Egalité"
    End If
    End Sub

  4. #4
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    elo krovax,

    je te remercie vivement tu m'aides en bien des points.

    je t'ai MP.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Par défaut
    rebonjour

    je me suis donc inspirée du code de krovax avec les éléments que j'ai appris en cours (à savoir : les si, le tant que, le pour, les chaines de caractere et les tableaux. il y a plein de choses dans ce que m'a donné krovax que je ne pouvais donc pas utiliser comme le loop par exemple, merci krovax pour ton aide d'ailleurs!)

    je n'ai pas fini et pour cause ca bug. le jeu se lance mais dès que je rentre la 1ere lettre, la boite de dialogue affiche "erreur d'écution '28'" et il me propose 'fin' ou 'débogage'. apparemment le problème est dans ma fonction tableau mais je ne comprends vraiment pas pourquoi?

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Sub PP()
    Dim liste As String
    Dim rep As String
    Dim lettre As String
    Dim fin As Boolean
    Dim joueur As Byte
     
     
    'on initialise
    fin = False
    joueur = 1
    compteur = 1
    lettre = InputBox("Joueur" & joueur & "entre une première lettre")
     
        If Len(lettre) <> 1 Or lettre <> tableau Then
            MsgBox ("entrez une seule lettre de l'alphabet en minuscule s'il vous plaît")
        Else
            While Len(lettre) = 1 And lettre = tableau
                liste = lettre
            Wend
        End If
     
    'on commence le jeu
            While fin = False Or Len(liste) < 50
                joueur = Abs(joueur - 2) + 1
                rep = InputBox("joueur" & joueur & "entre la liste" & Chr(13) & "(" & Len(liste) & "caractère(s))")
            If rep <> liste Then
                fin = True
            Else
     
                lettre = InputBox("Joueur" & joueur & "entre la lettre suivante")
            If Len(lettre) <> 1 Or lettre <> tableau Then
                MsgBox ("entrez une seule lettre de l'alphabet en minuscule s'il vous plaît")
            End If
     
            While Len(lettre) = 1 And lettre = tableau(i)
                liste = liste & lettre
            Wend
     
            End If
            Wend
     
    End Sub
     
    Function tableau()
     
        tableau(1) = "a"
        tableau(2) = "b"
        tableau(3) = "c"
        tableau(4) = "d"
        tableau(5) = "e"
        tableau(6) = "f"
        tableau(7) = "g"
        tableau(8) = "h"
        tableau(9) = "i"
        tableau(10) = "j"
        tableau(11) = "k"
        tableau(12) = "l"
        tableau(13) = "m"
        tableau(14) = "n"
        tableau(15) = "o"
        tableau(16) = "p"
        tableau(17) = "q"
        tableau(18) = "r"
        tableau(19) = "s"
        tableau(20) = "t"
        tableau(21) = "u"
        tableau(22) = "v"
        tableau(23) = "w"
        tableau(24) = "x"
        tableau(25) = "y"
        tableau(26) = "z"
     
    End Function
    ps : excusez moi si c'est pas bien indenté comme vous l'aurez compris je suis pas une lumiere en prg (chacun son truc...)

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Ta fonction tableau est un peu abérente tebleau est une variable pas une fonction. Une fonction prend un ou des arguments et renvoie une valeur et pas un tableau!
    Fait moi plaisir et lit ce cours algo.

    le reste du site te sera très utile pour éviter ce genre d'abération algorithmique

    Ensuite tu compares une variable string a un tableau dont ut ne déclare même pas le type!

    Ca c'est a revoir
    Déclare tableau comme une variable si tu veux l'initialisé a part fait une sub avec comme argument tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub initTab(tableau() as string)
    tableau(1)=....
    ...

    que tu appelles
    init tableau
    Ne met pas de parenthèse!
    pour savoir pourquoi : http://mhubiche.developpez.com/vba/f...yntaxes/bases/


    ensuite lettre=tableau na aucune sens c'est comme dire en math 1 = matrice A (dans la mesure ou A a au moins deux ligne ou deux colonne )

    Il faut que tu test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    flag=false
    for i = 1 to 26
       if lettre=tableau(i) then flag=true
    next i
    et ensuite
    tu teste flag pour sortie de la boucle

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/04/2015, 06h45
  2. [XL-2003] imprimer des fichiers d'une liste sous excel.
    Par amial41 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/02/2012, 21h46
  3. [SP-2007] Modification en masse d'une liste sous Excel .iqy
    Par cricri2000 dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/05/2010, 08h59
  4. Faire une liste sous visual C++
    Par toutounesan dans le forum C++
    Réponses: 1
    Dernier message: 24/08/2007, 17h34
  5. Requête qui renvoie une liste de données
    Par fougna dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/08/2007, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo