Execution macros différentes sur disque dure différent
Bonjour,
Je sais ça paraît complètement incroyable, mais voilà, dans mon module ThisWorkbook, j'ai le code suivant :
Private Sub Workbook_Open()
Dim j As Integer, i As Integer
On Error Resume Next
For i = 1 To 3
Sheets(i).Visible = True
Next i
On Error GoTo 0
PARAMETRAGE_OUI = False
With UserForm_Parametrage
.Show 0
For i = 10 To 0 Step -1
DoEvents
If PARAMETRAGE_OUI = True Then
Exit Sub
End If
Application.Wait Now + TimeValue("00:00:01")
If i >= 10 Then
.Timer = "00:" & i
Else
.Timer = "00:0" & i
End If
.Repaint
Next i
End With
Unload UserForm_Parametrage
Application.DisplayAlerts = False
For i = ThisWorkbook.Sheets.Count To 5 Step -1
Sheets(i).Delete
Next i
Application.DisplayAlerts = True
Call Refresh
Call MISE_EN_FORME
Call Calculs_indexations_gasoil
Call Creation_PDF
Call EnvoiMail
Sheets("IMAGES").Visible = False
ThisWorkbook.Save
Application.Quit
End SubLa partie qui nous intéresse et qui plante est la suivante :
Call RefreshC'est ce code là qui plante, donc pour bien comprendre, en fait c'est un code qui va chercher des données sur le net. Ensuite des macros s'exécutent pour faire des calculs avec les données récoltées :
Sub Refresh()
Dim sURL As String: sURL = "URL;http://www.cnr.fr/Indices-Statistiques/Espace-Gazole/Indicateurs-Gazole-France/Prix-CNR-gazole-cuve-moy.-mens#haut"
'
' Ne pas afficher les message d'Excel
Application.DisplayAlerts = False
' En cas d'erreur (suppression requête) on continuer
On Error Resume Next
' Avec la feuille
With Sheets(1)
' Supprimer la requête
.Cells.QueryTable.Delete
' Effacer les cellules
.Cells.ClearContents
' Importer les données web
With .QueryTables.Add(Connection:=sURL, Destination:=.Range("$A$1"))
.Name = "Prix-CNR-gazole-cuve-moy.-mens#haut"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
' La 4ème table celles des données qui nous intéressent
.WebTables = "4"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=True
End With
End With
Dim sURL2 As String: sURL2 = "URL;http://www.cnr.fr/Indices-Statistiques/Espace-Gazole/Indicateurs-Gazole-France/Prix-gazole-pompe-moy.-mens#haut"
'
' Ne pas afficher les message d'Excel
Application.DisplayAlerts = False
' En cas d'erreur (suppression requête) on continuer
On Error Resume Next
' Avec la feuille
With Sheets(1)
' Importer les données web
With .QueryTables.Add(Connection:=sURL2, Destination:=.Range("$R$1"))
.Name = "Prix-gazole-pompe-moy.-mens#haut"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
' La 4ème table celles des données qui nous intéressent
.WebTables = "4"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=True
End With
End With
End SubSauf que (et c'est là que c'est fou), si je lance le fichier après l'avoir mis sur mon bureau, aucun problème, tout se fait parfaitement. Si je mets le fichier sur mon serveur et que je le lance, les données ne sont pas importées. Donc les calculs donnent 0
Merci d'avance.
Cordialement.
Bonjour,
On va essayer une autre piste : ... dans Excel, menu Fichier, Options, Centre de gestion de la confidentialité, bouton Paramètres du Centre de gestion de la confidentialité... dans la nouvelle fenêtre, Emplacement approuvés, au bas section de droite, coche : Autoriser les emplacements approuvées sur mon réseau (non recommandé). OK, OK, ferme Excel
Teste sur ton classer situé sur le réseau.
Gelinotte
Excellente idée. Mais ne fonctionne malheureusement pas....
Je viens d'essayer d'enlever tout le contenu de ThisWorkbook pour ne laisser que :
Private Sub Workbook_Open()
Call Refresh
End SubEt les données sont bien importées... Un peu plus lentement mais bien importées... Je pense que le problème vient du fait qu'il est trop lent à importer les données. Du coup tout le reste du code s'exécute avant la fin de l'import...
Je ne sais pas comment coder quelque chose comme : "Arrête toute l'exécution du code tant que tu n'auras pas fini d'importer les données".
Re,
Trouvé !
Cette petite ligne posait problème :
.Refresh BackgroundQuery:=TrueIl faut la mettre en
.Refresh BackgroundQuery:=FalseCar sinon, cela permet aux données de s'actualiser en fond de tâche. Ce qui est une erreur, car la machine n'y parvient pas si d'autres procédures sont lancées ensuite.
Merci beaucoup quand-même.
Cordialement.