Ouvrir un classeur Excel par macro sans l'afficher

Résolu
maxxyme Messages postés 16 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 1 mai 2014 - 20 sept. 2006 à 11:37
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 25 sept. 2006 à 18:31
Bonjour !

Je m'explique, je travaille sur une macro qui fait de la mise en forme sur un fichier CSV, que j'ouvre via le code suivant :




    Dim vFilename As Variant, oJournalWorkbook As Workbook
    vFilename = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
    If (vFilename = False) Then
        Exit Function
    Else
        Set oJournalWorkbook = Application.Workbooks.Open(vFilename)
        If (oJournalWorkbook Is Nothing) Then
            Exit Function
        End If
    End If

La suite du traitement (extraction de données) se fait à partir de la variable oJournalWorkbook qui permet de référencer directement les plages de cellules sans passer par les ActiveSheet / ActiveWorkbook etc...

Le "problème" est qu'en fait, lorsque j'ouvre le classeur (avec Workbooks.Open) le classeur est placé au premier plan, ce que je ne souhaite pas (inutilité, et je n'ai pas non plus envie que l'utilisateur voit les transformations qui sont faites sur le fichier).

Mais comment faire pour "cacher" le classeur qu'on vient d'ouvrir ???
Je sais par ex. qu'il existe la méthode "Workbook.Activate" qui permet justement d'afficher un classeur au 1er plan, mais je cherche plutôt à faire l'inverse...
D'ailleurs, le fichier de macros persos (PERSO.XLS la plupart du temps), il est ouvert en mode... "cache" !!!

Merci d'avance...
A voir également:

12 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 sept. 2006 à 00:23
Et si tu procédais comme on fait à partir de VB ?

Tu crées une instance d'Excel à part. Tu ne verras donc pas le classeur
dans le menu Fenêtre de ton application. Il faudra tout de même
spécifier xlBook ou xlSheet pour que le programme comprenne de quelle
cellule on parle ou de quelle feuille, classeur...


Option Explicit  

Dim xlApp As New Excel.Application  ' déclarer Public si dans un module

Dim xlBook As New Excel.Workbook

Dim xlSheet As New Excel.Worksheet


Sub MaSub()

  

'Ouvrir le classeur dont on a besoin avec tout le chemin...

    Set xlBook = xlApp.Workbooks.Open("LeNomDeTonFichier.xls")

    Set xlSheet = xlBook.Sheets("Feuil1")  ' si on veut utiliser une feuille en particulier

   

'Pour vérifier que tout fonctionne bien

    MsgBox xlSheet.Range("C8")

'si on ne spécifie pas de feuille

'    MsgBox xlBook.Activesheet.Range("C8")

' ou MsgBox xlBook.Sheets("Feuil1").Range("C8")

   

'Important en quittant le programme ou quand on n'en a plus besoin (pas nécessairement ici...)

    xlBook.Close

    xlApp.Quit

    Set xlSheet = Nothing

    Set xlBook = Nothing

    Set xlApp = Nothing


End Sub

MPi
3
Rejoignez-nous