VB Outlook Fichier excel invisible devient visible

Signaler
Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010
-
Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010
-
Bonjour,

Je viens de créer une macro dans outlook 2007 pour envoyer des emails de manière semi-automatique en utlisant des UserForms.

Pour m'aider à préremplir ces UserForms (creation de ComboBox) j'utilise des données stocké dans un fichier excel.

Bien évidement j'ouvre ce fichier excel de manière invisible.

Le problème :
Si ma macro tourne, mon fichier excel Datas.xls est ouvert. Si pendant ce temps j'essaye d'ouvrir un autre fichier (appelons le File.xls) manuellement via internet explorer, et que donc une fenetre du type de celle disponible ici apparait si je click sur Open. En plus d'ouvrir mon fichier File.xls, Datas.xls qui était invisible est ouvert aussi et deviens visible... Ainsi si l'utilisateur ne comprend pas ce que fais ce fichier ouvert et qu'il le ferme ou le modifie je vais avoir des problèmes...

Voici le code utilisé :


Public oApp As Object
Public workbookExcel As Object
Public sheetExcel As Object



Private Sub Macro()
    
    'Objects creation
    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = False
    
    ' Set workbook worksheet
    Set workbookExcel = oApp.workbooks.Open(C:\Datas.xls")
    Set sheetExcel = workbookExcel.sheets("Sheet1")

    ' Launch the UserForm
    UserForm1.Show
    
    'Close the workbook
    workbookExcel.Close
    oApp.Quit
    
    Set sheetExcel = Nothing
    Set workbookExcel = Nothing
    Set oApp = Nothing
    
End Sub




Quelqu'un saurait-il comment éviter que mon fichier invisible devienne visible?

Merci d'avance

5 réponses

Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010

Désolé pour la syntaxe j'ai relu un peu rapidement, et n'ai pas trouvé comment éditer mon message.
Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010

Après quelques essais, je me suis rendu compte que si j'ouvre 2 fichiers avec ma macro lorsque j'ouvre des fichiers via internet explorer seul le premier fichier ouvert avec la macro deviens visible (et ce quelque soit le nombre de fichier ouvert avec IE). Ma solution est donc :



Public oApp As Object
Public workbookExcel As Object
Public sheetExcel As Object



Private Sub Macro()
    
    ' Fichier créé uniquement en vue de gérer les erreurs éventuelles
    Dim oAppError As Object
    Set oAppError = CreateObject("Excel.Application")

    'Objects creation
    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = False
    
    ' Set workbook worksheet
    Set workbookExcel = oApp.workbooks.Open(C:\Datas.xls")
    Set sheetExcel = workbookExcel.sheets("Sheet1")

    ' Launch the UserForm
    UserForm1.Show
    
    'Close the workbook
    workbookExcel.Close
    oApp.Quit
    
    Set sheetExcel = Nothing
    Set workbookExcel = Nothing
    Set oApp = Nothing
    
End Sub




Si quelqu'un a une solition un peu plus orthodoxe a propose je serais ravi de la lire.

Sinon si vous avez juste un commentaire à je suis aussi preneur.
Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010

Bonjour à tous,

Je pensais avoir réglé mon problème mais j'ai vu réapparaitre mon fichier qui était censé être invisible.

Je n'ai eu aucune réponse. Pourquoi?

Ai-je mal expliqué mon problème? Ai-ce un problème connu?

Si vous avez quoi que ce soit à dire qui pourrait faire avancer mon problème, n'hésitez pas.

Merci.
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
11
Salut,

Non pas de problème tes explications sont claires depuis le début.

En fait la solution est très très simple mais peu connue. En fait pour éviter ce problème il suffit de privatiser la session excel dans la quelle tu ouvres ton fichier. Cela oblige windows a ouvrir une nouvelle session excel pour les autres fichiers.

il suffit de faire comme ceci:

'Objects creation
    Set oApp = CreateObject("Excel.Application")
    oApp.IgnoreRemoteRequests = True
    oApp.Visible = False


Voila c'est simple mais il faut le savoir

A+
Messages postés
5
Date d'inscription
mercredi 1 septembre 2010
Statut
Membre
Dernière intervention
19 septembre 2010

Bonjour Bigfish,

Merci beaucoup pour ta réponse.

Les solutions les plus simples ne sont pas toujours les plus faciles à trouver...

Par contre celle-ci n'est pas aussi simple qu'il y parait.


En effet ta solution résoud le problème quand on essaye d'ouvrir un fichier excel de manière conventionnelle, quand on click dessus dans l'explorateur de fichier, mais pas quand on ouvre un fichier via internet explorer, le problème reste entier.

Le code suivant fonctionne (enfin je crois) j'essaye de le tester un peu de toutes la manières possible! Mais c'est pas fin du tout c'est une solution que je n'aime pas du tout...



Public oApp As Object
Public workbookExcel As Object
Public sheetExcel As Object



Private Sub Macro()
    
    ' Fichier créé uniquement en vue de gérer les erreurs éventuelles
    Dim oAppError As Object
    Set oAppError = CreateObject("Excel.Application")

    'Objects creation
    Set oApp = CreateObject("Excel.Application")
    oApp.IgnoreRemoteRequests = True
    oApp.Visible = False
    
    ' Set workbook worksheet
    Set workbookExcel = oApp.workbooks.Open(C:\Datas.xls")
    Set sheetExcel = workbookExcel.sheets("Sheet1")

    ' Launch the UserForm
    UserForm1.Show
    
    'Close the workbook
    oApp.IgnoreRemoteRequests = False 'Il faut penser à le remettre sur false car ca peut creer des problemes d'apres ce que j'ai pu lire sur internet...
    workbookExcel.Close
    oApp.Quit
    
    Set sheetExcel = Nothing
    Set workbookExcel = Nothing
    Set oApp = Nothing
    Set oAppError = Nothing
    
End Sub




Quelqu'un aurait quelque chose à proposer?