OVH Cloud OVH Cloud

macros obligatoires

20 réponses
Avatar
Quetzalcoatl
Bonsoir,

Comment faire pour interdire l'accès à un fichier XLS si l'opérateur n'a pas
accepté d'activer les macros à l'ouverture du fichier ?
Et comment afficher en plus un message à destination de l'opérateur, lui
indiquant qu'il doit accepter les macros pour pouvoir accéder au fichier ?
Mieux encore, comment afficher un message à destination d'un opérateur qui a
refusé les macros, lui indiquant qu'il doit utiliser les macros, mais lui
laissant de toute façon la possibilité d'accéder au fichier ?

Merci d'avance pour toute piste pour résoudre ce problème, a priori insoluble.

--
Hasta luego

10 réponses

1 2
Avatar
abcd
je peux te proposer cette idée, puisque tu sembles à l'aise en
programmation:

dans le "before save" de ThisWorkBook tu peux définir les actions
suivantes:

- couper les événements
- mémoriser dans une variable la feuille sélectionnée
- restituer la feuille d'avertissement
- lancer une sauvegarde (lancer l'action .save ;
la macro n'est pas ré-appelée puisque les événements sont coup és)
- masquer la feuille d'avertissement
- sélectionner l'ancienne feuille
- réactiver les événements
- annuler la sauvegarde normale (cancel= true)



ouf !
Avatar
abcd
je ne l'ai pas expliqué, mais note que le fond du raisonnement est:

- j'ai besoin de faire d'autres actions après la sauvegarde

- il n'y a pas d'événement after_save

- alors je dois tout faire (l'avant, la sauvegarde, l'après) dans un
seul et même événement
Avatar
Misange
et ta proc est sur excelabo depuis un bon moment aussi !
http://www.excelabo.net/xl/macros.php#forcermacros
Finalement, quand tu fais des efforts, tu arrives à faire des trucs de
temps en temps Chris ! Continue, tu en dans la bonne voie, ton passage
en année supérieure est presque acquis :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 00:07, :
Bonjour

Commence à dater...
(2001-10-20 03:43:26)

http://groups.google.com/groups?q=Pour+utiliser+ce+classeur,+vous+devez+group:microsoft.public.fr.excel+author:ChrisV&hl=fr&lr=&ie=UTF-8&oe=UTF-8&selm=%23WeS7KVWBHA.992%40tkmsftngp03&rnum=1


ChrisV


"Quetzalcoatl" a écrit dans le message de
news: 42c06c64$0$908$

Merci pour ta réponse.
L'idée est d'inciter fortement à l'utilisation de macros des opérateurs
qui,
sinon, pourraient créer des dégats dans le fichier, par exemple en faisant
des
copier-coller intempestifs là où des macros ont été prévues pour faire le
travail proprement. Il ne s'agit cependant pas de faire du totalitarisme
:-) ni
que l'ensemble résiste à une armada d'informaticiens armés jusqu'aux
dents -;)
d'où l'idée n° 3 d'un simple message incitatif.

- Quel est l'effet de "thisworkbook.isaddin=true" ?
- Comment fait-on pour cacher / décacher les feuilles par VBA ?

Merci d'avance !


Bonjour,

