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 :

Evénement BeforePrint sur une collection de feuilles [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut Evénement BeforePrint sur une collection de feuilles
    Bonjour à tous

    J'aimerais utiliser l'évenement BeforePrint du classeur pour lancer une procédure.
    Or BeforePrint agit sur toutes les feuilles d'un classeur,et ce n'est pas ce qui m'interresse:
    Ce classeur contient 24 onglets, et j'aimerais que cette procédure se déclenche seulement si la feuille active fait partie d'une collection de 14 onglets et non pas sur les onglets restant. (ou ne se déclenche pas sur les 10 autres)

    Les infos que j'ai trouvé concernent des boucles sur toutes les feuilles d'un classeur et non pas sur une partie des feuilles.

    Voici un code que j'ai élaboré sur un classeur test avec trois feuilles, mais ce n'est pas décent avec 14 feuilles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Option Explicit
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
    If ActiveSheet.Name = ("Sheet1") Or ActiveSheet.Name = ("Sheet3") Then
     Exit Sub
    Else
    MsgBox ("Ca marche") 'Call procédure
    End If
     
    End Sub
    Si quelqu'un avait une idée?

    Merci à tous
    Cdlt
    Dom

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une solution consiste à mettre un "Flag" dans une cellule des feuilles qui doivent passer par ton code.
    Ex : en A1 mettre P sur tes 14 feuilles puis tester si la feuille active à P dans A1

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Bonne idée !

    Je vais tester toutes les feuilles et si la condition est requise je lance la procédure...

    Je te remercie pour ta réponse rapide et je vais essayer ça cette après midi.

    A mon avis, l'événement BeforePrint aurrait été plus exploitable sur l'objet Worksheet que sur l'objet Workbook, mais bon...

    Bonne journée
    Cdlt
    Dom

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Autre possibilité, c'est toujours aussi une question de contexte au niveau de l'emploi du classeur, si ça s'y prête, perso je ferais ainsi:

    Rajout au nommage des feuilles d'un (ou +) caractère spécifique genre :

    puis ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
    If InStr(ActiveSheet.Name, "#") <> 0 Then
        MsgBox "Lance ma procédure"
    End If
    Cancel = True ' pour les tests....
    End Sub
    De plus au niveau maintenance, en un coup d’œil, tu gères.

    Tu as tagué "Toutes versions", mais sinon depuis 2002 (je crois), plus élégamment, tu peux jouer sur la couleur des onglets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
     
    If ActiveWorkbook.ActiveSheet.Tab.ThemeColor = xlThemeColorLight2 Then
        MsgBox "Lance ma procédure"
    End If
     
    Cancel = True ' pour les tests....
    End Sub
    cordialement,

    Didier

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Par défaut
    Bonjour Didier,

    Je viens de voir ta réponse et je t'en remercie. Finalement voici le code que j'ai éssayé hier au boulot :
    En poussant plus loin, j'ai mis une condition sur le flag pour être certain que le formulaire soit complêtement rempli par l'opérateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    'mise à jour archivage gratif avant impression
    Dim Ws As Worksheet
     For Each Ws In ThisWorkbook.Worksheets
       If ActiveSheet.Range("B5").Value = "Check_Gratif" Then
            Call macro_Check_Gratif
       Else
            Exit Sub
       End If
       Next Ws
    End Sub
    Le seul souci, c'est que d'une manière ou d'une autre, je suis obligé de tester chaqu'un des 24 onglets afin de voir si la condition est remplie et c'est plus long que la procédure elle même. C'est tout le problème des boucles...
    L'avantage de ce systême, c'est que la fiabilité d'avoir la dernière "mouture" est optimale, et c'est ce qui est important.

    Je vais essayer de gagner du temps en remplaçant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Else
            Exit Sub
       End If
    par Merci encore à vous deux pour votre réponse rapide

    Cdlt
    Dom

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Le seul souci, c'est que d'une manière ou d'une autre, je suis obligé de tester chaqu'un des 24 onglets afin de voir si la condition est remplie et c'est plus long que la procédure elle même. C'est tout le problème des boucles...
    Bonjour,

    Si tu n'imprimes qu'une feuille, dans les 2 approches proosées Flag ou onglet, il n'y a pas de boucles à faire

    cordialement,

    Didier

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

Discussions similaires

  1. tri alphabétique sur une collection
    Par samtheh dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/06/2007, 14h50
  2. Probleme de scope sur une collection
    Par ataya dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/02/2007, 19h19
  3. VBNET : Agir sur une collection de contrôles ?
    Par VinZent dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/11/2006, 09h01
  4. Réponses: 1
    Dernier message: 25/10/2006, 13h41
  5. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11

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