Evénements ...

Le
Ptit Louis
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements))
Quel est votre sentiment devant cette rebellion ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #6944491
C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?
Ptit Louis
Le #6949641
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?





MichDenis
Le #6954161
Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?





Ptit Louis
Le #6969801
Bonjour,
Merci de ce dernier conseil, mais j'ai d'excellentes raisons de différencier
la fermeture en deux actions (lignes) dictinctes car, comme je l'ai écrit, il
y a parfois des dysonctionnements qui font que la fermeture a lieu sans que
l'enregistrement ait effectivement eu lieu. Tout porte à croire que c'est
fait, mais pas du tout. J'ai des exemples extrêmement cuisants...
Je crois comprendre depuis le temps que je manipule Excel et VBA (1998 :
soit un bail) certaines actions doivent fonctionner. Il y a un truc simple :
c'est créer ces deux classeurs pour constater que cela ne fonctionne pas...
même si tout semble correct ! Comme je le disais hier soir : ils sont dispo
pour tous ceux qui veulent ce frotter à ce vrai problème.
Ma procédure complète de fermeture est décrite dans le post d'hier soir : en
tout 4 lignes (dont deux pourraient être condensées en une seule(?)), donc
une seule de "vrai" code ! La vraie et définitive qui manipule données et
feuilles en comprend 45, pour l'instant !
Dans mon cas c'est flagrant Excel NE VEUT PAS FERMER le classeur
correctement si on utilise un menu alors qu'il le fait "bien" (avec toutes
les incertitudes et questions qui s'ajoutent alors) si on utilise la croix.
Bill t'as lu ma question et mes remarques ??? T'en penses quoi ?


Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?










MichDenis
Le #6977281
Dernier message sur ce fil... comme tu ne semble pas vouloir
décrire avec précision le comportement d'excel ... et les
messages qu'excel te donnent lors de la fermeture... il n'y a
rien d'autre à discuter.




"Ptit Louis"
Bonjour,
Merci de ce dernier conseil, mais j'ai d'excellentes raisons de différencier
la fermeture en deux actions (lignes) dictinctes car, comme je l'ai écrit, il
y a parfois des dysonctionnements qui font que la fermeture a lieu sans que
l'enregistrement ait effectivement eu lieu. Tout porte à croire que c'est
fait, mais pas du tout. J'ai des exemples extrêmement cuisants...
Je crois comprendre depuis le temps que je manipule Excel et VBA (1998 :
soit un bail) certaines actions doivent fonctionner. Il y a un truc simple :
c'est créer ces deux classeurs pour constater que cela ne fonctionne pas...
même si tout semble correct ! Comme je le disais hier soir : ils sont dispo
pour tous ceux qui veulent ce frotter à ce vrai problème.
Ma procédure complète de fermeture est décrite dans le post d'hier soir : en
tout 4 lignes (dont deux pourraient être condensées en une seule(?)), donc
une seule de "vrai" code ! La vraie et définitive qui manipule données et
feuilles en comprend 45, pour l'instant !
Dans mon cas c'est flagrant Excel NE VEUT PAS FERMER le classeur
correctement si on utilise un menu alors qu'il le fait "bien" (avec toutes
les incertitudes et questions qui s'ajoutent alors) si on utilise la croix.
Bill t'as lu ma question et mes remarques ??? T'en penses quoi ?


Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?