beaucoup de questions dont la solution est contradictoire.
Si tu veux empêcher quelqu'un, non pas d'acceder à un fichier , mais de
ne rien pouvoir faire avec (sauf s'il connait VBA et/ou est capable de
déplomber ton projet), il existe au moins 2 solutions. La 1ere, faire en
sorte que ton fichier soit du type macro complémentaire , c.à.d ecrire
thisworkbook.isaddin=true pour le présent fichier à sa fermeture p.e
dans le workbook_beforeclose.
Dans ces conditions lors du workbook_open de ce fichier , si les macros
ne sont pas activées, alors le fichier reste Addin=true et l'utilisateur
ne le voit pas sur le plan de travail. Si il active les macros, tu mets
dans le workbook_open l'instruction Thisworkbook.isaddinúlse.
La 2eme solution consiste à cacher toutes les feuilles sauf une ( la
feuille d'accueil p.e) et à ne les décacher que si l'utilisateur active
les macros, avec toujours pareil des instructions dans le workbook_open
pour les décacher.
Ppour lui présenter un message avant l'apparition de la boite de
dialogue "Activer les macros, ce n'est pas possible ( et c'est tant
mieux, sinon les amateurs de virus se régaleraient)
Quant à ta 3eme question, je ne suis pas sur de comprendre et ce en
raison des 2 premières questions. Si l'utilisateur n'a pas activé les
macros, à quoi celà sert t-il qu'il accède au fichier puisque semble
t-il celles paraissent indispensables à son fonctionnement optimal.


A+


Bonsoir,

Comment faire pour interdire l'accès à un fichier XLS si l'opérateur n'a
pas
accepté d'activer les macros à l'ouverture du fichier ?
Et comment afficher en plus un message à destination de l'opérateur, lui
indiquant qu'il doit accepter les macros pour pouvoir accéder au fichier
?
Mieux encore, comment afficher un message à destination d'un opérateur
qui a
refusé les macros, lui indiquant qu'il doit utiliser les macros, mais
lui
laissant de toute façon la possibilité d'accéder au fichier ?

Merci d'avance pour toute piste pour résoudre ce problème, a priori
insoluble.

--
Hasta luego



--
Amicalement vôtre











Avatar
Misange
J'ai oublié, et ceci est valable pour Alain aussi : les deux frangins,
comme devoir de vacances, vous êtes priés d'étudier enfin les fonctions
index/equiv. Depuis le temps qu'on vous dit qu'il faut vous y mettre,
cette fois, il n'y aura plus de reculade possible. D'autant qu'il y a au
moins une personne qui peut vous expliquer si vous n'avez pas compris.
Pour vous détendre ensuite et faire travailler vos petits doigts, vous
avez aussi le droit de faire quelques matricielles.Bonnes vacances !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 09:26, :
et ta proc est sur excelabo depuis un bon moment aussi !
http://www.excelabo.net/xl/macros.php#forcermacros
Finalement, quand tu fais des efforts, tu arrives à faire des trucs de
temps en temps Chris ! Continue, tu en dans la bonne voie, ton passage
en année supérieure est presque acquis :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 00:07, :

Bonjour

Commence à dater...
(2001-10-20 03:43:26)

http://groups.google.com/groups?q=Pour+utiliser+ce+classeur,+vous+devez+group:microsoft.public.fr.excel+author:ChrisV&hl=fr&lr=&ie=UTF-8&oe=UTF-8&selm=%23WeS7KVWBHA.992%40tkmsftngp03&rnum=1



ChrisV


"Quetzalcoatl" a écrit dans le
message de news: 42c06c64$0$908$

Merci pour ta réponse.
L'idée est d'inciter fortement à l'utilisation de macros des
opérateurs qui,
sinon, pourraient créer des dégats dans le fichier, par exemple en
faisant des
copier-coller intempestifs là où des macros ont été prévues pour
faire le
travail proprement. Il ne s'agit cependant pas de faire du
totalitarisme :-) ni
que l'ensemble résiste à une armada d'informaticiens armés jusqu'aux
dents -;)
d'où l'idée n° 3 d'un simple message incitatif.

- Quel est l'effet de "thisworkbook.isaddin=true" ?
- Comment fait-on pour cacher / décacher les feuilles par VBA ?

Merci d'avance !


Bonjour,

beaucoup de questions dont la solution est contradictoire.
Si tu veux empêcher quelqu'un, non pas d'acceder à un fichier , mais de
ne rien pouvoir faire avec (sauf s'il connait VBA et/ou est capable de
déplomber ton projet), il existe au moins 2 solutions. La 1ere,
faire en
sorte que ton fichier soit du type macro complémentaire , c.à.d ecrire
thisworkbook.isaddin=true pour le présent fichier à sa fermeture p.e
dans le workbook_beforeclose.
Dans ces conditions lors du workbook_open de ce fichier , si les macros
ne sont pas activées, alors le fichier reste Addin=true et
l'utilisateur
ne le voit pas sur le plan de travail. Si il active les macros, tu mets
dans le workbook_open l'instruction Thisworkbook.isaddinúlse.
La 2eme solution consiste à cacher toutes les feuilles sauf une ( la
feuille d'accueil p.e) et à ne les décacher que si l'utilisateur active
les macros, avec toujours pareil des instructions dans le workbook_open
pour les décacher.
Ppour lui présenter un message avant l'apparition de la boite de
dialogue "Activer les macros, ce n'est pas possible ( et c'est tant
mieux, sinon les amateurs de virus se régaleraient)
Quant à ta 3eme question, je ne suis pas sur de comprendre et ce en
raison des 2 premières questions. Si l'utilisateur n'a pas activé les
macros, à quoi celà sert t-il qu'il accède au fichier puisque semble
t-il celles paraissent indispensables à son fonctionnement optimal.


A+


Bonsoir,

Comment faire pour interdire l'accès à un fichier XLS si
l'opérateur n'a pas
accepté d'activer les macros à l'ouverture du fichier ?
Et comment afficher en plus un message à destination de
l'opérateur, lui
indiquant qu'il doit accepter les macros pour pouvoir accéder au
fichier ?
Mieux encore, comment afficher un message à destination d'un
opérateur qui a
refusé les macros, lui indiquant qu'il doit utiliser les macros,
mais lui
laissant de toute façon la possibilité d'accéder au fichier ?

Merci d'avance pour toute piste pour résoudre ce problème, a priori
insoluble.

--
Hasta luego




--
Amicalement vôtre













Avatar
ChrisV
Bien maîtresse !
je m'y colle tout de suite ! ;-))


ChrisV


"Misange" a écrit dans le message de news:

J'ai oublié, et ceci est valable pour Alain aussi : les deux frangins,
comme devoir de vacances, vous êtes priés d'étudier enfin les fonctions
index/equiv. Depuis le temps qu'on vous dit qu'il faut vous y mettre,
cette fois, il n'y aura plus de reculade possible. D'autant qu'il y a au
moins une personne qui peut vous expliquer si vous n'avez pas compris.
Pour vous détendre ensuite et faire travailler vos petits doigts, vous
avez aussi le droit de faire quelques matricielles.Bonnes vacances !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 09:26, :
et ta proc est sur excelabo depuis un bon moment aussi !
http://www.excelabo.net/xl/macros.php#forcermacros
Finalement, quand tu fais des efforts, tu arrives à faire des trucs de
temps en temps Chris ! Continue, tu en dans la bonne voie, ton passage en
année supérieure est presque acquis :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 00:07, :

Bonjour

Commence à dater...
(2001-10-20 03:43:26)

http://groups.google.com/groups?q=Pour+utiliser+ce+classeur,+vous+devez+group:microsoft.public.fr.excel+author:ChrisV&hl=fr&lr=&ie=UTF-8&oe=UTF-8&selm=%23WeS7KVWBHA.992%40tkmsftngp03&rnum=1


ChrisV


"Quetzalcoatl" a écrit dans le
message de news: 42c06c64$0$908$

Merci pour ta réponse.
L'idée est d'inciter fortement à l'utilisation de macros des opérateurs
qui,
sinon, pourraient créer des dégats dans le fichier, par exemple en
faisant des
copier-coller intempestifs là où des macros ont été prévues pour faire
le
travail proprement. Il ne s'agit cependant pas de faire du
totalitarisme :-) ni
que l'ensemble résiste à une armada d'informaticiens armés jusqu'aux
dents -;)
d'où l'idée n° 3 d'un simple message incitatif.

- Quel est l'effet de "thisworkbook.isaddin=true" ?
- Comment fait-on pour cacher / décacher les feuilles par VBA ?

Merci d'avance !


Bonjour,

beaucoup de questions dont la solution est contradictoire.
Si tu veux empêcher quelqu'un, non pas d'acceder à un fichier , mais
de
ne rien pouvoir faire avec (sauf s'il connait VBA et/ou est capable de
déplomber ton projet), il existe au moins 2 solutions. La 1ere, faire
en
sorte que ton fichier soit du type macro complémentaire , c.à.d ecrire
thisworkbook.isaddin=true pour le présent fichier à sa fermeture p.e
dans le workbook_beforeclose.
Dans ces conditions lors du workbook_open de ce fichier , si les
macros
ne sont pas activées, alors le fichier reste Addin=true et
l'utilisateur
ne le voit pas sur le plan de travail. Si il active les macros, tu
mets
dans le workbook_open l'instruction Thisworkbook.isaddinúlse.
La 2eme solution consiste à cacher toutes les feuilles sauf une ( la
feuille d'accueil p.e) et à ne les décacher que si l'utilisateur
active
les macros, avec toujours pareil des instructions dans le
workbook_open
pour les décacher.
Ppour lui présenter un message avant l'apparition de la boite de
dialogue "Activer les macros, ce n'est pas possible ( et c'est tant
mieux, sinon les amateurs de virus se régaleraient)
Quant à ta 3eme question, je ne suis pas sur de comprendre et ce en
raison des 2 premières questions. Si l'utilisateur n'a pas activé les
macros, à quoi celà sert t-il qu'il accède au fichier puisque semble
t-il celles paraissent indispensables à son fonctionnement optimal.


A+


Bonsoir,

Comment faire pour interdire l'accès à un fichier XLS si l'opérateur
n'a pas
accepté d'activer les macros à l'ouverture du fichier ?
Et comment afficher en plus un message à destination de l'opérateur,
lui
indiquant qu'il doit accepter les macros pour pouvoir accéder au
fichier ?
Mieux encore, comment afficher un message à destination d'un
opérateur qui a
refusé les macros, lui indiquant qu'il doit utiliser les macros, mais
lui
laissant de toute façon la possibilité d'accéder au fichier ?

Merci d'avance pour toute piste pour résoudre ce problème, a priori
insoluble.

--
Hasta luego




--
Amicalement vôtre















Avatar
Quetzalcoatl
Bonsoir,

je peux te proposer cette idée, puisque tu sembles à l'aise en
programmation:
tout est relatif !


- couper les événements
Euhh... Comment on fait ça ? Et c'est quoi, un évènement ?


Merci d'avance !

--
Bye-Bye

Avatar
anonymousA
bonjour,

couper les evenements pour ton corespondant veut dire ecrire
l'instruction Application.enableeventsúlse, ce qui revient à empêcher
le fait que des evenements soient sinon détectés du moins empechés de
déclencher des macros qui leur sont attachées.
Je te conseille d'ailleurs si tu utilises cette instruction de ne pas
oublier de la remettre à true avant de terminer ta procédure car
autrement , tout le temps que dure la session d'Excel en cours, le
gestionnaire d'evenements est désactivé.

Ceci dit, que sont les evenements ? Ce sont des actes particuliers que
VBA reconnait, p.e activer ou desactiver une feuille, l'ouverture d'un
classeur, doublecliquer sur une cellule , etc....
Faire un de ces evenements (et il y en a beaucoup) déclenche la
reconniassance par VBA qu'il s'est passé quelque chose. Ce faisant, en
connaissant quel type d'évenement on veut gérer, il est possible
d'inserer des instructions dans la macro à laquelle appartient
l'evenement et de faire faire quelque chose à VBA que tu as décidé.

