Arrêt de macro avec Workbook_Open
Bonjour à tous,
Je suis débutant sur ce forum, tout comme dans le VBA c'est pourquoi je viens vers vous pour essayer de comprendre mon problème.
J'ai un fichier Salaire.xlsm qui est un simulateur de salaire. Mon objectif est de détecter si une mise à jour du fichier est disponible et de l'effectuer.
J'ai une macro qui compare la version de mon fichier avec la numéro de version enregistré sur mon serveur web. Si le numéro est différent alors il télécharge le fichier Maj.xlsm du serveur Web puis l'ouvre.
Dans ce fichier Maj, j'ai plusieurs macros.
La première copie les valeurs de certaines cellules du fichier Salaire vers le fichier Maj puis ferme le fichier Salaire.
La seconde macro télécharge le nouveau fichier Salaire.xlsm du serveur Web
La troisième ouvre le fichier téléchargé
La dernière (pas encore faite) va récupérer les valeurs des cellules copié dans le fichier Maj pour les rétablir dans le nouveau fichier Salaire
Voici le code:
Sub CopierValeurs()
Dim SourceWorkbook As Workbook
Dim DestinationWorkbook As Workbook
Dim SourceWorksheet As Worksheet
Dim DestinationWorksheet As Worksheet
Dim SourcePara As Worksheet
Dim DestinationPara As Worksheet
Dim sourceFilePath As String
sourceFilePath = ThisWorkbook.Path & "\Salaire.xlsm"
Set SourceWorkbook = Workbooks.Open(sourceFilePath)
Set DestinationWorkbook = ThisWorkbook
Set SourceWorksheet = SourceWorkbook.Sheets("Simulateur Salaire")
Set DestinationWorksheet = DestinationWorkbook.Sheets("Simulateur Salaire")
Set SourcePara = SourceWorkbook.Sheets("Paramètres")
Set DestinationPara = DestinationWorkbook.Sheets("Paramètres")
DestinationWorksheet.Range("B8:B9").Value = SourceWorksheet.Range("B8:B9").Value
DestinationWorksheet.Range("H8:H9").Value = SourceWorksheet.Range("H8:H9").Value
DestinationWorksheet.Range("E15").Value = SourceWorksheet.Range("E15").Value
DestinationWorksheet.Range("C25:C28").Value = SourceWorksheet.Range("C25:C28").Value
DestinationWorksheet.Range("H25:H28").Value = SourceWorksheet.Range("H25:H28").Value
DestinationWorksheet.Range("B36:B40").Value = SourceWorksheet.Range("B36:B40").Value
DestinationWorksheet.Range("B43:B44").Value = SourceWorksheet.Range("B43:B44").Value
DestinationWorksheet.Range("G36:G37").Value = SourceWorksheet.Range("G36:G37").Value
DestinationWorksheet.Range("C50:C51").Value = SourceWorksheet.Range("C50:C51").Value
DestinationPara.Range("B2").Value = SourcePara.Range("B2").Value
SourceWorkbook.Close SaveChanges:=False
' Nettoyer les objets
Set SourceWorksheet = Nothing
Set DestinationWorksheet = Nothing
Set SourceWorkbook = Nothing
Set DestinationWorkbook = Nothing
Set SourcePara = Nothing
Set DestinationPara = Nothing
Telecharger
End Sub
Sub Telecharger()
Dim URL As String
Dim Destination As String
Dim objHTTP As Object
URL = "https://mon_serveur_web/Salaire.xlsm"
Destination = ThisWorkbook.Path & "\Salaire.xlsm"
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "GET", URL, False
objHTTP.send
If objHTTP.Status = 200 Then
Dim oStream As Object
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write objHTTP.responseBody
oStream.SaveToFile Destination, 2
oStream.Close
Set oStream = Nothing
End If
Set objHTTP = Nothing
Ouvrir
End Sub
Sub Ouvrir()
Dim Destination As String
Destination = ThisWorkbook.Path & "\Salaire.xlsm"
Workbooks.Open Destination
End SubDans le "Workbook_Open" de ThisWorkBook j'appel la macro CopierValeurs pour lancer la procédure à l'ouverture du classeur.
Comme je l'ai mentionné précédemment, le fichier Maj.xlsm est téléchargé à partir d'une macro du fichier Salaire.xlsm puis l'ouvre ensuite. Quand il s'ouvre la macro se lance correctement mais elle s'arrête après avoir fermé le fichier salaire sans sauvegarder (après avoir copié les valeurs des cellules dans le fichier Maj).
Alors que si j'ouvre mon fichier Maj "manuellement" toute la macro fonctionne correctement.
J'ai essayé de vous décrire mon problème le mieux possible. Si vous avez besoin de plus d'informations n'hésitez pas. J'ai essayé plusieurs alternatives avant de venir vers vous mais je rencontre toujours le même problème.
En vous remerciant !
C'est encore moi ! Ca fait quelques jours que je cherche une solution et il faut que je la trouve après avoir posté ici
Le problème venait de la partie du téléchargement du fichier Maj. J'ai modifié mon ThisWorkBook pour y rajouter une pause de 2 secondes et ça fonctionne.
Private Sub Workbook_Open()
Call CopierValeurs
Application.OnTime Now + TimeValue("00:00:02"), "Télécharger"
End Sub