Fermeture classeur & fenêtre d'enregistrement

Salut tout le monde,

J'avoue à la communauté que je la sollicite régulièrement mais je dirais qu'elle est là pour ça et qu'il faut bien apprendre .

Voilà mon "problème", qui m'occupe depuis déjà trop longtemps :

- À partir d'un classeur A je transmet des valeurs dans un classeur B.

- Si ce classeur B est déjà ouvert, la macro ne le réouvre pas. Mais s'il ne l'est pas alors il s'ouvre.

- Ensuite, les valeurs du classeur A se copie dans le classeur B. Jusque là aucun soucis.

- Enfin si le classeur B était ouvert, il le reste. S'il était fermé alors il se ferme.

C'est à cette dernière étape que je rencontre un obstacle. En effet, quand le classeur se ferme car il était, la fenêtre me demandant si je veux enregistrer les modifications s'affiche. Or j'aimerai qu'elle n'apparaisse pas pour la fluidité de l'application.

Il est vrai que ma problématique paraît simple. Mais comme pour mes autres sujets j'ai effectué de longues heures de recherches et de nombreuses tentatives en vain.

Avec :

- application.DisplayAlerts = False (Aucun changement) ;

- Workbook().Close Savechanges:=False (Le classeur se met à charger et ensuite il ne répond plus).

Je précise que ma macro se lance quand l'utilisateur sauvegarde le fichier (classeur A).

Voici l'extrait de mon code :

Application.ScreenUpdating = False

On Error Resume Next

Workbooks(Fiche).Activate

If Err <> 0 Then

Workbooks.Open (Chemin)

Workbooks(Fiche).Sheets(doss).Range("F1") = Now()

Workbooks(Fiche).Sheets(doss).Range("T39") = FS

Workbooks(Fiche).Sheets(doss).Range("U39") = IJRP

Workbooks(Fiche).Sheets(doss).Range("V39") = TTE

Workbooks(Fiche).Sheets(doss).Range("W39") = TTR

Workbooks(Fiche).Sheets(doss).Range("X39") = TM

Workbooks(Fiche).Sheets(doss).Range("Y39") = SP

Workbooks(Fiche).Sheets(doss).Range("AA39") = MS

Workbooks(Fiche).Sheets(doss).Range("AB39") = STAG

Workbooks(Fiche).Sheets(doss).Range("AC39") = TPEM

Workbooks(Fiche).Sheets(doss).Range("AE39") = CAID

Workbooks(Fiche).Sheets(doss).Range("AF39") = PAN

Workbooks(Fiche).Sheets(doss).Range("AG39") = IT

Workbooks(Fiche).Sheets(doss).Range("T40") = MP

Workbooks(Fiche).Sheets(doss).Range("U40") = DSFP

Workbooks(Fiche).Sheets(doss).Range("V40") = AN

Workbooks(Fiche).Sheets(doss).Range("W40") = TH

Workbooks(Fiche).Sheets(doss).Range("X40") = TA

Workbooks(Fiche).Sheets(doss).Range("Y40") = TSAL

Workbooks(Fiche).Sheets(doss).Range("Z40") = FILL

Workbooks(Fiche).Sheets(doss).Range("AA40") = PRIM

Workbooks(Fiche).Sheets(doss).Range("AB40") = AT

Workbooks(Fiche).Sheets(doss).Range("AC40") = AUTR

Workbooks(Fiche).Sheets(doss).Range("AG40") = URSS

Workbooks(Fiche).Sheets(doss).Range("AD40") = HSUP

Workbooks(Fiche).Sheets(doss).Range("AE40") = CICE

Workbooks(Fiche).Sheets(doss).Range("AF40") = CITS

Workbooks(Fiche).Sheets(doss).Range("AH39") = DIV

Workbooks(Fiche).Sheets(doss).Range("AA26") = PASS

Workbooks(Fiche).Sheets(doss).Range("AA28") = ECO

Workbooks(Fiche).Sheets(doss).Range("A21") = avancement * 1

Workbooks(Fiche).Save

C'EST ICI QUE J'AIMERAI FERMER MON CLASSEUR.

Else

Workbooks(Fiche).Sheets(doss).Range("F1") = Now()

Workbooks(Fiche).Sheets(doss).Range("T39") = FS

Workbooks(Fiche).Sheets(doss).Range("U39") = IJRP

Workbooks(Fiche).Sheets(doss).Range("V39") = TTE

Workbooks(Fiche).Sheets(doss).Range("W39") = TTR

Workbooks(Fiche).Sheets(doss).Range("X39") = TM

Workbooks(Fiche).Sheets(doss).Range("Y39") = SP

Workbooks(Fiche).Sheets(doss).Range("AA39") = MS

Workbooks(Fiche).Sheets(doss).Range("AB39") = STAG

Workbooks(Fiche).Sheets(doss).Range("AC39") = TPEM

Workbooks(Fiche).Sheets(doss).Range("AE39") = CAID

Workbooks(Fiche).Sheets(doss).Range("AF39") = PAN

Workbooks(Fiche).Sheets(doss).Range("AG39") = IT

Workbooks(Fiche).Sheets(doss).Range("T40") = MP

Workbooks(Fiche).Sheets(doss).Range("U40") = DSFP

Workbooks(Fiche).Sheets(doss).Range("V40") = AN

Workbooks(Fiche).Sheets(doss).Range("W40") = TH

Workbooks(Fiche).Sheets(doss).Range("X40") = TA

Workbooks(Fiche).Sheets(doss).Range("Y40") = TSAL

Workbooks(Fiche).Sheets(doss).Range("Z40") = FILL

Workbooks(Fiche).Sheets(doss).Range("AA40") = PRIM

Workbooks(Fiche).Sheets(doss).Range("AB40") = AT

Workbooks(Fiche).Sheets(doss).Range("AC40") = AUTR

Workbooks(Fiche).Sheets(doss).Range("AG40") = URSS

Workbooks(Fiche).Sheets(doss).Range("AD40") = HSUP

Workbooks(Fiche).Sheets(doss).Range("AE40") = CICE

Workbooks(Fiche).Sheets(doss).Range("AF40") = CITS

Workbooks(Fiche).Sheets(doss).Range("AH39") = DIV

Workbooks(Fiche).Sheets(doss).Range("AA26") = PASS

Workbooks(Fiche).Sheets(doss).Range("AA28") = ECO

Workbooks(Fiche).Sheets(doss).Range("A21") = avancement * 1

Workbooks(Fiche).Save

Workbooks("Fiche " & doss & ".xlsm").Activate

End If

Application.ScreenUpdating = True

End Sub

Je n'utilise que des variables type String.

Je remercie par avance ceux qui se pencheront sur le problème. Je suis avare de toutes les solutions.

Bonjour,

Essaies avec :

Workbooks(Fiche).Close Savechanges:=True

Au lieu de

Workbooks(Fiche).Save

Oui, c'est une solution que j'ai déjà essayer. Mais la fenêtre s'affiche quand même.

J'ai tenté de changer l'inscription de place dans la macro mais rien n'y fait parfois sa fait buger le fichier (ne répond pas).

J'espère trouver une solution sinon ce n'est pas quelque chose qui va empêcher mon application de fonctionner.

Merci quand même pour ta réponse.

Re,

Le problème vient peut-être d'ailleurs ....

Le gestionnaire d'erreur n'est pas rétabli : il manque On Error Goto 0

J'aurais écrit comme ça :

Sub xx()
Dim wbk As Workbook
Dim fermer As Boolean

Application.ScreenUpdating = False
On Error Resume Next
Set wbk = Workbooks(Fiche).Activate
On Error GoTo 0
If wbk Is Nothing Then
Set wbk = Workbooks.Open(Chemin)
fermer = True
End If
With wbk.Sheets(doss)
.Range("F1") = Now()
.Range("T39") = FS
.Range("U39") = IJRP
.Range("V39") = TTE
.Range("W39") = TTR
.Range("X39") = TM
.Range("Y39") = SP
.Range("AA39") = MS
.Range("AB39") = STAG
.Range("AC39") = TPEM
.Range("AE39") = CAID
.Range("AF39") = PAN
.Range("AG39") = IT
.Range("T40") = MP
.Range("U40") = DSFP
.Range("V40") = AN
.Range("W40") = TH
.Range("X40") = TA
.Range("Y40") = TSAL
.Range("Z40") = Fill
.Range("AA40") = PRIM
.Range("AB40") = AT
.Range("AC40") = AUTR
.Range("AG40") = URSS
.Range("AD40") = HSUP
.Range("AE40") = CICE
.Range("AF40") = CITS
.Range("AH39") = DIV
.Range("AA26") = PASS
.Range("AA28") = ECO
.Range("A21") = avancement * 1
End With
If fermer Then
wbk.Close True
Else
wbk.Save
Application.ScreenUpdating = True

End Sub

Oui, le problème vient sûrement d'ailleurs.

La macro que tu as produite fonctionne tout aussi bien que la mienne. Mais la fenêtre apparaît quand même et parfois le classeur ne répond plus.

Peut-être en inscrivant un code dans l'autre classeur cela pourrait fonctionner ?

En tout cas je te remercie pour ton aide rapide et efficace. On reconnaît bien le talent bordelais.

Re,

Si tu utilises un version Excel postérieure à 2007, le ScreenUpdating=False peut être la source du problème, essaye sans pour savoir.

Re,

J'utilise la version 2010, j'ai bien essayer quand même mais rien n'y change.

J'ai rentré les codes précédant dans le classeur qui se ferme, dans thisworkbook before close. Quand je le ferme manuellement, excel ne me demande pas si je veux enregistrer mais quand la macro s'en occupe alors là, excel me le demande.

C'est quand même un peu tiré par les cheveux ^^.

Bon je pense en rester là, ce n'est pas si important. Mais si jamais tu as une fulgurance, en tout cas merci pour ton aide.

Ah, mais le message concerne le classeur qui contient la macro, pas celui dans lequel les infos sont copiées !

Avant le End sub, ajoutes : ThisWorkbook.Saved = True

Nan nan, le message concerne bien le classeur dans lequel les donnée sont copiées. Sa m'affiche bien le nom de celui-ci et pas un autre. J'ai quand même essayer mais rien n'y fait il y a toujours cette foutu fenêtre.

Au lieu de résoudre le problème, y'a t'il pas un moyen de le contourner ?

Par exemple, est-il possible que ma macro exécute une macro présente dans le classeur récepteur des données ? Je suppose que oui ?.

On va bien finir par y arriver. Cela dit, pour du langage informatique il y'a quand même des choses qu'excel n'arrive pas à comprendre

Mets ton fichier en Pj (sans info confidentielles)

J'ai du supprimer beaucoup de choses à l'intérieur des fichiers. Mais rien qui ne peux compromettre ta réflexion !

Voilà, il y'a plusieurs macro un peu partout. Celle dont ont parler et dans le code de la feuille "SYNTHESE" de la FICHE.

Mes macro sont très mal ordonnée, je débute.

En espérant que tu puisse trouver une solution !

4test.xlsm (60.82 Ko)
4fiche.xlsm (26.95 Ko)

Re,

Je n'ai pas le temps de regarder en détail maintenant mais ta macro dans le code de la feuille synthèse ne peux pas fonctionner, c'est celle située dans le code de ThisWorkbook qui reçoit l'évènement.

Efface celle de la feuille synthèse et essaies les modifications que je t'avais proposé dans celle du module Thisworkbook. A priori c'est pour ça que tes modifications n'avait pas d'effet

Ok Monsieur ! J'ai pas la possibilité d'essayer avant demain. Je te tiens au courant. Merci.

C'est bon, sa fonctionne parfaitement ! Merci pour ton aide, c'est trop cool

Rechercher des sujets similaires à "fermeture classeur fenetre enregistrement"