Ptit Louis
Le #6986831
Bonjour,
Je pensais que mon premier message était très clair. Je reprends.
J'ai mis en place dans les deux fichiers, tous les éléments donnés par MPO
(Au secours !) et la correction nécessaire (mineure, mais ce qui explique ma
première réflexion de mai qui disait que cela ne fonctionnait pas).
L'ensemble des deux fichiers fonctionne bien si on se contente de la
fermeture des fichiers par la croix, principe que je n'avais pas encore testé.
Cela ne fonctionne plus quand dans le fichier C on utilise l'un des éléments
du menu de C pour (auto)fermer le fichier C (principe généralement proposé
pour quitter "proprement" une application, plutôt que de s'échapper par
l'issue de secours: la croix) avec la procédure très complexe suivante :
Sub Quitter()
ThisWorkbook.close, True
End sub
C'est donc la seule ligne de code qui différencie les deux principes de
fermeture : soit la croix, soit le menu.
Par le menu Excel ferme le classeur mais il renvoie aussi le message "Erreur
définie par l'application ou par l'objet" dans une boîte de dialogue lorsque
le fichier est fermé.
Frustrant, non !
Comme je le proposais, je peux fournir les deux classeurs avec tous les
modules et subroutines : il n'y a rien à saisir. Il suffit de constater
l'anomalie et chercher à comprendre le pourquoi du hic.
à très bientôt !
Et encore merci du coup de pouce !



Dernier message sur ce fil... comme tu ne semble pas vouloir
décrire avec précision le comportement d'excel ... et les
messages qu'excel te donnent lors de la fermeture... il n'y a
rien d'autre à discuter.




"Ptit Louis"
Bonjour,
Merci de ce dernier conseil, mais j'ai d'excellentes raisons de différencier
la fermeture en deux actions (lignes) dictinctes car, comme je l'ai écrit, il
y a parfois des dysonctionnements qui font que la fermeture a lieu sans que
l'enregistrement ait effectivement eu lieu. Tout porte à croire que c'est
fait, mais pas du tout. J'ai des exemples extrêmement cuisants...
Je crois comprendre depuis le temps que je manipule Excel et VBA (1998 :
soit un bail) certaines actions doivent fonctionner. Il y a un truc simple :
c'est créer ces deux classeurs pour constater que cela ne fonctionne pas...
même si tout semble correct ! Comme je le disais hier soir : ils sont dispo
pour tous ceux qui veulent ce frotter à ce vrai problème.
Ma procédure complète de fermeture est décrite dans le post d'hier soir : en
tout 4 lignes (dont deux pourraient être condensées en une seule(?)), donc
une seule de "vrai" code ! La vraie et définitive qui manipule données et
feuilles en comprend 45, pour l'instant !
Dans mon cas c'est flagrant Excel NE VEUT PAS FERMER le classeur
correctement si on utilise un menu alors qu'il le fait "bien" (avec toutes
les incertitudes et questions qui s'ajoutent alors) si on utilise la croix.
Bill t'as lu ma question et mes remarques ??? T'en penses quoi ?


Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?















MichDenis
Le #6985491
Envoie moi tes 2 classeurs dans ma bal perso sur hotmail...
j'y jetterai un oeil.


"Ptit Louis"
Bonjour,
Je pensais que mon premier message était très clair. Je reprends.
J'ai mis en place dans les deux fichiers, tous les éléments donnés par MPO
(Au secours !) et la correction nécessaire (mineure, mais ce qui explique ma
première réflexion de mai qui disait que cela ne fonctionnait pas).
L'ensemble des deux fichiers fonctionne bien si on se contente de la
fermeture des fichiers par la croix, principe que je n'avais pas encore testé.
Cela ne fonctionne plus quand dans le fichier C on utilise l'un des éléments
du menu de C pour (auto)fermer le fichier C (principe généralement proposé
pour quitter "proprement" une application, plutôt que de s'échapper par
l'issue de secours: la croix) avec la procédure très complexe suivante :
Sub Quitter()
ThisWorkbook.close, True
End sub
C'est donc la seule ligne de code qui différencie les deux principes de
fermeture : soit la croix, soit le menu.
Par le menu Excel ferme le classeur mais il renvoie aussi le message "Erreur
définie par l'application ou par l'objet" dans une boîte de dialogue lorsque
le fichier est fermé.
Frustrant, non !
Comme je le proposais, je peux fournir les deux classeurs avec tous les
modules et subroutines : il n'y a rien à saisir. Il suffit de constater
l'anomalie et chercher à comprendre le pourquoi du hic.
à très bientôt !
Et encore merci du coup de pouce !



Dernier message sur ce fil... comme tu ne semble pas vouloir
décrire avec précision le comportement d'excel ... et les
messages qu'excel te donnent lors de la fermeture... il n'y a
rien d'autre à discuter.




"Ptit Louis"
Bonjour,
Merci de ce dernier conseil, mais j'ai d'excellentes raisons de différencier
la fermeture en deux actions (lignes) dictinctes car, comme je l'ai écrit, il
y a parfois des dysonctionnements qui font que la fermeture a lieu sans que
l'enregistrement ait effectivement eu lieu. Tout porte à croire que c'est
fait, mais pas du tout. J'ai des exemples extrêmement cuisants...
Je crois comprendre depuis le temps que je manipule Excel et VBA (1998 :
soit un bail) certaines actions doivent fonctionner. Il y a un truc simple :
c'est créer ces deux classeurs pour constater que cela ne fonctionne pas...
même si tout semble correct ! Comme je le disais hier soir : ils sont dispo
pour tous ceux qui veulent ce frotter à ce vrai problème.
Ma procédure complète de fermeture est décrite dans le post d'hier soir : en
tout 4 lignes (dont deux pourraient être condensées en une seule(?)), donc
une seule de "vrai" code ! La vraie et définitive qui manipule données et
feuilles en comprend 45, pour l'instant !
Dans mon cas c'est flagrant Excel NE VEUT PAS FERMER le classeur
correctement si on utilise un menu alors qu'il le fait "bien" (avec toutes
les incertitudes et questions qui s'ajoutent alors) si on utilise la croix.
Bill t'as lu ma question et mes remarques ??? T'en penses quoi ?


Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?















MichDenis
Le #6992331
Problème résolu, le fichier est dans ta bal.


"Ptit Louis"
Bonjour,
Je pensais que mon premier message était très clair. Je reprends.
J'ai mis en place dans les deux fichiers, tous les éléments donnés par MPO
(Au secours !) et la correction nécessaire (mineure, mais ce qui explique ma
première réflexion de mai qui disait que cela ne fonctionnait pas).
L'ensemble des deux fichiers fonctionne bien si on se contente de la
fermeture des fichiers par la croix, principe que je n'avais pas encore testé.
Cela ne fonctionne plus quand dans le fichier C on utilise l'un des éléments
du menu de C pour (auto)fermer le fichier C (principe généralement proposé
pour quitter "proprement" une application, plutôt que de s'échapper par
l'issue de secours: la croix) avec la procédure très complexe suivante :
Sub Quitter()
ThisWorkbook.close, True
End sub
C'est donc la seule ligne de code qui différencie les deux principes de
fermeture : soit la croix, soit le menu.
Par le menu Excel ferme le classeur mais il renvoie aussi le message "Erreur
définie par l'application ou par l'objet" dans une boîte de dialogue lorsque
le fichier est fermé.
Frustrant, non !
Comme je le proposais, je peux fournir les deux classeurs avec tous les
modules et subroutines : il n'y a rien à saisir. Il suffit de constater
l'anomalie et chercher à comprendre le pourquoi du hic.
à très bientôt !
Et encore merci du coup de pouce !



Dernier message sur ce fil... comme tu ne semble pas vouloir
décrire avec précision le comportement d'excel ... et les
messages qu'excel te donnent lors de la fermeture... il n'y a
rien d'autre à discuter.




"Ptit Louis"
Bonjour,
Merci de ce dernier conseil, mais j'ai d'excellentes raisons de différencier
la fermeture en deux actions (lignes) dictinctes car, comme je l'ai écrit, il
y a parfois des dysonctionnements qui font que la fermeture a lieu sans que
l'enregistrement ait effectivement eu lieu. Tout porte à croire que c'est
fait, mais pas du tout. J'ai des exemples extrêmement cuisants...
Je crois comprendre depuis le temps que je manipule Excel et VBA (1998 :
soit un bail) certaines actions doivent fonctionner. Il y a un truc simple :
c'est créer ces deux classeurs pour constater que cela ne fonctionne pas...
même si tout semble correct ! Comme je le disais hier soir : ils sont dispo
pour tous ceux qui veulent ce frotter à ce vrai problème.
Ma procédure complète de fermeture est décrite dans le post d'hier soir : en
tout 4 lignes (dont deux pourraient être condensées en une seule(?)), donc
une seule de "vrai" code ! La vraie et définitive qui manipule données et
feuilles en comprend 45, pour l'instant !
Dans mon cas c'est flagrant Excel NE VEUT PAS FERMER le classeur
correctement si on utilise un menu alors qu'il le fait "bien" (avec toutes
les incertitudes et questions qui s'ajoutent alors) si on utilise la croix.
Bill t'as lu ma question et mes remarques ??? T'en penses quoi ?


Tu peux remplacer ceci
'----------------------------
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub
'----------------------------

Par
'True -> sauvegarde avant de fermer
'----------------------------
Sub fermer()
ThisWorkbook.close True
End Sub
'----------------------------

En supposant que cette macro est située dans ton classeur où
est le bouton de commande qui l'actionne, il n'y a aucune raison
d'éprouver des difficultés.
Si ta macro est située dans le classeur Perso.xls, Tu devras changer
la commande : ThisWorkbook.close True par
soit : ActiveWorkbook.Close True -> ferme le classeur actif
soit : Workbooks("NomDuClasseur.xls").Close True

Toutes ces commandes ne ferment que le classeur mais pas Excel.

Sinon, as-tu une procédure dans ton ThisWorkbook comme ceci :
Peut être, il y a-t-il du code inapproprié.
'-----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
'-----------------------

Sinon, il te faudra être beaucoup plus précis sur les difficulés que tu rencontres
à la fermeture et les messages qu'excel te renvoient.





"Ptit Louis"
Bonjour,
Non! il n'y pas d'erreur dans ce qui a été proposé (bien que je n'ai pas
tout compris dans la manoeuvre).
En fait tout se passe bien si on utilise bêtement la croix de fermeture.
Sauf que si l'on utilise une procédure pour fermer le classeur du style
ci-après (très compliquée) au lieu d'utiliser la croix de fermeture (ce qui
est nettement moins "propre" et pose des tas de questions sur ce que l'on
veut faire...) :
Sub fermer()
ThisWorkbook.save
ThisWorkbook.close
End Sub

Excel n'apprécie pas !
Dommage ! on ne lui demande pas le Pérou !

Nota : J'ai remarqué que si l'on regroupe ces deux lignes en une seule
(Thisworkbook.close, true) cela génère parfois quelques cafouillages !
Si vous êtes intéressés, je peux vous envoyer les deux classeurs avec les
modules et procédures... il n'y a plus rien à saisir !


C'est sûrement que PMO a du faire un tas d'erreur dans sa programmation...,!
;-)))

