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 :

Macro s'execute 2 fois


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Macro s'execute 2 fois
    Bonjour,

    J'ai deux macros : "Gauche" et "Monstres" :

    Quand je lance "monstre" à partir d'un bouton, tout fonctionne correctement.

    Le problème survient lorsque je lance "Monstres" à partir de "Gauche". Çà me parait incohérent...

    Gauche :
    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
     
    Sub gauche()
    Application.Run "startUp()"
    If (Cells(xMax, yMin).Value <> "_/\_") Then
        For i = yMin To yMax + 1
            Cells(xMax, i).Value = Cells(xMax, i + 1).Value
        Next i
    Else
        Cells(xMax, yMin).Value = ""
        Cells(xMax, yMax).Value = "_/\_"
    End If
     
    Application.Run "monstres()"
    Application.Run "balles()"
    End Sub
    Monstres :

    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
     
    Sub monstres()
    MsgBox "debtut mosntersd"
    xMin = 101
    xMax = 120
     
    yMax = 21
    yMin = 2
     
    For x = xMin To xMax
        For y = yMin To yMax
            gx = xMax - x + xMin
            If Cells(gx, y).Value = "O" Then
                'Monstre sur la derrnière ligne
                If gx = xMax - 1 Then
                    MsgBox "perdu"
                ' monstre deant une balle
                ElseIf (Cells(gx + 1, y).Value = "|") Or (Cells(gx + 1, y).Value = "||") Or (Cells(gx + 1, y).Value = "|||") Then
                    Cells(gx, y).Value = ""
                    Cells(gx + 1, y).Value = ""
                'Monstre devantn rien
                Else
                    Cells(gx, y).Value = ""
                    Cells(gx + 1, y).Value = "O"
                End If
            End If
        Next y
    Next x
    End Sub
    En me renseignant, j'ai vu que le problème aurait pu venir des "next", c'est pourquoi j'ai transformé les deux "next" en "next x" et "next y", mais le problème persiste toujours.

    Merci
    Dernière modification par Invité ; 08/07/2019 à 14h49.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Est-ce que les macros "startUp" ou "balles" ne lanceraient pas "monstres", directement ou indirectement ?
    Pourquoi ne pas utiliser un simple Call pour lancer les macros ?
    Tu n'aurais pas des macros évènementielles qui lanceraient cette macro ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Est-ce que les macros "startUp" ou "balles" ne lanceraient pas "monstres", directement ou indirectement ?
    Pourquoi ne pas utiliser un simple Call pour lancer les macros ?
    Tu n'aurais pas des macros évènementielles qui lanceraient cette macro ?
    Nope, "Startup" est une déclaration de var est "balles" et identique à "monstres" (encore plus simple même)

    Startup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub startUp()
    xMin = 101
    xMax = 120
    yMax = 21
    yMin = 2
    End Sub


    Balles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub balles()
    For x = xMin To xMax - 1
        For y = yMin To yMax
            If Cells(x, y).Value = "|" Or Cells(x, y).Value = "||" Or Cells(x, y).Value = "|||" Then
                Cells(x - 1, y).Value = Cells(x, y).Value
                Cells(x, y).Value = ""
            End If
        Next y
    Next x
    End Sub
    Sinon oui, je n'avais pas connaissance du "call", ça fonctionne très bien comme ça, adieu le "application.run"

    Merci à toi !

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Par défaut Double execution
    Bonjour,

    Je rencontre la même bizarrerie avec un application.run
    Appel via un bouton "Call" : exécution x1
    Appel via un application.run d'un autre classeur : exécution x2

    Par contre, la solution Call ne peut pas convenir pour une exécution à partir d'un second classeur.

  5. #5
    Candidat au Club
    Inscrit en
    Novembre 2013
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Par défaut Solution bancale
    En testant l'application.run isolé dans un fichier excel seul, j'ai encore une exécution double.
    Surprenant. Peut-être un problème de librairie office 14 sur une version 2010 installé et tournant sur le poste?

    Une alternative qui a résolu mon problème est
    La fonction Call dans une évènementielle Worksheet().Activate.
    Dans le classeur initiale au lieu d'un application.run, j'active la worksheet en question.
    Et pour éviter des déclenchements intempestif je met la fameuse worksheet en masqué.

    En faisant ainsi, j'arrive artificiellement à exécuter une macro d'un autre classeur grâce un appel Call, plutôt que l'application.run qui buggait dans mon cas.

    Sincèrement,

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

Discussions similaires

  1. empêcher l'execution d'une macro plus d'une fois
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/03/2008, 18h10
  2. Réponses: 1
    Dernier message: 03/12/2006, 16h13
  3. Réponses: 5
    Dernier message: 12/03/2006, 19h40
  4. [VBA-W] Executer plusieurs fois la même procédure
    Par delamarque dans le forum VBA Word
    Réponses: 3
    Dernier message: 05/12/2005, 13h39
  5. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56

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