OVH Cloud OVH Cloud

vba - "Workbook_Open" ne fonctionne pas !

15 réponses
Avatar
j-pascal
Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

'--------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP

5 réponses

1 2
Avatar
lSteph
Bonjour,

;-)

j'ai dû rater le message où qq'un ne serait ou pas serein ou pas
courtois..????
Il est clair pour moi que ces protection sont bonnes que pour ceux qui
le veulent.

La confiance va dans nombre de cas ou juste se préserver des erreurs
(protection sommaire)

@+

--
lsteph

Papyjac a écrit :
Bonjour Lsteph et J-pascal

restons courtois et sereins

Effectivement, J-pascal est coincé, mais il faut débuter un jour, bre f, il
veut interdire aux utilisateurs de faire telle ou telle chose. les frustr er...

Moi je dis que l'utilisateur doit resté libre d'utiliser Excel comme il
l'entend

J'ai débuté en truffant les classeurs de procédure événements, ouvrir,
fermer, enregistrer, sélection... et j'ai eu des problèmes comme lui avec les
ENEANBLEEVENTS.

Bref, désormais, quand je donne un classeur en saisie à l'utilisateur , je le
laisse libre. Il doit seulement respecter les consignes. Il peut même
bricoler s'il le veut, sous réserve que ça ne plante pas le processus

De toute manière si ça plante, il te téléphonera pour dire "ca ne marche
pas" et tu iras lui sauver le vie, tu lui passe un savon s'il à trop br icolé.
et tu renforces un peu ton code... naturellement, il est indispensable qu e
ton code ne soit pas dans le classeur lui-même, car tu auras un gros pr oblème
de déploiement. mais c'est une autre histoire trop longue ce matin

Bon courage j-Pascal et soi plus cool avec les utilisateurs

--
Papyjac


"LSteph" a écrit :

> ...mais un enableevents reste de toutes façons possible
>
> (..entre autres)..
>
> --
> lSteph
>
> (aussi bien d'ailleurs pour qui veut déjouer ces inutiles tentatives de
> sécurisation.)
>
> j-pascal a écrit :
> > Bonsoir,
> >
> > Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveA sUI
> > As Boolean, Cancel As Boolean)"
> >
> > Je pense que le pb est là (à part moi, bien sûr !!)
> >
> > Comment est-il possible de shunter l'option "Enregistrer sous" ?
> >
> > Imaginons qu'il y ait certaines actions effectuées avant la fermetu re du
> > classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
> > Then Cancel = True", mon classeur reste ouvert et je ne peux pas
> > "reboucler" vers la fermeture "classique" que j'avais prévu si
> > l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregist rer
> > ailleurs que là où je voulais qu'il soit !!!
> >
> > Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette op tion
> > ! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'a i
> > plutôt envie de passer tout le classeur à "Eraser.exe"...
> >
> > JP
> >
> > PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
> > d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas d û
> > reproduire ; l'ouverture est donc normale.
> >
> >> Bonjour J-pascal,
> >>
> >> Je comprends qu'il y a 3 scénarios de tests :
> >> 1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
> >> qu'Excel est déjà ouvert
> >> 3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé l e
> >> classeur précédent
> >>
> >> Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
> >> les 3 cas J'ai comme l'impression que les évènements sont inhib és dans
> >> le 3ème cas
> >>
> >> --
> >> Papyjac
> >>
> >>
> >> "j-pascal" a écrit :
> >>
> >>> Re,
> >>>
> >>> Je laisse le message me demandant d'activer ou pas les macros, en
> >>> "manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accept é"
> >>> les macros !
> >>> Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme ju ste
> >>> le classeur (en particulier avec un essai sur "enregistrer sous"),
> >>> l'ouverture suivante n'active pas le Workbook_open !!!
> >>>
> >>> Suis perdu ;-(
> >>>
> >>> JP
> >>>
> >>>> Bonjour J-pascal
> >>>>
> >>>> Il faut que le niveau de sécurité macro sous moyen ou inféri eure
> >>>>
> >>>> Mets une instruction STOP dans la procédure pour voir si le code
> >>>> s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
> >>>> 2. s'il ne s'arrête pas c'est que les macro sous inactive
> >>>>
> >>>> --
> >>>> Papyjac
> >>>>
> >>>>
> >>>> "j-pascal" a écrit :
> >>>>
> >>>>> Bonjour,
> >>>>>
> >>>>> Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
> >>>>> l'ouverture du classeur !
> >>>>>
> >>>>> '-------
> >>>>> Private Sub Workbook_Open()
> >>>>> Dim Sh As Worksheet
> >>>>>
> >>>>> Application.ScreenUpdating = False
> >>>>> Call ProchaineAlerte
> >>>>>
> >>>>> For Each Sh In ThisWorkbook.Sheets
> >>>>> Sh.Visible = xlSheetVisible
> >>>>> Next
> >>>>> etc.
> >>>>> '--------
> >>>>>
> >>>>> La sortie :
> >>>>>
> >>>>> '--------
> >>>>> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel
> >>>>> As Boolean)
> >>>>>
> >>>>> etc.
> >>>>>
> >>>>> 'Application.EnableEvents = True
> >>>>> ThisWorkbook.Close True 'ajout 7/12
> >>>>> End Sub
> >>>>> '--------
> >>>>>
> >>>>> Ca fonctionne si je ferme Excel et que je rouvre le classeur !
> >>>>> L'ajout d'un "Application.EnableEvents = True" en sortie ne cha nge
> >>>>> rien, donc je suis un peu perdu !
> >>>>>
> >>>>> Merci pour votre aide,
> >>>>>
> >>>>> JP
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >>>
> >
> >
>