ex, je veux que quand j'active la Feuil, VBA me renvoie le message
"Bonjour". Dans ces conditions, je vais dans le module de Feuille de
Feuil1 et je choisis Worksheet avec le combobox de l'editeur de VBA puis
dans le combobox situé à la droite du précédent, je choisis Activate.
L'éditeur m'écrit instantanémént dans la fenêtre d'édition

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

entre ces deux lignes , j'insère l'instruction Msgbox "Bonjour".


Dans ces conditions la macro devient

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Msgbox "Bonjour"
End Sub

Chaque fois que j'activerai la feuille Feuil1, VBA me renverra le
message "Bonjour". Si par contre je désactive le gestionnaire
d'évenements (Application.enableeventsúlse) ou que ce soit dans uen
macro de mon projet ou d'un autre et que j'oublie ou que ne souhaite pas
le remettre à true, alors l'evenement ,ne se déclenchera pas.

Espère avoir été un peu clair. Ce sont des techniques qui s'acquièrent
doucement. Pas de souci si tu n'as pas tout compris du 1er coup.


A+


Bonsoir,


je peux te proposer cette idée, puisque tu sembles à l'aise en
programmation:


tout est relatif !


- couper les événements


Euhh... Comment on fait ça ? Et c'est quoi, un évènement ?

Merci d'avance !

--
Bye-Bye





Avatar
Quetzalcoatl
Bonsoir,

Ca fonctionne très bien ! Merci beaucoup !
Voici le code, qui mérite dêtre sur excelabo, non ;-)

Const MessageSheetName As String = "Message"
Private Sub WorkBook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As Boolean)
Dim sh As Worksheet
Dim sht_dislayed As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'memorize current sheet
Set sht_dislayed = ActiveSheet
'hide sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = True _
Else sh.Visible = xlSheetVeryHidden
Next
End With
'save file
ActiveWorkbook.Save
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden _
Else sh.Visible = True
Next
End With
'select memorized sheet
sht_dislayed.Select
'enable events & screen updating
Application.EnableEvents = False
Application.ScreenUpdating = False
'cancel file save
Cancel = True
End Sub
Private Sub workbook_open()
Dim sh As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden _
Else sh.Visible = True
Next
End With
'enable events & screen updating
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


je peux te proposer cette idée, puisque tu sembles à l'aise en
programmation:

dans le "before save" de ThisWorkBook tu peux définir les actions
suivantes:

- couper les événements
- mémoriser dans une variable la feuille sélectionnée
- restituer la feuille d'avertissement
- lancer une sauvegarde (lancer l'action .save ;
la macro n'est pas ré-appelée puisque les événements sont coupés)
- masquer la feuille d'avertissement
- sélectionner l'ancienne feuille
- réactiver les événements
- annuler la sauvegarde normale (cancel= true)



ouf !


--
Adeus

Avatar
Quetzalcoatl
Bonsoir et merci pour cette réponse très complète, grâce à laquelle j'ai pu
exploiter avec succès la recommandation de abcd (voir le code dans ma réponse à
abcd).
Cordialement

--
Ite et bene valete

bonjour,

couper les evenements pour ton corespondant veut dire ecrire
l'instruction Application.enableeventsúlse, [...]


Avatar
Misange
examen à la rentrée !
:-)
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 29/06/2005 01:27, :
Bien maîtresse !
je m'y colle tout de suite ! ;-))


ChrisV


"Misange" a écrit dans le message de news:


J'ai oublié, et ceci est valable pour Alain aussi : les deux frangins,
comme devoir de vacances, vous êtes priés d'étudier enfin les fonctions
index/equiv. Depuis le temps qu'on vous dit qu'il faut vous y mettre,
cette fois, il n'y aura plus de reculade possible. D'autant qu'il y a au
moins une personne qui peut vous expliquer si vous n'avez pas compris.
Pour vous détendre ensuite et faire travailler vos petits doigts, vous
avez aussi le droit de faire quelques matricielles.Bonnes vacances !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 09:26, :

