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érifier si la macro est déjà passée par là


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Vérifier si la macro est déjà passée par là
    Bonjour,

    J'ai besoin de savoir si la macro est déjà passée par un endroit, pour que le bouton ne soit affiché qu'une seule fois. Je précise que le code est exécuté lors de la première utilisation de la macro et qu'il ne doit pas être réexécuté quand on relance uniquement la 2e macro.

    o est déclaré au tout début de la 1ere macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim o As Integer
        o = 0
    Le code qui ne doit être exécuté qu'une fois (présent sur la 2e macro, mais exécuté également à la suite de la première) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        If o > 1 Then
            Exit Sub
        Else
            Range("A1").Select
            ActiveSheet.Buttons.Add(5, 5, 160, 63).Select
            ActiveSheet.Shapes("Button 1").Select
            Selection.Characters.Text = "Après ajout des inspecteurs manquants, relancer la création des feuilles individuelles."
            Selection.OnAction = "indiv"
            o = o + 1
            Range("A1").Select
        End If
    Problème, le code s'exécute également lorsqu'on exécute manuellement cette seconde macro une 2e fois.

    What's wrong, guys ?

    merci à ceux qui se pencheront sur mon petit problème

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 944
    Points : 1 282
    Points
    1 282
    Par défaut
    Bonjour
    2 petites choses
    La premiere
    If o > 1 Then
    Exit Sub
    Else
    si o=0 et o=o+1=1, il ne sera jamais >1

    La deuxième, si o doit être utilsée par les 2 macros, est-il bien déclaré en début de module pour ne pas perdre sa valeur à la fin de la 1ere macro ?
    Frédéric
    Développeur d'Applications Access

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    en haut d'un module public
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut DiesIrae et le forum
    What's wrong, guys ?
    Moi, à part "je cannote en 12 temps" et "boîte à musique", l'anglais me donne des boutons

    Le problème vient que comme tu ne t'es pas obligé à déclarer obligatoirement tes variables, Excel, si tu ne l'as pas fait, le fait à ta place.
    Comme tu ne la déclares pas dans ta deuxième macro, Excel déclare lui-même une Variable "o" de type Variant et comme tu la testes ">1" lui affecte la valeur 0.

    Il faut donc que tu déclares, en en-tête de module ta variable (Dim o as integer - ou as Boolean -) et que tu enlèves cette déclaration de ta première macro. La variable devenant Globale pour le module, elle pourra être utilisée par toutes les macros du module et conservera sa valeur tant que tu ne fermeras pas le classeur.
    Si tu la déclares en booléenne, il suffira de lui affecter la valeur True, à l'exécution de ton code et la remettre à False en début de ta première macro. Le test devenant "If o then"

    Ne connaissant que le sujet, difficile de donner d'autres conseils...
    A+

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par fgiambelluco Voir le message
    Bonjour
    2 petites choses
    La premiere

    si o=0 et o=o+1=1, il ne sera jamais >1
    o vaut 0 au début, la macro passe une fois dessus (o = 1) et si elle repasse une 2e fois... ah ben oui, je dois le bouger de place ou mettre > 0 du coup
    J'avais changé pour tester et oublié de le remettre. :o
    Citation Envoyé par fgiambelluco Voir le message
    La deuxième, si o doit être utilsée par les 2 macros, est-il bien déclaré en début de module pour ne pas perdre sa valeur à la fin de la 1ere macro ?
    Citation Envoyé par mercatog Voir le message
    en haut d'un module public
    Vous parlez de la même chose, en fait ?

  6. #6
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour le fil le forum comme je comprends!!!

    code bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    macro1
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
    Sub macro1(Optional X As String)
    Sheets(1).CommandButton1.Visible = False
    'ton code
    End Sub
    a adapter
    SALUTATIONS

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Gorfael Voir le message
    Salut DiesIrae et le forum
    Moi, à part "je cannote en 12 temps" et "boîte à musique", l'anglais me donne des boutons
    Sorry about that désolé

    Citation Envoyé par Gorfael Voir le message
    Le problème vient que comme tu ne t'es pas obligé à déclarer obligatoirement tes variables, Excel, si tu ne l'as pas fait, le fait à ta place.
    Comme tu ne la déclares pas dans ta deuxième macro, Excel déclare lui-même une Variable "o" de type Variant et comme tu la testes ">1" lui affecte la valeur 0.

    Il faut donc que tu déclares, en en-tête de module ta variable (Dim o as integer - ou as Boolean -) et que tu enlèves cette déclaration de ta première macro. La variable devenant Globale pour le module, elle pourra être utilisée par toutes les macros du module et conservera sa valeur tant que tu ne fermeras pas le classeur.
    Si tu la déclares en booléenne, il suffira de lui affecter la valeur True, à l'exécution de ton code et la remettre à False en début de ta première macro. Le test devenant "If o then"

    Ne connaissant que le sujet, difficile de donner d'autres conseils...
    A+
    C'est tout ce qu'il me fallait, merci pour l'explication

    J'ai collé celui-là en haut :
    Citation Envoyé par mercatog Voir le message
    en haut d'un module public
    et ça fonctionne.

    Merci beaucoup messieurs (et mademoiselle, même si j'ai pas tout compris de ton bout de code )

Discussions similaires

  1. [Web Service] Vérifier que SOAPClient s'est bien passé
    Par Delphi-ne dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/09/2008, 02h19
  2. Vérifier si un fichier Excel est ouvert.. mais par cette session
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 16/05/2008, 11h28
  3. Réponses: 3
    Dernier message: 19/03/2008, 21h44

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