Je suis en fait tombé sur ce problème exact moi-même et j'ai enfin trouvé une solution à mon problème.
C'est le bouton Shift dans le raccourci clavier que vous utilisez pour appeler votre code.
Apparemment, il existe une fonctionnalité dans Excel spécifiquement conçue pour empêcher l'exécution du code lorsqu'un classeur est ouvert et que la touche Shift est pressée, mais malheureusement cela influence aussi l'ouverture des classeurs avec la méthode Workbook.Open
via VBA. Cela a été mentionné dans l'article KB 555263, s'appliquant à Excel 2000 et 2003, mais j'ai rencontré le même problème dans Excel 2010, donc j'imagine qu'il impacte aussi la version 2007.
Cela se produit spécifiquement lorsque vous essayez d'ouvrir un classeur via du code très tôt dans le programme. Si l'appel Workbook.Open
est atteint dans le code avant d'avoir eu suffisamment de temps pour relâcher complètement le bouton Shift, Excel interprète cela comme une tentative de bloquer l'exécution du code et interrompt le processus. Et il n'y a aucun message d'erreur ou quoi que ce soit que j'ai trouvé. Cela s'arrête simplement brusquement.
La solution/le correctif est de forcer le code à attendre que la touche Shift soit relâchée avant de donner la commande Workbook.Open
.
D'après l'article, il suffit d'ajouter ce code à votre macro et cela devrait fonctionner :
'Déclaration API
Declare Function GetKeyState Lib "User32" (ByVal vKey As Integer) As Integer
Const SHIFT_KEY = 16
Function ShiftPressed() As Boolean
'Retourne True si la touche Shift est pressée
ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function
Sub Demo()
Do While ShiftPressed()
DoEvents
Loop
Workbooks.Open Filename:="C:\MonChemin\MonFichier.xlsx"
End Sub
(REMARQUE : Ce code est pour les versions 32 bits d'Excel. Les versions 64 bits devront utiliser l'attribut PtrSafe
sur l'instruction Declare
).
Si vous ne voulez pas ajouter le code supplémentaire, alors vos seules autres options sont de ne pas utiliser Ctrl+Shift+Une Lettre pour lancer une macro, ou de placer la commande Workbook.Open
plus tard dans la macro (pas juste au début) pour vous donner le temps de relâcher le bouton Shift après l'avoir démarré.