et ta proc est sur excelabo depuis un bon moment aussi !
http://www.excelabo.net/xl/macros.php#forcermacros
Finalement, quand tu fais des efforts, tu arrives à faire des trucs de
temps en temps Chris ! Continue, tu en dans la bonne voie, ton passage en
année supérieure est presque acquis :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 28/06/2005 00:07, :


Bonjour

Commence à dater...
(2001-10-20 03:43:26)

http://groups.google.com/groups?q=Pour+utiliser+ce+classeur,+vous+devez+group:microsoft.public.fr.excel+author:ChrisV&hl=fr&lr=&ie=UTF-8&oe=UTF-8&selm=%23WeS7KVWBHA.992%40tkmsftngp03&rnum=1


ChrisV


"Quetzalcoatl" a écrit dans le
message de news: 42c06c64$0$908$


Merci pour ta réponse.
L'idée est d'inciter fortement à l'utilisation de macros des opérateurs
qui,
sinon, pourraient créer des dégats dans le fichier, par exemple en
faisant des
copier-coller intempestifs là où des macros ont été prévues pour faire
le
travail proprement. Il ne s'agit cependant pas de faire du
totalitarisme :-) ni
que l'ensemble résiste à une armada d'informaticiens armés jusqu'aux
dents -;)
d'où l'idée n° 3 d'un simple message incitatif.

- Quel est l'effet de "thisworkbook.isaddin=true" ?
- Comment fait-on pour cacher / décacher les feuilles par VBA ?

Merci d'avance !



Bonjour,

beaucoup de questions dont la solution est contradictoire.
Si tu veux empêcher quelqu'un, non pas d'acceder à un fichier , mais
de
ne rien pouvoir faire avec (sauf s'il connait VBA et/ou est capable de
déplomber ton projet), il existe au moins 2 solutions. La 1ere, faire
en
sorte que ton fichier soit du type macro complémentaire , c.à.d ecrire
thisworkbook.isaddin=true pour le présent fichier à sa fermeture p.e
dans le workbook_beforeclose.
Dans ces conditions lors du workbook_open de ce fichier , si les
macros
ne sont pas activées, alors le fichier reste Addin=true et
l'utilisateur
ne le voit pas sur le plan de travail. Si il active les macros, tu
mets
dans le workbook_open l'instruction Thisworkbook.isaddinúlse.
La 2eme solution consiste à cacher toutes les feuilles sauf une ( la
feuille d'accueil p.e) et à ne les décacher que si l'utilisateur
active
les macros, avec toujours pareil des instructions dans le
workbook_open
pour les décacher.
Ppour lui présenter un message avant l'apparition de la boite de
dialogue "Activer les macros, ce n'est pas possible ( et c'est tant
mieux, sinon les amateurs de virus se régaleraient)
Quant à ta 3eme question, je ne suis pas sur de comprendre et ce en
raison des 2 premières questions. Si l'utilisateur n'a pas activé les
macros, à quoi celà sert t-il qu'il accède au fichier puisque semble
t-il celles paraissent indispensables à son fonctionnement optimal.


A+



Bonsoir,

Comment faire pour interdire l'accès à un fichier XLS si l'opérateur
n'a pas
accepté d'activer les macros à l'ouverture du fichier ?
Et comment afficher en plus un message à destination de l'opérateur,
lui
indiquant qu'il doit accepter les macros pour pouvoir accéder au
fichier ?
Mieux encore, comment afficher un message à destination d'un
opérateur qui a
refusé les macros, lui indiquant qu'il doit utiliser les macros, mais
lui
laissant de toute façon la possibilité d'accéder au fichier ?

Merci d'avance pour toute piste pour résoudre ce problème, a priori
insoluble.

--
Hasta luego




--
Amicalement vôtre



















1 2