Publie ici les procédures du ThisWorkbook suivante :

'-------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

Private Sub Workbook_Deactivate()

End Sub
'-------------------

Tu peux aussi inscrire la ligne de commande suivante :
Stop
En début de chacune de ces procédures ....
En voulant fermer ton classeur,
cela te donnera l'occasion de suivre pas à pas à l'aide de la touche F8
le déroulement de tes procédures événementielles et probablement identifier
toi-même les lignes de code problématique.






"Ptit Louis"
Bonjour,
Petit retour sur mes questions du 22/05 (même titre d'objet) à destination
(plus précisément) du bienfaiteur PMO (et son assistant, dans ce fil,
MichDenis).
J'ai un peu laissé tomber mon projet pour en suivre d'autres plus
importants, mais je suis de retour.
Le conseil a été suivi, les macros (écrites correctement) mises en place
cela fonctionne dans des classeurs vierges. Cela fonctionne aussi dans des
classeurs plus complets et complexes.
Cela ne fonctionne pas du tout lorsque l'on utilise un menu (un élément de
celui mis en place) pour fermer le classeur C. Il y a des erreurs (Erreur
définie par l'application ou par l'objet) qui se produisent, voire des
plantages d'excel si le fichier est lourdement manipulé (tris, filtres,
activation de feuilles pour préparer la prochaine ouverture (donc beaucoup
d'événements...))...
Quel est votre sentiment devant cette rebellion ?















Publicité
Poster une réponse
Anonyme