Comment ouvrir un classur Excel sans mettre à jour les sources de données externes (mais le garder activé)?

J'ai des cahiers d'exercices, qui commencent par des macros automatiques et des mises à jour de données (et, en prévenant certaines suggestions, ces classurs doivent fonctionner comme ça, parce que je les lance automatiquement à partir du planificateur Windows et j'ai besoin d'eux pour effectuer des tâches sans aucune action de la part de l'user).

Quand je dois vérifier / mettre à jour certaines formules, requêtes SQL ou layout, j'ouvre simplement un classur contenant la touche [Shift] et empêche les macros de triggersment dans Workbook_Open / Auto_Open events etc, ce qui est génial.

Le problème est qu'il existe encore des sources de données externes qui sont automatiquement actualisées pendant l'ouverture. Dans certaines de ces bibliothèques, les requêtes prennent beaucoup de time à accomplir et je dois attendre une minute ou deux avant de pouvoir éditer un classur.

Est-ce que je peux ouvrir un classur avec les deux macros et la mise à jour des données désactivées? Ou, peut-être, un moyen simple d'annuler l'exécution d'une requête?

Accédez aux options Excel, accédez au Centre de confiance, puis aux parameters du centre de rouille et allez dans Contenu externe .

Vous verrez les parameters de security pour les connections de données et les liens du classur. Désactiver les deux.

Redémarrez Excel et vous avez terminé.

Dans Office 2010, accédez au même menu Contenu externe et select Désactiver toutes les connections de données ainsi que Désactiver la mise à jour automatique des liens du classur.

Après avoir inséré le code dans les modules appropriés, exécutez CreateAltStartVBS . CreateAltStartVBS créera un file VBScript (AltStart.vbs) dans le dossier des classurs. Lorsque vous exécutez AltStart.vbs il démarrera votre classur en contournant vos macros d'ouverture et en désactivant les connections.

Module du classur

 Private Sub Workbook_BeforeClose(Cancel As Boolean) EnableRefresh True End Sub Private Sub Workbook_Open() If getSwitch = "/z" Then EnableRefresh False Exit Sub End Sub 'Normal code goes here End Sub Sub EnableRefresh(Enable As Boolean) Dim conn As Object For Each conn In ActiveWorkbook.Connections conn.ODBCConnection.EnableRefresh = Enable Next End Sub 

Module standard

 Option Base 0 Option Explicit Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long Declare Function lstrlenW Lib "kernel32" (ByVal lpSsortingng As Long) As Long Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long) Function CmdToSTr(Cmd As Long) As Ssortingng Dim Buffer() As Byte Dim StrLen As Long If Cmd Then StrLen = lstrlenW(Cmd) * 2 If StrLen Then ReDim Buffer(0 To (StrLen - 1)) As Byte CopyMemory Buffer(0), ByVal Cmd, StrLen CmdToSTr = Buffer End If End If End Function Function getSwitch() Dim CmdRaw As Long Dim CmdLine As Ssortingng CmdRaw = GetCommandLine CmdLine = CmdToSTr(CmdRaw) getSwitch = Split(CmdLine, Chr(34))(2) End Function Sub EnableConnections(Enable As Boolean) Dim conn As Object For Each conn In ActiveWorkbook.Connections conn.ODBCConnection.EnableRefresh = Enable Next End Sub Sub CreateAltStartVBS() Dim myFile As Ssortingng myFile = ThisWorkbook.Path & "\AltStart.vbs" Open myFile For Output As #1 Print #1, "Dim objShell" Print #1, "Set objShell = CreateObject (""WScript.Shell"")" Print #1, "objShell.Run ""excel.exe /z """ & Chr(34) & ThisWorkbook.FullName & Chr(34) Print #1, "Set objShell = Nothing" Close #1 End Sub