Beforeclose refuse d’exécuter une macro fonctionnelle

Bonjour à tous,

J’ai une macro qui fonctionne parfaitement, qui me permet depuis mon fichier 1, de copier une plage de donnée de mon onglet « attribution », ouvrir mon fichier2 , y copier la plage dans SON onglet « attribution », enregistrer le fichier 2 puis le fermer.

Je souhaiterais que lors de la fermeture du fichier1 une msgbox s’affiche pour me demander si je veux exporter mes données vers fichier 2 et que oui=exportation auto puis fermeture fichier 1 ; non= fermeture fichier1

J’ai beau recopier texto la macro ça ne fonctionne pas, et j’ai également essayé que la macro se fasse automatiquement sans la msgbox à la fermeture c’est pareil. Avez vous des avis svp?

Ma macro:

Sub majbondecommande()

Sheets("ATTRIBUTION").Select

Range("A2:DZ147").Select

Selection.Copy

Workbooks.Open Filename:= _

"Chemin d’accès\fichier2.xlsm" _

, UpdateLinks:=3

Sheets("ATTRIBUTION").Select

Range("A2").Select

ActiveSheet.Paste

Application.CutCopyMode = False

ActiveWorkbook.Save

ActiveWindow.Close

ActiveWorkbook.Save

End Sub

Mon code pour la msgbox a la fermeture(qui est dans thisworkbook)

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If MsgBox("Mettre a jour les donees?", vbYesNo, "Demande de confirmation") = vbYes Then

Sheets("ATTRIBUTION").Select

Range("A2:DZ147").Select

Selection.Copy

Workbooks.Open Filename:= _

"Chemin d’accès\fichier2.xlsm" _

, UpdateLinks:=3

Sheets("ATTRIBUTION").Select

Range("A2").Select

ActiveSheet.Paste

Application.CutCopyMode = False

ActiveWorkbook.Save

ActiveWindow.Close

ActiveWorkbook.Save

End Sub

Voilà gros mystère, je sais pas pourquoi le fait de le passer en before close l’empêche de fonctionner.

On m’indique comme erreur:

Erreur d’exécution 1004: la méthode select de la classe worksheet à échoué ...

Bonjour,

On ne peut pas tester sans fichier ... mais tu dois pouvoir au préalable annuler la fonction en attribuant la valeur True à la variable "Cancel" pour faire la manip souhaitée avant fermeture. Mais aussi au préalable tester s'il y a lieu ou non d'exporter les valeurs de façon à ne pas bloquer la fermeture une seconde fois et tourner en rond sans fin.

Merci de la réponse,

Le problème c’est qu’il faudrait que je créé deux fichiers fictifs, qui de toute façon ne fonctionneraient pas vu que les chemins d’accès ne seraient pas les bons.

Effectivement j’ai oublié le cancel false, mais même sans le msgbox ça ne fonctionne pas(code ci dessous). Est ce que par hasard il y aurait un oubli de ma part lié au fait que c’est beforeclose?

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Sheets("ATTRIBUTION").Select

Range("A2:DZ147").Select

Selection.Copy

Workbooks.Open Filename:= _

"Chemin d’accès\fichier2.xlsm" _

, UpdateLinks:=3

Sheets("ATTRIBUTION").Select

Range("A2").Select

ActiveSheet.Paste

Application.CutCopyMode = False

ActiveWorkbook.Save

ActiveWindow.Close

ActiveWorkbook.Save

End Sub

Workbooks.Open Filename:= _
"Chemin d’accès\fichier2.xlsm"

Chemin d’accès est un répertoire de ton micro ? si c'est une variable il faut le sortir des guillemets !

Le problème c’est qu’il faudrait que je créé deux fichiers fictifs

Ben oui justement ... si j'ai le temps ce soir je le ferai ...

En fait j’ai trouvé la source du problème, lorsque mon code ouvre mon fichier, ce dernier s’ouvre que partiellement et le reste du code n’arrive donc pas à trouver l’onglet attribution... je vous joint la photo. Si quelqu’un sait pourquoi ça l’ouvre pas en tant que fichier intégral...(il manque tout le bandeau supérieur, qui n’apparaît qu’une fois que je ferme mon fichier 1)

054cda93 896b 4087 8c41 c7a2d277a8a8

Essaie de mettre

DoEvents

dans ton code.

Ou alors d'inclure une temporisation

application.wait now + timevalue("00:00:01")

J’y ai trop cru! L’idée du timer m’a paru être très bonne quand je l’ai lu. Mais en fait non

Du coup case départ j’ai toujours un fichier bizarre qui s’ouvre, et mon code qui ne trouve pas l’onglet...

Tu connais le code de base pour ouvrir un autre fichier Excel qui se trouve dans un autre dossier de l’ordinateur? Pas en macro. Du sub à end sub. Je vais tester juste de le faire ouvrir, voir si il s’ouvre entièrement. Sinon c’est ma config excel qui bloque. Je vais tester sur un autre pc.

Merci pour ton aide en tout cas

Essaie ce fichier de compilation

Place où tu veux les fichiers source et modifie en conséquence la ligne suivante de la macro

    chemin = ThisWorkbook.Path & "\compil\"
11compil.xlsm (20.49 Ko)
8compil.zip (18.37 Ko)

Je termine ma semaine le vendredi midi et chez moi je n’ai plus qu’un mac... je teste ça lundi matin. Merci beaucoup de m’aider

Effectivement ça marche. J’ai trouvé pourquoi ça ne fonctionne pas, c’est le open close qui ne veut pas ouvrir un fichier vu qu’il ferme le fichier. Il me faudrait faire sûrement beaucoup de rechercheS pour trouver comment faire.

Du coup je ne me suis pas embêté j’ai fait un collage avec liaison et ça fera l’affaire, ça me limitera juste dans la modification De ces données.

Merci encore pour ton aide et bonne continuation

Rechercher des sujets similaires à "beforeclose refuse executer macro fonctionnelle"