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 :

Événements successifs avec Worksheet_SelectionChange [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Événements successifs avec Worksheet_SelectionChange
    Bonjour !

    Je suis en train de faire un travail pratique avec VBA Excel. Il s'agit de coder un jeu de Tic-Tac-Toe.

    Il faut que quand je clique sur une des cellules du Tic-Tac-Toe (Range("A1:A3,B1:B3,C1:C3")), une macro s'exécute (un message apparaît dans une cellule).

    Puis, ensuite, si je clique une seconde fois sur une des cellules du Tic-Tac-Toe, une autre macro s'exécute (un X bleu apparaît dans la cellule sélectionnée).

    Je n'arrive pas à faire en sorte que les macros s'exécutent successivement : je clique, macro 1 s’exécute, je clique une seconde fois, macro 2 s'exécute. Dans mon cas, c'est ça qui ce passe : je clique, les deux macros s'exécutent l'une après l'autre sans que j'aie à cliquer une seconde fois

    Que faire ???

    Merci d'avance !

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Si j'ai bien compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Worksheet_SelectionChange()
         macro1
         macro2
    end sub
    P.S. Pour ceux qui ne sauraient pas, le Tic-Tac-Toe du Québec, c'est le morpion de la France.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Oui c'est ça, pour être plus précis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Not Intersect(Range("A1:A3,B1:B3,C1:C3"), Target) Is Nothing Then
         Call TicTacToe_Debut
    End If
     
    If Not Intersect(Range("A1:A3,B1:B3,C1:C3"), Target) Is Nothing Then
         Call TicTacToe_XJoue
    End If
     
    End Sub
    TicTacToe_Debut et TicTacToe_XJoue sont les 2 macros.

    Mais là les 2 macros s’exécutent en même temps Moi je veux une pause entre les deux.

    P.S. Haha vous m'avez démasqué je suis bien québécois

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,

    il faudrait que tu nous en dise plus sur la succession de tes clics...

    si j'ai bien compris tu veux que lors d'un clic sur une cellule un message apparait (Macro1) ... et si l'on clique à nouveau sur cette même cellule on lance la Macro2 ... mais que doit-il ce passer si l'on clique par exemple sur une cellule puis que l'on change d'idée et l'on clique sur celle d'as côté ..?


    tu parle d'un "message" qui apparaît dans ta cellule lorsque l'on clique une première fois dessus , ne peut-on pas utiliser ce "message" pour basculer sur macro2... ainsi si on clique sur une cellule on vérifie si "message" présent s'il ne l'est pas on lance Macro1 sinon Macro2 ...




    PS : Pour Wikipedia tic tac toe c'est des lignes de 3 cases et morpion de 5 cases et pas seulement au Quebec..

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    En fait, le message de la macro 1 s'affiche dans une cellule en dessous du Tic-Tac-Toe, pas dans la cellule sur laquelle on clique...

    Si je clique une première fois sur une des cellules du Tic-Tac-Toe, le message "Tour de X à jouer" apparaît en dessous du Tic-Tac-Toe (macro 1). Puis si je clique une seconde fois sur une des cellules du Tic-Tac-Toe, un X apparaît dans cette case (macro 2).

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    l’enchaînement de tes actions n'est toujours pas clair ... tu veux bien faire une action sur le premier clic dans une cellule ... puis plus tard sur un deuxième clic effectuer une action différente ? ou sur un clic sur une cellule tu veux lancer Macro1 puis après une pause Macro2 s'exécute (sans aucune action supplémentaire..)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Je veux qu'il faille absolument cliquer une seconde fois sur une cellule du Tic-Tac-Toe pour que la macro 2 s'exécute, c'est-à-dire pour qu'un X bleu apparaisse dans cette cellule.

    Pour résumé :
    Clic dans le Tic-Tac-Toe, le message apparaît (macro 1), (pause), deuxième clic sur une cellule du Tic-Tac-Toe, un X bleu apparaît dans cette cellule (macro 2).

    Après le but c'est de permettre à deux personnes de jouer au Tic-Tac-Toe à tour de rôle avec le programme.

    J'ai écrit le pseudo-code du programme si ça peut vous intéresser...

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Toujours pas compris...

    Citation Envoyé par bbil Voir le message
    Bonsoir,

    il faudrait que tu nous en dise plus sur la succession de tes clics...

    si j'ai bien compris tu veux que lors d'un clic sur une cellule un message apparait (Macro1) ... et si l'on clique à nouveau sur cette même cellule on lance la Macro2 ... mais que doit t'il ce passer si l'on clique par exemple sur une cellule puis que l'on change d'idée et l'on clique sur celle d'as côté ..?


    tu parle d'un "message" qui apparaît dans ta cellule lorsque l'on clique une première fois dessus , ne peut-on pas utiliser ce "message" pour basculer sur macro2... ainsi si on clique sur une cellule on vérifie si "message" présent s'il ne l'est pas on lance Macro1 sinon Macro2 ...

    ..

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    J'ai un Tic-Tac-Toe vide.

    Si je clique sur une cellule du Tic-Tac-Toe, le message "Tour de X à jouer" apparaît dans une cellule en dessous du Tic-Tac-Toe.

    Ensuite, si je clique à nouveau sur une cellule du Tic-Tac-Toe, un X apparaît dans cette cellule.

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    L’enchaînement que tu décris ne me semble pas encore viable.. mais peu-être que ce code t'aideras :


    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim i As Long
       On Error Resume Next
        i = Target.Count  ' évite plantage lors de sélection feuille entiére..
        On Error GoTo 0
        If Not Intersect(Me.Range("A1:C3"), Target) Is Nothing And i = 1 Then
            If Me.Range("B5") = "" Then
                Me.Range("B5") = "Tour de X a jour"
                Application.EnableEvents = False 'Désactive la gestion événement pour éviter de s'auto-appeler
                Me.Range("B5").Select 'change la sélection
                Application.EnableEvents = True
            Else
                Target.Value = "X"
                Application.EnableEvents = False 'Désactive la gestion événement pour éviter de s'auto-appeler
                 Me.Range("B5") = ""
                Me.Range("B5").Select 'change la sélection
                Application.EnableEvents = True
            End If
        End If
     
    End Sub

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Oui parfait j'ai pu bidouiller ce que je voulais avec ce code !

    Merci beaucoup !

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Juste une dernière petite question...

    Comment on fait pour demander à VBA de vérifier si toutes les cellules d'une plage sont pleines ?

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If [toutes les cellules de la plage sont plaines] Then
        Do This
    End If
    Merci !

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Finalement je viens de trouver, j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountA(Range("A1:C3"))
    pour compter le nombre de cellules pleines.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Jeu de Tic Tac Toe
    Bonjour bobob2

    Je crois que j'ai le même travail pratique que toi et j'aimerais bien savoir comment tu as fait pour empêcher que les macros s'exécutent en même temps, c'est-à-dire prendre une pause entre 2 clics.

    Merci

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Haha serais-tu en actuariat à l'université Laval par hasard ? En fait il faut que ton programme (private sub worksheet selection change) soit exécuté au complet à chaque fois que tu cliques. Ce qu'il se passe quand tu cliques dépend du contenu de la cellule dans laquelle apparaît le texte !

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    haha oui effectivement je suis en actuariat a laval. Dans le fond, le programme est une grosse structure de décision? Et devons nous déclarer des variables?

    Dans mon cas, j'ai réussi à faire la première étape qui est d'inscrire Tour de X à jouer mais par la suite lorsque je clic dans une case rien ne se passe. J'aurais besoin d'aide pour le deuxieme clic et ainsi de suite

  17. #17
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Quand tu cliques une fois, ''tour de X à jouer'' apparaît dans la cellule en dessous.
    Puis quand tu clique une seconde fois, puisqu'il y a la valeur ''tour de X à jouer'' dans la cellule en dessous, un X apparaît dans la cellule sur laquelle tu as cliqué !

    Ton code doit donc te permettre d'exécuter différentes macros quand tu cliques selon la valeur (le texte) dans la cellule en dessous.

    Tu as juste besoin de structures if (et elseif), et en principe tu n'as même pas à déclarer de variables (c'est ce que j'ai fait dans mon cas).


  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci bobob2 j'ai réussis grâce à ton aide!

  19. #19
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Essayez quand même de ne pas trop copier; d'un coup que vous seriez dans la même classe.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/02/2015, 16h29
  2. remplir une combo suite à un évènement ajax avec dwr
    Par coco-sup dans le forum Struts 1
    Réponses: 6
    Dernier message: 23/01/2013, 14h48
  3. problème avec Worksheet_SelectionChange
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2007, 14h37
  4. [SQL] Tris successifs avec un limit
    Par LestoK dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/08/2007, 10h47
  5. [If] successifs avec et/ou lequel
    Par smutmutant2003 dans le forum Langage
    Réponses: 21
    Dernier message: 06/06/2007, 16h13

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