Avatar
Papyjac
Bonjour Lsteph

Serein oui, mais les mouches n'ont qu'à voler ailleurs, confère ton message
de 23h37, mais peut être que c'est moi qui ne suis pas l'heure, ni au parfum

--
Papyjac


"lSteph" a écrit :

Bonjour,

;-)

j'ai dû rater le message où qq'un ne serait ou pas serein ou pas
courtois..????
Il est clair pour moi que ces protection sont bonnes que pour ceux qui
le veulent.

La confiance va dans nombre de cas ou juste se préserver des erreurs
(protection sommaire)

@+

--
lsteph

Papyjac a écrit :
> Bonjour Lsteph et J-pascal
>
> restons courtois et sereins
>
> Effectivement, J-pascal est coincé, mais il faut débuter un jour, bref, il
> veut interdire aux utilisateurs de faire telle ou telle chose. les frustrer...
>
> Moi je dis que l'utilisateur doit resté libre d'utiliser Excel comme il
> l'entend
>
> J'ai débuté en truffant les classeurs de procédure événements, ouvrir,
> fermer, enregistrer, sélection... et j'ai eu des problèmes comme lui avec les
> ENEANBLEEVENTS.
>
> Bref, désormais, quand je donne un classeur en saisie à l'utilisateur, je le
> laisse libre. Il doit seulement respecter les consignes. Il peut même
> bricoler s'il le veut, sous réserve que ça ne plante pas le processus
>
> De toute manière si ça plante, il te téléphonera pour dire "ca ne marche
> pas" et tu iras lui sauver le vie, tu lui passe un savon s'il à trop bricolé.
> et tu renforces un peu ton code... naturellement, il est indispensable que
> ton code ne soit pas dans le classeur lui-même, car tu auras un gros problème
> de déploiement. mais c'est une autre histoire trop longue ce matin
>
> Bon courage j-Pascal et soi plus cool avec les utilisateurs
>
> --
> Papyjac
>
>
> "LSteph" a écrit :
>
> > ...mais un enableevents reste de toutes façons possible
> >
> > (..entre autres)..
> >
> > --
> > lSteph
> >
> > (aussi bien d'ailleurs pour qui veut déjouer ces inutiles tentatives de
> > sécurisation.)
> >
> > j-pascal a écrit :
> > > Bonsoir,
> > >
> > > Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveAsUI
> > > As Boolean, Cancel As Boolean)"
> > >
> > > Je pense que le pb est là (à part moi, bien sûr !!)
> > >
> > > Comment est-il possible de shunter l'option "Enregistrer sous" ?
> > >
> > > Imaginons qu'il y ait certaines actions effectuées avant la fermeture du
> > > classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
> > > Then Cancel = True", mon classeur reste ouvert et je ne peux pas
> > > "reboucler" vers la fermeture "classique" que j'avais prévu si
> > > l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregistrer
> > > ailleurs que là où je voulais qu'il soit !!!
> > >
> > > Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option
> > > ! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai
> > > plutôt envie de passer tout le classeur à "Eraser.exe"...
> > >
> > > JP
> > >
> > > PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
> > > d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
> > > reproduire ; l'ouverture est donc normale.
> > >
> > >> Bonjour J-pascal,
> > >>
> > >> Je comprends qu'il y a 3 scénarios de tests :
> > >> 1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
> > >> qu'Excel est déjà ouvert
> > >> 3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
> > >> classeur précédent
> > >>
> > >> Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
> > >> les 3 cas J'ai comme l'impression que les évènements sont inhibés dans
> > >> le 3ème cas
> > >>
> > >> --
> > >> Papyjac
> > >>
> > >>
> > >> "j-pascal" a écrit :
> > >>
> > >>> Re,
> > >>>
> > >>> Je laisse le message me demandant d'activer ou pas les macros, en
> > >>> "manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté"
> > >>> les macros !
> > >>> Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste
> > >>> le classeur (en particulier avec un essai sur "enregistrer sous"),
> > >>> l'ouverture suivante n'active pas le Workbook_open !!!
> > >>>
> > >>> Suis perdu ;-(
> > >>>
> > >>> JP
> > >>>
> > >>>> Bonjour J-pascal
> > >>>>
> > >>>> Il faut que le niveau de sécurité macro sous moyen ou inférieure
> > >>>>
> > >>>> Mets une instruction STOP dans la procédure pour voir si le code
> > >>>> s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
> > >>>> 2. s'il ne s'arrête pas c'est que les macro sous inactive
> > >>>>
> > >>>> --
> > >>>> Papyjac
> > >>>>
> > >>>>
> > >>>> "j-pascal" a écrit :
> > >>>>
> > >>>>> Bonjour,
> > >>>>>
> > >>>>> Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
> > >>>>> l'ouverture du classeur !
> > >>>>>
> > >>>>> '-------
> > >>>>> Private Sub Workbook_Open()
> > >>>>> Dim Sh As Worksheet
> > >>>>>
> > >>>>> Application.ScreenUpdating = False
> > >>>>> Call ProchaineAlerte
> > >>>>>
> > >>>>> For Each Sh In ThisWorkbook.Sheets
> > >>>>> Sh.Visible = xlSheetVisible
> > >>>>> Next
> > >>>>> etc.
> > >>>>> '--------
> > >>>>>
> > >>>>> La sortie :
> > >>>>>
> > >>>>> '--------
> > >>>>> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel
> > >>>>> As Boolean)
> > >>>>>
> > >>>>> etc.
> > >>>>>
> > >>>>> 'Application.EnableEvents = True
> > >>>>> ThisWorkbook.Close True 'ajout 7/12
> > >>>>> End Sub
> > >>>>> '--------
> > >>>>>
> > >>>>> Ca fonctionne si je ferme Excel et que je rouvre le classeur !
> > >>>>> L'ajout d'un "Application.EnableEvents = True" en sortie ne change
> > >>>>> rien, donc je suis un peu perdu !
> > >>>>>
> > >>>>> Merci pour votre aide,
> > >>>>>
> > >>>>> JP
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>
> > >>>
> > >>>
> > >
> > >
> >



