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 :

Probleme de continuite d'une macro [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut Probleme de continuite d'une macro
    Bonjour tout le monde,
    je crée des macros depuis peu dans Excell, en apprenant sur le tas et un utilisant entre autre la fonction "Enregistrer".

    J'ai créé une macro (dans un module) qui fonctionne très bien.
    Après voir rempli des champs dans une feuille "Check", un clique sur un bouton ("Enregistrements") permet de copier ces données dans des champs spécifiques dans une autre feuille du classeur, puis efface les données de la 1ere feuille et enregistre le tout.

    Ensuite j'ai voulu rajouté une macro (trouvé sur le net), qui lance un pop-up dès lors qu'une modification est apportée à une cellule spécifique de la 1ere feuille ("Check").
    Cette macro est sur la feuille "Check" .
    Cette macro fonctionne très bien dans un classeur à part ou dans ce classeur TANT que je ne lance pas la macro "Enregistrement" ou uniquement à l'ouverture du classeur. Ensuite cette macro ne tourne plus.
    Un enregistrement avec la disquette permet à la macro de fonctionner.
    Une fermeture du classeur et re-ouverture elle fonctionne aussi.

    Pouvez vous m'aider ? Je ne vois pas ce qui coince.
    Merci pour votre support.

    Je vous joint un fichier texte avec les macros.

    Stephane
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Dans votre macro, je vois cette ligne:

    Il faudrait penser à mettre à "True" une fois la macro terminée.

    Cdlt

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Super. Merci. Ca marche.
    Et pour ma culture generale, que signifie cette phrase ? Et le fait de passer de False à true ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Quand on travaille avec une macro évènementielle, à chaque évènement détecté sur la feuille, le programme se relance à chaque fois, or on voudrait bien qu'il finisse ce qu'il à commencé avant de recommencer, pour cela "EnableEvents =false" inhibe ces actions et permet au programme d'aller jusqu'au bout, seulement en fin de programme, il ne faut pas oublier de remettre à "EnableEvents = True" sinon, plus aucun évènement ne sera détecté, c'est ce qui vous est arrivé.
    Cdlt

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    Re-bjr,
    je me permet de revenir sur ce sujet, car il y a autre chose qui coince maintenant.
    J'ai un bouton qui lance la macro FinPO() qui permet d'effacer toutes les données sur la feuille "Check" et de rajouter une ligne dans une autre feuille.

    Or lorsque je l'active, il me plante la macro qui doit verifier s'il y a eu du changement sur la feuille.
    J'ai rajouté .EnableEvents = True dans la macro FinPO() mais en vain.

    La macro s'arrete sur cette ligne
    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then

    Je rajoute un fichier text avec l'ensemble des macro présentes dans le classeur.

    PS: je pense que ma macro FinPO veut effacer les données de B11 , cellule qui déclenche la macro qui vérifie les chgtts !!! Et c'est là que ca coince. Mais comment faire ?

    Merci encore pour votre support
    Fichiers attachés Fichiers attachés

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien
    Inscrit en
    Janvier 2023
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2023
    Messages : 10
    Par défaut
    C'est en forgeant que l'on devient forgeron.

    Sur la macro FinPO, j'ai mis au debut:
    .EnableEvents = False

    et a la fin, j'ai mis:
    .EnableEvents = True

    Je ne sais pas si c'est la bonne facon de faire, mais cela semble fonctionner.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 523
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 523
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Quand on travaille avec une macro évènementielle, à chaque évènement détecté sur la feuille, le programme se relance à chaque fois, or on voudrait bien qu'il finisse ce qu'il à commencé avant de recommencer, pour cela "EnableEvents =false" inhibe ces actions et permet au programme d'aller jusqu'au bout, seulement en fin de programme, il ne faut pas oublier de remettre à "EnableEvents = True" sinon, plus aucun évènement ne sera détecté, c'est ce qui vous est arrivé.
    Cdlt
    Heu non.
    VBA n'est pas multi-tâche, et encore moins multi-threads.
    Un fonction dont l'exécution commence ira à son terme sans interruption. Les évènements, s'il en survient pendant l'exécution, s'accumulent dans une pile en attendant d'être traités.

    Par contre, EnableEvents = false à pour effet de désactiver la gestion des évènements des objets du classeur, en conséquence ton code VBA semble devenir non fonctionnel (puisqu'il n'est plus exécuté).
    Il convient donc de réactiver la gestion des évènements.


    NOTE:
    De nombreux développeurs ont le réflexe de désactiver les évènements (tout comme l'affichage) sous prétexte d'améliorer les performances.
    Certes, cela peut améliorer les performances (note l'utilisation du conditionnel), mais ça ne doit pas être systématique, et ça doit être justifié.
    Pour cela il faut faire un benchmark, et faire du profiling pour trouver les pertes de temps (si elles existent).
    Ces instructions vont par pair, ce que l'on désactivé doit être réactivé, et ce pour un minimum de temps possible.

    En général, on ne se soucie pas des performances en début de développement, on s'en occupe seulement à la fin, pour une raison évidente:
    Obtenir le comportement désiré.

    Et pour finir une petite citation (tellement vraie):
    "premature optimization is the root of all evil (or at least most of it) in programming.” (Donald Knuth).

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

Discussions similaires

  1. Probleme de "Pause"dans une macro
    Par macduss dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 30/06/2009, 14h54
  2. probleme d'optimisation d'une macro
    Par ylabarre dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 28/09/2007, 16h40
  3. Problemes de securite d'une macro
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/07/2007, 12h15
  4. [VBA-E]Probleme de lancement d'une macro non souhaité
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 06/12/2006, 12h50
  5. Probleme d'installation d'une macro OleWord
    Par blondelle dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/09/2006, 14h26

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