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 dans event [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Marketing Digital
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Marketing Digital
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut Macro dans event
    Bonjour à tous,

    Me renseignant sur le CRM de mon entreprise, j'ai voulu écrire quelques macro pour faciliter le travail de certains collègues (et pour aussi apprendre à écrire des macros VBA).
    J'ai donc créé une macro qui permet de remplir quatre tableaux sur une feuille (Cessions) en fonction des paramètres situés sur une autre feuille (Suivi de cessions). La macro fonctionne (elle est peut-être pas optimale mais au moins le résultat attendu est celui affiché).

    Mon problème vient du fait que je voudrai l'exécuter de façon automatique. Or, dès que je fais appel à cette dernière dans un event (en l'occurrence Worksheet_Activate ), l'exécution ne se fait plus et j'ai un message d'erreur à chaque ligne ou presque.

    Je vous joins mon fichier, la macro en question se nomme creationCessions.

    Merci d'avance,

    Rahzal
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Bonjour

    dans un premier temps tu devrais supprimer tous les select qui ne sont pas nécessaires et ralentissent l'exécution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      lastRowCess = Sheets("Cessions").Range("A65536").End(xlUp).Row
        If lastRowCess > 20 Then
            Rows("20:" & lastRowCess).Delete
        End If
     
        ' Offres acceptées '
     
        lastRowCess = Sheets("Cessions").Range("A65536").End(xlUp).Row
        Range("A11:J11").Copy Range("A" & lastRowCess + 2)
    pour le début de la macro .....

  3. #3
    Membre éprouvé
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2017
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 91
    Par défaut
    C'est un premier point qui peut suffire.

    Dans ta macro, tu changes d'onglets et tu reviens sur ton onglet Cessions et donc tu relances le code, cela forme une boucle infinie.

    Pour l'éviter, crées une variable globale dans ton Module1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Global bModification As Boolean
    Ajoute son utilisation dans creationCessions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub creationCessions()
        bModification = True
     
        ' Effacer anciens tableaux '
    ...
     
     
    bModification = False
     
    End Sub
    Et tu pourras créer ton Worksheet_Activate()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Worksheet_Activate()
     
        If bModification Then Exit Sub
     
        Call creationCessions
     
    End Sub

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Marketing Digital
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Marketing Digital
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut
    Citation Envoyé par a_diard Voir le message
    Bonjour

    dans un premier temps tu devrais supprimer tous les select qui ne sont pas nécessaires et ralentissent l'exécution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      lastRowCess = Sheets("Cessions").Range("A65536").End(xlUp).Row
        If lastRowCess > 20 Then
            Rows("20:" & lastRowCess).Delete
        End If
     
        ' Offres acceptées '
     
        lastRowCess = Sheets("Cessions").Range("A65536").End(xlUp).Row
        Range("A11:J11").Copy Range("A" & lastRowCess + 2)
    pour le début de la macro .....
    Bonjour,

    Merci pour ton aide. J'ai effectivement corrigé cela. Malheureusement, lors de l'exécution de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      lastRowCess = Sheets("Cessions").Range("A65536").End(xlUp).Row
        If lastRowCess > 20 Then
            Rows("20:" & lastRowCess).Delete
        End If
    ainsi que pour la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("A11:J11").Copy Range("A" & lastRowCess + 2)
    Je me retrouve avec une 1004

  5. #5
    Membre chevronné
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Par défaut
    Pour eviter la boucle infinie tu peux aussi essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub creationCessions()
        Application.EnableEvents = False 'desactiver les évenements
     
        ….
     
     
      Application.EnableEvents = true 'réactiver les évenements
    Moi ca ne plante plus, tu peux essayer ?

    Un ex pour simplifier ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Range("H" & lastRowCess + 1).Select
    Application.CutCopyMode = False ' inutile si il n'y a pas de copy
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("H" & lastRowCess + 1).FormulaR1C1 = "=RC[-2]-RC[-1]"

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur Marketing Digital
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Marketing Digital
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut
    Bonjour,

    Mais oui bien sur! La boucle infini !

    Je me sens tellement c... Effectivement, le soucis venait du switch entre les deux feuilles.

    Merci pour vos réponses, tout fonctionne parfaitement

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

Discussions similaires

  1. macro dans Excel
    Par mavean dans le forum Access
    Réponses: 5
    Dernier message: 08/04/2006, 11h21
  2. Macro dans un .h
    Par vinzzzz dans le forum C
    Réponses: 8
    Dernier message: 24/02/2006, 18h06
  3. Réponses: 9
    Dernier message: 25/01/2006, 15h35
  4. [Warning] Macro dans .lib séparé
    Par sorry60 dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 20/04/2005, 17h05
  5. Macro dans excel permettant de voir si un fichier est ouvert
    Par VirginieGE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2004, 07h51

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