Bonjour,
J'ai réalisé un classeur Excel utilisé par les employés de la société où je travail.
Je mets souvent ce fichier à jour qui comporte un grand nombre de macros et qui réalise des liaisons ODBC vers des bases SQL...
Je souhaiterais trouver une solution pour proposer aux utilisateurs de mettre à jour automatiquement le fichier lorsque j'ai réalisé un Update.
Pour cela je place une variable avec la version de mon programme dans la base de donnée SQL, cette variable est comparée à la version actuelle, si l'indice de la version trouvée dans la base SQL est plus récente je souhaite mettre à jour le fichier.
La comparaison de la version s'effectue correctement, j'ai un message qui propose de mettre à jours le fichier, jusque là, tout va bien...
J'ai donc un fichier A (ouvert par l'utilisateur) ce fichier je souhaite le remplacer par un fichier B se trouvant toujours au même endroit sur notre serveur avec toujours le même nom.
Je pensais pouvoir avec le fichier A, ouvrir le fichier B, capturer le nom et l'emplacement du fichier A (qui lui peut être différent) puis fermer le fichier A et enregistrer le fichier B à la place du fichier A (A son emplacement avec le même nom).
Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 .... If version_presente < version_new Then Msg = "Une nouvelle version " & version_new & " du FGP est disponible" & Chr(13) & Chr(10) & "Souhaitez-vous l'installer maintenant ?" Response = MsgBox(Msg, 36, "Update...") If Response = vbNo Then GoTo NeRienFaire: 'INSTALLER LA NOUVELLE VERSION Chemin = "C:\Users\Stéphane\Desktop\Test_FGP\" NomFichier = "FGP.xlsm" CheminFichierActuel = ThisWorkbook.Path NomFichierActuel = ThisWorkbook.Name 'MsgBox CheminFichierActuel & "\" & NomFichierActuel 'Ouvre la nouvelle version Workbooks.Open FileName:=Chemin & NomFichier 'Range("Bible!B50") = CheminFichierActuel & "\" & NomFichierActuel Workbooks(NomFichier).Worksheets("Bible").Range("B50") = CheminFichierActuel & "\" & NomFichierActuel Workbooks(NomFichier).Worksheets("Bible").Range("B51") = NomFichierActuel Application.Run ("'" & NomFichier & "'!UpdateFGP") 'LE SYSTEM EXECUTE LA MACRO DANS L'AUTRE CLASSEUR 'CE NOUVEAU CLASSEUR VA FERMER CELUI-CI PUIS L'ECRASER AVEC SA VERSION End If
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub UpdateFGP() ' ' UPDATE FGP Dim FichierAFermer FichierAFermer = Range("Bible!B51") CheminEtNomFichierAEcraser = Range("Bible!B50") Workbooks("FGP.xlsm").Activate 'Pour fermer le fichier .xls Workbooks(FichierAFermer).Close savechanges:=False 'ICI LE CODE NE CONTINUE PAS !!!! MsgBox "Le fichier à écraser est " & CheminEtNomFichierAEcraser 'ActiveWorkbook.SaveAs FileName:=CheminFichierActuel & NomFichier & ".xlsm" End Sub
Mon soucis ici est que le fichier A ouvre bien le fichier B, le nom et le chemin du fichier A est bien transférer vers le fichier B, le fichier B ferme bien le fichier A mais là le problème est que ma macro s'arrête et ne continue pas alors qu'elle est exécutée sur le fichier B qui est lui toujours ouvert... !!!
Avez-vous une idée pour résoudre mon problème, j'ai fais beaucoup de recherche et ne trouve pas de solution ?
D'avance merci,
Stéphane
Partager