Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 10h26   #1
Membre du Club
 
Dominique Martin
Inscription : août 2009
Messages : 84
Détails du profil
Informations personnelles :
Nom : Dominique Martin
Âge : 51
Localisation : France, Marne (Champagne Ardenne)

Informations forums :
Inscription : août 2009
Messages : 84
Points : 60
Points : 60
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 :
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
Domimart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 10h44   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 896
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 896
Points : 7 180
Points : 7 180
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 11h13   #3
Membre du Club
 
Dominique Martin
Inscription : août 2009
Messages : 84
Détails du profil
Informations personnelles :
Nom : Dominique Martin
Âge : 51
Localisation : France, Marne (Champagne Ardenne)

Informations forums :
Inscription : août 2009
Messages : 84
Points : 60
Points : 60
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
Domimart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h12   #4
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
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 :
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 :
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 08h53   #5
Membre du Club
 
Dominique Martin
Inscription : août 2009
Messages : 84
Détails du profil
Informations personnelles :
Nom : Dominique Martin
Âge : 51
Localisation : France, Marne (Champagne Ardenne)

Informations forums :
Inscription : août 2009
Messages : 84
Points : 60
Points : 60
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 :
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 :
1
2
3
   Else
        Exit Sub
   End If
par Merci encore à vous deux pour votre réponse rapide

Cdlt
Dom
Domimart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 09h18   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Citation:
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
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 21h46   #7
Membre du Club
 
Dominique Martin
Inscription : août 2009
Messages : 84
Détails du profil
Informations personnelles :
Nom : Dominique Martin
Âge : 51
Localisation : France, Marne (Champagne Ardenne)

Informations forums :
Inscription : août 2009
Messages : 84
Points : 60
Points : 60
Rebonjour,

Ca y est, j'ai vu ce que tu veux dire. Je vais essayer ce code cette après midi en supprimant la boucle For each et directement avec If
Là ça va être interressant...

Merci à toi

Cdlt
Dom

J'imprime bien effectivement qu'une seule feuille, donc voila ce que ça donne au final :

Option Explicit
Code :
1
2
3
4
5
6
7
8
9
 
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'mise à jour archivage gratif avant impression
   If ActiveSheet.Range("B5").Value = "Check_Gratif" Then
        Call macro_Check_Gratif
   Else
        Cancel = True 'Exit Sub
   End If
End Sub
Et là plus de perte de temps ça marche nickel chrome..

Merci à vous deux de m'avoir ouvert les yeux.

Cdlt
Dom
Domimart est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h35.


 
 
 
 
Partenaires

Hébergement Web