Bonjour,
peut-on obliger de passer par une macro pour ouvrir un classeur, c'est à dire empêcher qu'il ne s'ouvre directement.
Bonjour,
peut-on obliger de passer par une macro pour ouvrir un classeur, c'est à dire empêcher qu'il ne s'ouvre directement.
Il ne savait pas que c'était impossible, donc il l' a fait...
Salut,
Voici une proposition. elle est composée de 2 codes macros :
Un dans le fichier qui doit être ouvert par la macro (et que la macro)
Ce code est à placer dans le module "Thisworkbook". Il demande la fermeture du fichier ...
Le problème, c'est que maintenant, si tu veux ouvrir le fichier, a chaque fois, il se ferme ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Workbook_Open() ActiveWorkbook.Close End Sub
Donc dans la macro qui ouvre le fichier, il faut momentanément désactiver les événements
Juste pour être complet, si tu veux, tout de même ouvrir le premier fichier sans passer par une macro (et oui, il y a toujours une solution mais il faut la connaître !!!)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub Macro1() ' ' Macro1 Macro ' Application.EnableEvents = False ' => désactive les événements 'ton code pour ouvri le fichier et faire ce que tu veux dedant Application.EnableEvents = True End Sub
Passe par la commande ouvrir et Maintient la touche "Shift" pendant l'ouverture. Cela à comme effet de déactiver les événements momentanément.
Jérôme
" Je pense donc je suis. Tu es donc j'apprends ". (GCM)
Si ce message vous à aidé, merci de cliquer sur . Si ce message est résolu, cliquez sur .
Bonjour
Tu peux toujours aller au plus simple --->> le protéger par un mot de passe et utiliser ce mot de passe dans l'instruction (ta macro) de son ouverture
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Merci,
je comprends bien le principe, ok pour le code dans le classeur appelé qui ne doit être ouvert que par une macro
par contre pour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub Workbook_Open() ActiveWorkbook.Close End Sub
je ne vois pas bien car il y a des liaisons entre les 2 fichiers, vont-elles être mises à jour automatiquement à l'ouverture du classeur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part sub macro1
je vais tester
Il ne savait pas que c'était impossible, donc il l' a fait...
Il s'agit là d'une autre question, n'ayant rien à voir avec le fait que le fichier soit ouvrable ou non autrement que par macro.je ne vois pas bien car il y a des liaisons entre les 2 fichiers, vont-elles être mises à jour automatiquement à l'ouverture du classeur ?
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.
Ô Saint Excel, Grand Dieu de l'Inutile.
Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.
Bonjour clementmarcotte
Et tous les autres (les espiègles ... et ils ne manquent pas) se dépêcheront d'ouvrir ce classeur, justement parce qu'il aura été protégé (ils voudront savoir pourquoi, du coup ).Ceci dit, les solutions proposées devraient suffire pour les utilisateurs honnêtes et obéissants.
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Les plus vicieux :
- écriront dans le classeur concerné (celui à ne pas ouvrir autrement que par macro depuis un classeur d'appel) une instruction telle que si condition (par exemple présence d'un fichier texte créé et rempli depuis le classeur d'appel) non vérifiée -->> ouverture d'un classeur tiers totalement "bidon", ou de n'importe quoi (la calculette, un jeu quelconque, etc ... par exemple) puis fermeture du classeur.
- écriront depuis le classeur d'appel une instruction de création/remplissage du fichier texte que recherchera le classeur concerné (celui à ne pas ouvrir autrement)
Et ? -->> et ils trouveront toujours un encore plus vicieux qu'eux pour deviner qu'il y a là un mécanisme étrange, qu'il s'efforceront de découvrir, ne serait-ce que pour s'amuser. Et ils y parviendront
Bref -->> beaucoup de travail dans un but assez "questionnable".
Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .
****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...
Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.
Merci à tous, je prends note de vos conseils, j'ai implémenté la solution du post #2 et cela correspond bien à mon besoin
Il ne savait pas que c'était impossible, donc il l' a fait...
Salut.
Attention toutefois avec Application.EnableEvents.
Sans une gestion d'erreurs qui permet de restaurer la gestion des évènements, tu pourrais bloquer les évènements sur tous les fichiers ouverts, même ceux qui sont indépendants de ton "système". Ca pourrait énerver plus d'un utilisateur si ton fichier se plante.
Je ne saurais trop conseiller d'intégrer une gestion d'erreurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Sub Test() On Error GoTo EndHandler Application.EnableEvents = False ... ... ... EndHandler: Application.EnableEvents = True End Sub
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Quand j'ouvre mon fichier je fais ça :
Cela marche très bien mais tu me conseilles donc plûtot cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Application.EnableEvents = False Workbooks.Open ThisWorkbook.Path & "\fichier.xlsm" Application.EnableEvents = True
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 On Error GoTo EndHandler Application.EnableEvents = False ' si erreur on saute cette ligne Workbooks.Open ThisWorkbook.Path & "\fichier.xlsm" ' si erreur on n'ouvre pas EndHandler: Application.EnableEvents = True
Il ne savait pas que c'était impossible, donc il l' a fait...
Oui. imagine ce qui se passe si ton fichier ne peut s'ouvrir pour une raison ou une autre. Il y aura une erreur, tu stopperas le code et Application.EnableEvents restera à False.
Il faut toujours gérer les erreurs lorsque le code modifie une propriété d'application, de manière à remettre Excel dans l'état dans lequel ta macro l'a trouvé.
(Normalement, il faudrait toujours gérer les erreurs avec un On error... sur les évènements, qui sont en général les premiers appels de pile, de manière à ne pas entrer en débogage)
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Oui j'ai bien noté et bien compris,
merci je vais vérifié tout ça (je ne touche quand même pas les propriétés d'application à tout va !)
Il ne savait pas que c'était impossible, donc il l' a fait...
Bonjour,
je reprends cette discussion voulant "protéger" l'accès à certains classeurs
Dans un classeur "test" je fais uniquement :
j'ouvre en faisant "Ouvrir" et en maintenant enfoncée la touche "Shift", j'ai bien le message "test" mais jamais "ok"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Workbook_Open() Msgbox "test" ActiveWorkbook.Close Exit Sub Msgbox "ok" End Sub
Le classeur se ferme toujours
Où est mon erreur ? je ne la vois pas d'après vos conseils..
Il ne savait pas que c'était impossible, donc il l' a fait...
Bonjour,
ça fait quoi à ton avis Exit Sub ?
Et à plus forte raison s'il est précédé de ActiveWorkbook.Close
Seul Chuck Norris arrive à voir Ok
eric
Bonjour,
oui mais bon sang mais c'est bien sur...
Il ne savait pas que c'était impossible, donc il l' a fait...
Et alors ?
Tu le fermes et en plus tu mets Exit Sub. Soit logique, comment voudrais-tu que la macro puisse continuer ?
eric
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager