Mon code VBA bug quand je verrouille ma session Windows 10 message d'erreur 1004

JoelR

XLDnaute Nouveau
Salutation à tous.

A l'aide d'un script Batch, du planificateur de tâche de Windows 10, des formules excel et un peu de VBA, j'ai réussi, tant bien que mal et malgré ma faible connaissance, à automatiser une de mes tâches quotidiennes au boulot.

Voici le détails de ce qu'ils exécutent ensemble:

1- Le planificateur de tâche de Windows lance le fichier bat contenant les scripts batch chaque matin car je n'éteints pas mon ordinateur au bureau;
2- Un des scripts Batch copie un fichier depuis un dossier partage en réseau du client de mon entreprise dans un dossier local pour que la macro puisse l'intégrer en tant que pièce jointe du mail outlook en finalité (je ne sais pas pourquoi mais je ne peux rajouter la PJ par les codes vba directement à partir de l'adresse du fichier dans le partage d'où la nature de ce script);
3- Un autre script dans le même fichier bat fait attendre 30 seconde puis après vide le presse papier Windows;
4- Le script lance finalement mon fichier excel qui a un Private Sub Workbook_Open qui lance une suite de macro;
5- Les macros se résument ainsi en 3 étapes:
  • Elle actualise un TCD issu d'un cube Olap qui met à jours les données de plusieurs tableaux reliés par des formules excel intervenant par la formule aujourd'hui()-1 pour récupérer les données de la veille depuis le TCD;
  • Puis il copie les tableaux en format image et les colle dans un onglet nommé "Export" préconçu pour éditer un mail outlook;
  • Puis il reprend toutes les informations de l'onglet "Export" (destinataire, copie du mail, le corps du mail avec les formats image et les textes de contenu) pour rédiger et envoyer directement le mail.
Le code qui me bloque c'est le code qui copie les plages des tableaux pour les rendre en image:

With Application.Worksheets("Mon Sheet")
Set plage = .Range("B6:E9")
plage.CopyPicture

Avec un message d'erreur 1004 indiquant que le presse papier ne peut être vidé car une autre application est en train de l'utiliser quand je verrouille mon PC alors que quand je ne le verrouille pas, cela fonctionne normalement. A préciser que j'ai besoin que ce code se lance automatiquement tôt tous les matins d'où l'utilisation du planificateur de tâche Windows. J'ai déjà mis une ligne de code Application.CutCopyMode = False avant le le bloque with cité dessus et j'appel même une fonction utilisant les API Windows pour libérer le presse papier avant ce code Application.CutCopyMode qui est la suivante:

Option Explicit
Public Declare PtrSafe Function OuvrirPressPapiers Lib "user32" Alias "OpenClipboard" (ByVal hwnd As Long) As Long
Public Declare PtrSafe Function ViderPressPapiers Lib "user32" Alias "EmptyClipboard" () As Long
Public Declare PtrSafe Function FermerPressPapiers Lib "user32" Alias "CloseClipboard" () As Long

Public Function NettoyerPressPapiers()
OuvrirPressPapiers (0&)
ViderPressPapiers
FermerPressPapiers
End Function

Le problème reste le même pourtant si je lance le tout en laissant ma session ouverte, tout est OK. J'ai tenté de comprendre la raison du pourquoi en déboguant le code et quand j'exécute la ligne de code, elle s'exécute parfaitement. C'est à n'y rien comprendre. o_O

S'il vous plait, si quelqu'un pouvait m'aider ce serait génial. :D

J'espère que je n'ai pas rédigé quelques choses de trop long pour que vous ne lisez pas jusqu'à la fin. :)

Merci à ceux qui vont répondre.
 
Dernière édition:

JoelR

XLDnaute Nouveau
Bon bah, j'ai un peu tester des solutions qui me semblaient être cohérentes et finalement, j'ai résolu le problème :)

Je vais quand même dire la solution pour ceux qui rechercheraient sur le sujet. Il suffit donc de fermer tous les programmes car moi, je ne fermais pas chrome pour gagner du temps.

C'était toute bête mais il fallait y penser :D:cool:
 

Discussions similaires