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 :

Exécution de Macro avant code de la feuille [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut Exécution de Macro avant code de la feuille
    Bonjour,

    J'ai un problème:

    J'ai un code privé de feuille propre à celle ci (qui devrait s'exécuter en permanence mais que je n'arrive qu'a faire marcher lorsque je déclenche une macro d'un module, comment ça se fait?) et un module avec une macro.

    Lorsque j'active la macro et que je regarde le pas à pas, je vois qu'elle exécute la macro du module et aussi la macro de la feuille en parallèle, ce qui fausse mon résultat.

    Je voudrais que:

    1/ La macro de feuille fonctionne en permanence (il s'agit d'une extraction de donnée puis d'un tri par ordre alphabétique)
    2/ Lorsque je lance ma macro de module, la macro de feuille se stoppe pendant les opérations (il s'agit d'une création de client avec détails, si la macro de feuille s'exécute en même temps, cela fausse tout!)
    3/ Une fois la macro de module terminée, la macro de feuille reprenne la main et me déplace ma ligne avec tout les détails au bon endroit et extrait ces données (bref, reprenne la main quoi)


    Quelqu'un(e) à une idée à ce sujet?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    1/ La macro de feuille fonctionne en permanence (il s'agit d'une extraction de donnée puis d'un tri par ordre alphabétique)
    Qu'appelle-tu "fonctionne en permanence" ? La macro tourne sans cesse en boucle ou elle est lancée par une procédure évènementielle du genre "Worksheet_Change" ?
    2/ Lorsque je lance ma macro de module, la macro de feuille se stoppe pendant les opérations (il s'agit d'une création de client avec détails, si la macro de feuille s'exécute en même temps, cela fausse tout!)
    Tu peux utiliser un drapeau modifié dans la procédure se trouvant dans le module et contrôlé dans la procédure de la feuille.
    Dans la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub MaMacroFeuille()
     
        If Drapeau = True Then
     
            'le code ...
            '...
            '...
     
        End If
     
    End Sub
    dans le module :
    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
     
    Public Drapeau As Boolean
     
    Sub MaMacroModule()
     
        Drapeau = False
     
        'le code ...
        '...
        '...
     
        'autorise le fonctionnement
        Drapeau = True
     
        'et relance la macro !
        MaMacroFeuille
     
    End Sub
    Hervé.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il faut interdire les événements en début de traitement et le rétablir en fin!
    Application.EventsEnabled=false

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut
    Rdurupt:

    Bonjour,
    Il faut interdire les événements en début de traitement et le rétablir en fin!
    Application.EventsEnabled=false
    Erreur, application non reconnue par l'objet, la solution est surement meilleure car plus simple


    Theze:

    Qu'appelle-tu "fonctionne en permanence" ? La macro tourne sans cesse en boucle ou elle est lancée par une procédure événementielle du genre "Worksheet_Change" ?
    c'est en effet un Worksheet_Change, je n'arrive pas à relancer la macro de feuille à la fin de la macro module (qui empêche bien la macro feuille de fonctionner avec ta solution)

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    C'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.EnableEvents = False
    dont veut parler Robert !

    Pour relancer un code inclus dans une procédure évènementielle, il te faut le sortir de cette dernière pour le mettre dans un module standard (en faire une Sub) et tu peux l'appeler dans la procédure évènementielle de cette façon par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        'target est passé en argument
        MaMacroFeuille Target
     
    End Sub
    et dans le module standard les Sub :
    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
    30
     
    Public Drapeau As Boolean
     
    Sub MaMacroModule()
     
        Drapeau = False
     
        'le code ...
        '...
        '...
     
        'autorise le fonctionnement
        Drapeau = True
     
        'et relance la macro !
        MaMacroFeuille ActiveCell
     
    End Sub
     
    Sub MaMacroFeuille(Cel As Range)
     
        If Drapeau = True Then
     
            'le code ...
            '...
            '...
     
        End If
     
    End Sub
    Hervé.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut
    Bonjour,

    Je ne comprend pas très bien, si j'extrait le code de ma macro feuille pour le mettre dans ma macro module, je perd un peu l'intérêt de mettre ce code dans ma feuille et en plus je fais un doublons du même macro non?

    La solution de Robert fonctionne (avec le Application.EnableEvents = False) mais ne me permet pas de relancer ma macro feuille qui, je pense, ne se lance que par événement et d'ailleurs ne se lance pas du tout (pareil pour une macro feuille qui est sensée se lancer au moment ou je sélectionne une cellule..).

    Pour plus de compréhension, je mets les deux codes dans ce message:

    Le premier, Macro Module, qui me permet d'insérer un nouveau client avec détails à partir d'un formulaire prérempli

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Option Explicit
    Sub Macro1()
    '
    ' Macro1 Macro
     
    Application.EnableEvents = False
     
     
    Dim i As Integer
    Dim j As Integer
     
        Sheets("Data").Select
        Rows("2:2").Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Rows("2:2").Select
        Selection.ClearFormats
        Sheets("DashBoard").Select
     
        For i = 1 To 12
            Worksheets("Data").Cells(2, 1 + i) = Worksheets("DashBoard").Cells(5 + i, 13)
        Next
     
        Sheets("Data").Select
        Range("A2").Select
        With Selection.Font
            .Size = 14
        End With
     
        For j = 1 To 11
     
           Worksheets("DashBoard").Cells(5 + j, 13) = ""
        Next
     
        Sheets("Data").Range("O2").Select
        ActiveCell.FormulaR1C1 = _
            "=IF(TODAY()-RC[-3]=TODAY(),""Make contact"",IF(TODAY()-RC[-3]<DashBoard!R2C13,""take Care"",IF(TODAY()-RC[-3]<DashBoard!R3C13,""Relaunch"",IF(TODAY()-RC[-3]<>TODAY(),""Remake Contact"",""""))))"
     
     
        Range("A2:V2").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders()
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders()
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders()
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders()
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        ' Macro3 Macro
     
    Application.EnableEvents = True
     
     
     
    End Sub

    Le deuxième, Macro feuille, qui me permet d'extraire de la base de donnée les infos de Pays et de client, de trier par ordre alphabétique cette extraction et de trier aussi la base de donnée (j'ai donc besoin de d'abord remplir une ligne avant de la triée, sinon je la fractionne et c'es tout pas beau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
     
     If Not Intersect([B2:C1000], Target) Is Nothing And Target.Count = 1 Then
       [B2:V1000].Sort Key1:=[B2], Key2:=[B2], Key3:=[B2]
       [B1:C1000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[Z1], Unique:=True
       [B1:C1000].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[Z1:AA1], Unique:=True
     End If
    End If
    End Sub

    En espérant que vous comprendrez mieux mon problème et pourrez m'aider!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/02/2015, 08h36
  2. Ecrire dans le code d'une feuille par macro
    Par Tomuscz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/07/2009, 12h19
  3. Masquer des feuilles de calculs et exécuter des macros
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/03/2009, 20h04
  4. Exécution Macro VBA et actualisation des feuilles
    Par DjJEJ83 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/07/2007, 11h08
  5. [VBA-E] Lancement de la macro avant l'ouverture des feuilles
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 17h07

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