Avatar
LSteph
Bonjour,

> ..., mais peut être que
;-)
En effet, dans ce cas tu as songé à un sens en décalage avec mon propos
je vise la problématique et non pas ceux qui posent une question ou y
répondent (dont moi aussi en l'occurence).

Cela n'empêche pas de rester en accord avec ce qu'on en pense et
l'exprimer si nécessaire, j'ai mis des .. sur ce qui reste libre
d'interprétation mais n'en reflète qu'à peine la signification.
Ce n'est pas être discourtois que de répondre sincèrement en évoquant
cette réalité que je rappelle:

...donc cela mérite encore plus que j'insiste car si j'ai proposé une
solution à la question en elle même, il n'en demeure pas moins que ce
sont efforts anéantis par cette simple proposition que je remets à l'appui:

Sub AucunPb()
application.enableeventsúlse
Activeworkbook.saveas "c:oujeveuxmachin.xls"
application.enableevents=true
end sub

Mon but n'est pas de dénigrer le sujet qui mérite d'autant plus qu'on
s'y intéresse mais la bonne réponse ultra prioritaire amha est de
rappeler qu'à l'excès ces tentatives sont futiles
d'où ..les mouches que j'ai fait voler juste derrière ma proposition .

Cordialement.

--
lSteph

Papyjac a écrit :
Bonjour Lsteph

Serein oui, mais les mouches n'ont qu'à voler ailleurs, confère ton message
de 23h37, mais peut être que c'est moi qui ne suis pas l'heure, ni au parfum



Avatar
LSteph
Bonjour,

je reviens à l'origine de ta question qui visiblement n'a rien à voir
avec la suite.

> Pour une raison que j'ignore, Workbook_Open () ne se lance pas

On pourrait envisager déjà deux hypothèses:
1-t'es passé à 2007 qui si rien n'a changé depuis la beta est très
déplaisant sur la façon d'ignorer a priori l'usage des macros sauf si
on va bidouiller pour les activer.
2-t'as un autre programme ou dans le perso ou autre macro qui fiche la
pagaille par un auto_open ou que sais-je qui désactive les évennements.

Cordialement.

--
lSteph

j-pascal a écrit :
Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

'--------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change rien,
donc je suis un peu perdu !

Merci pour votre aide,

JP




Avatar
LSteph
... autre idée..
où se trouve et que contient prochainealerte
...?

d'autant que cela m'échappe ce beforesave n'est pas le même que celui
que tu évoquais plus bas dans le fil qui contenait un OnTime.;..

Si tu mèle à l'execution l'appel d'une autre procèdure en faisant
quitter un classeur qui sera pour cause rappelé par l'application et que
ca se relance il est possible que cela finisse (si ca boucle ) par se
désactiver.
Ce qui pourrait expliquer ton pb latent de wb open.

Cordialement.

--
lSteph


j-pascal a écrit :
Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

'--------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change rien,
donc je suis un peu perdu !

Merci pour votre aide,

JP




1 2