Ré-ouverture du fichier directement après sa fermeture

richert90

XLDnaute Occasionnel
Bonjour,

Voila mon problème

J'ai un fichier Excel avec macros assez complet (beaucoup de modules, useforms etc...). Ce fichier est utilisé par des utilisateurs et pour cela quand il quitte le fichier je lui propose de sauvegarder une copie du travail qu'il a fait. (la copie du fichier se fait au format xlsx (sans macros) qui sert juste à re-visualiser le travail fait donc pas besoin de macros).
Le problème c'est qu'une fois la copie faite, le fichier initial se ferme mais il arrive parfois qu'il se réouvre tout seul...
J'ai remarqué que ça se fait que dans le cas où il y a des copies réalisées.. Dans le cas où l'utilisateur choisit de ne pas garder de copie pas de soucis: le fichier se ferme normalement et c'est tout.

Est-ce que quelqu'un sait d'où ça peut venir car je vois pas du tout... (ça le fait pas tout le temps en + donc je trouve ça bizar).

Merci d'avance
 

Herdet

Nous a quitté
Repose en paix
Re : Ré-ouverture du fichier directement après sa fermeture

Bonjour,

Ce fichier est utilisé par des utilisateurs et pour cela quand il quitte le fichier je lui propose de sauvegarder une copie du travail qu'il a fait. (la copie du fichier se fait au format xlsx (sans macros) qui sert juste à re-visualiser le travail fait donc pas besoin de macros).
Le problème c'est qu'une fois la copie faite, le fichier initial se ferme mais il arrive parfois qu'il se réouvre tout seul...
J'ai remarqué que ça se fait que dans le cas où il y a des copies réalisées.. Dans le cas où l'utilisateur choisit de ne pas garder de copie pas de soucis: le fichier se ferme normalement et c'est tout.
Bonsoir,
Comment fais-tu la copie, par un 'Enregistrer sous...' ou un export des formats et valeurs dans un nouveau fichier ?
Si Enregistrer sous.., les macros restent dans la copie .xlsx et poseront un problème tout a fait normal à l'ouverture.

Si un lien avec la source est resté dans la copie, il est normal que l'original s'ouvre

A+
Robert
 

richert90

XLDnaute Occasionnel
Re : Ré-ouverture du fichier directement après sa fermeture

Bonjour Modeste geedee et Herdet. Merci pour vos réponses.

Alors pour répondre a Herdet voici comment je sauvegarde une copie au format xlsx:

Code:
    Sauvegarde = MsgBox("Do you want to save a copy of analysis?", vbyesno) 'Copie de l'analyse
    If Sauvegarde = vbYes Then
        Call Save1 'macro de sauvegarde du fichier
    End If

Procédure Save1:
Code:
Public Sub Save1() 'copie sauvegarde classeur

  Dim nom1 As String
   Dim nb As Integer
    
    chemin_fichier_Excel = Workbooks(ActiveWorkbook.name).FullName
    chemin_fichier_Excel = Workbooks(ActiveWorkbook.name).Path
    nb = nbfich(chemin_fichier_Excel, "xlsx")
    nb = nb + 1
    
    Application.DisplayAlerts = False 
    
    nom1 = "Analysis (" & nb & ") of " & Day(Date) & "-" & Month(Date) & "-" & Year(Date)
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & nom1, FileFormat:=xlOpenXMLWorkbook
    rep = MsgBox("Your database is saved in the same record as the original file, under the name : " & nom1, vbYes + vbInformation, "Copy of analysis")
    
     Application.DisplayAlerts = True

End Sub
avec nbfich une fonction qui permet de compter le nombre de fichier dans un répertoire.

Donc ça correspondant à un "enregistrer sous"


Mais des fois le fichier de départ (avec les macros) se ré-ouvre alors que je l'ai juste fermé (apres enregistrement d'une copie) sans que je n'ouvre ce fichier de sauvegarde au format xlsx.


Concernant la réponse de Modeste geedee , qu'est-ce qu'une procédure On Time et comment la désactivée dans ce cas ?


Merci d'avance
 
Dernière édition:

Herdet

Nous a quitté
Repose en paix
Re : Ré-ouverture du fichier directement après sa fermeture

Bonjour Modeste geedee et Herdet. Merci pour vos réponses.

Code:
    Application.DisplayAlerts = False 
    nom1 = "Analysis (" & nb & ") of " & Day(Date) & "-" & Month(Date) & "-" & Year(Date)
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & nom1, FileFormat:=xlOpenXMLWorkbook
    rep = MsgBox("Your database is saved in the same record as the original file, under the name : " & nom1, vbYes + vbInformation, "Copy of analysis")
     Application.DisplayAlerts = True
End Sub
Bonsoir,
Je reste persuadé que la transformation directe par VBA de .xlsm à .xlsx n'est pas viable.

1) A quoi sert l'enregistrement en XML FileFormat:=xlOpenXMLWorkbook ?
2) tu devrais forcer le format .xlsx dans nom1
nom1 = "Analysis (" & nb & ") of " & Day(Date) & "-" & Month(Date) & "-" & Year(Date) & ".xlsx"
3) lorsque ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & nom1 est exécuté, le fichier actif devient un fichier Excel sans macro et donc il ne devrait plus avoir d'action VBA après cette ligne.
Le message rep = MsgBox(... devrait être modifié et affiché avant le SaveAs

Il y a une autre solution assez simple en s'inspirant de celle que j'ai proposé dans
https://www.excel-downloads.com/thr...ier-excel-dans-un-autre-fichier-excel.214486/
qui serait :
1) - enregistrer le fichier avec un Backup
ThisWorkbook.SaveAs Filename:=ThisWorkbook.FullName, CreateBackup:=True
2) - ouvrir le Backup
3) - supprimer par VBA toutes les macros de ce fichier Backup

Code:
Sub Test_destruction()
   'détruire tout le code d'un classeur
   ThisWorkbook.Activate
   Call Detruire_tout_VBA("RD-TEST enreg_a_vider.xlsm")
End Sub

Sub Detruire_tout_VBA(ByVal ClasseurSansMacro As String)
   Dim VbComp, LesComposants
   'détruire tout le code du classeur nommé
   Set LesComposants = Workbooks(ClasseurSansMacro).VBProject.VBComponents
   For Each VbComp In LesComposants
      Select Case VbComp.Type
         Case 1, 2, 3
         LesComposants.Remove VbComp
         Case 100
         VbComp.CodeModule.DeleteLines 1, VbComp.CodeModule.CountOfLines
      End Select
   Next

End Sub

4) - enregistrer le backup nettoyé avec nom1 ci-dessus et le fermer
au passage il restera le fichier Backup très utile en cas de plantage
5) - envoyer le message Msgbox

Je vais essayer d'approfondir cette solution

Cordialement
Robert
 

Herdet

Nous a quitté
Repose en paix
Re : Ré-ouverture du fichier directement après sa fermeture

Bonsoir,
Voilà, richert90, c'est fait.
La procédure utilise le fichier backup pour créer le fichier UTILISATEUR sans macro.
Tu complèteras la destruction des objets liés au code VBA et tu verras s'il faut garder le fichier backup

Bon travail
Robert
 

Pièces jointes

  • RD-Sauv Version Utilisateur.xlsm
    26.5 KB · Affichages: 34

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 933
Membres
103 678
dernier inscrit
bibitm