UPDATE :
Après avoir résumé et discuté de tous les détails, j'ai passé deux heures entières à vérifier les options, et cette mise à jour est destinée à mettre au point toutes les options. i
s.
Préparations
Tout d'abord, j'ai effectué une installation propre d'Office 2010 x86 sur une machine virtuelle Win7 SP1 Ultimate x64 propulsée par VMWare (c'est la routine habituelle pour mes tâches de test quotidiennes, j'en ai donc déployé plusieurs).
Ensuite, je n'ai modifié que les options Excel suivantes (c'est-à-dire que toutes les autres sont restées telles quelles après l'installation) :
-
Advanced > General > Ask to update automatic links
vérifié :
-
Trust Center > Trust Center Settings... > External Content > Enable All...
(bien que celle qui concerne les connexions de données ne soit probablement pas importante pour le cas présent) :
Conditions préalables
J'ai préparé et placé pour C:\
un classeur exactement comme dans @Siddharth Rout
suggestions dans sa réponse actualisée (partagée pour votre commodité) : https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Le livre lié était alors supprimé donc ce lien dans le livre partagé est indisponible (c'est sûr).
Ouverture manuelle
Le fichier partagé ci-dessus montre à l'ouverture (avec les options Excel listées ci-dessus) 2 avertissements - dans l'ordre d'apparition :
AVERTISSEMENT #1
Après avoir cliqué sur Update
Je m'attendais à en recevoir un autre :
AVERTISSEMENT #2
Donc, je suppose que mon environnement de test est maintenant assez similaire à OP
) Jusqu'ici tout va bien, nous allons enfin à
Ouverture du VBA
Maintenant, je vais essayer toutes les options possibles, étape par étape, pour rendre l'image claire. Je ne partagerai que les lignes de code pertinentes pour plus de simplicité (le fichier d'exemple complet avec le code sera partagé à la fin).
1. Application simple.Workbooks.Open
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Sans surprise, cela produit les DEUX avertissements, comme pour l'ouverture manuelle ci-dessus.
2. Application.DisplayAlerts = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Ce code aboutit à AVERTISSEMENT #1 et l'une ou l'autre option a été cliquée ( Update
/ Don't Update
) ne produit AUCUN autre avertissement, à savoir Application.DisplayAlerts = False
supprime AVERTISSEMENT #2 .
3. Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
En face de DisplayAlerts
ce code aboutit à AVERTISSEMENT #2 uniquement, c'est-à-dire Application.AskToUpdateLinks = False
supprime AVERTISSEMENT #1 .
4. Faux double
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
Apparemment, ce code finit par supprimer LES DEUX AVERTISSEMENTS .
5. UpdateLinks:=False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False
Enfin, cette solution à 1 ligne (proposée à l'origine par @brettdj
) fonctionne de la même manière que Double False : AUCUN AVERTISSEMENT sont montrés !
Conclusions
En dehors d'une bonne pratique de test et d'un cas résolu très important (je peux être confronté à de tels problèmes tous les jours en envoyant mes classeurs à une tierce partie, et maintenant je suis préparé), 2 autres choses ont été apprises :
- Les options d'Excel sont importantes, quelle que soit la version, surtout lorsqu'il s'agit de solutions VBA.
- Chaque problème a une solution courte et élégante - ainsi qu'une solution moins évidente et compliquée. Une preuve de plus pour cela)
Merci beaucoup à tous ceux qui ont contribué à la solution, et en particulier à OP qui a soulevé la question. J'espère que mes recherches et les étapes de test décrites en détail ont été utiles, et pas seulement pour moi.)
Le fichier d'exemple avec les échantillons de code ci-dessus est partagé (de nombreuses lignes sont commentées délibérément) : https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Réponse originale (testé pour Excel 2007 avec certaines options) :
Ce code fonctionne bien pour moi - il passe en revue TOUS les fichiers Excel spécifiés à l'aide de caractères génériques dans le champ InputFolder
:
Sub WorkbookOpening2007()
Dim InputFolder As String
Dim LoopFileNameExt As String
InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!
LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""
Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True
LoopFileNameExt = Dir
Loop
End Sub
J'ai essayé avec des livres dont les liens externes sont indisponibles - aucun avertissement.
Un exemple de fichier : https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm