Une suite de logiciels de tableur Microsoft avec des outils pour analyser, créer des graphiques et communiquer des données
Cette réponse a été traduite automatiquement. Par conséquent, il peut y avoir des erreurs grammaticales ou des formulations étranges.
Cher Marcellin DUPONT,
Veuillez nous fournir plus de détails. Je suppose que le problème semble provenir de l’appel de fonction dans votre fonction. ShellWait
Voici quelques suggestions que vous pourriez essayer :
- Assurez-vous que la variable est correctement définie et qu’elle pointe vers le fichier exécutable que vous souhaitez exécuter. Vous pouvez ajouter un pour afficher la valeur de avant l’appel afin de le vérifier : MsgBox CompletePath
2.La fonction Shell peut ne pas être en mesure de localiser le fichier si le chemin d’accès contient des espaces ou des caractères spéciaux. Vous pouvez utiliser l’API ShellExecute à la place, qui est plus robuste :
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Function ShellWait(ByVal CompletePath As String) As Long
Dim ProcessHandle As LongPtr, ProcessId As Long
ProcessId = ShellExecute(0, "open", CompletePath, vbNullString, vbNullString, vbNormalFocus)
ProcessHandle = OpenProcess(&H1F0000, 0, ProcessId)
ShellWait = WaitForSingleObject(ProcessHandle, INFINITE)
End Function
D’ailleurs, assurez-vous que le fichier exécutable que vous essayez d’exécuter existe au chemin d’accès spécifié et qu’il n’est pas corrompu. Vous pouvez accéder manuellement au chemin d’accès et essayer d’exécuter l’exécutable pour confirmer.
Et si vous exécutez ce code sur une version 64 bits d’Excel, assurez-vous que toutes les déclarations d’API sont compatibles avec la version 64 bits. À utiliser à la place des pointeurs et des poignées.
Merci de votre temps et de votre coopération !
Sincères salutations