Importer une feuille d'un document Excel sans ouvrir ce dernier

hassanz17 Messages postés 3 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 23 janvier 2009 - 23 janv. 2009 à 12:30
Supra3000 Messages postés 159 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 8 janvier 2010 - 23 janv. 2009 à 19:14
Bonjour à tous
mon problème et le suivant:

J'ai un fichier Excel "MonClasseur" ou je fais tout un calcul sauf pour alliment des cefichier il faut que je récupère une feuille d'un autre classeur "MaBase" sans oubrir ce dernier.

Je souhaite faire cette importation sous VBA
        - Comme le fichier "Mabase" est mis à jour chaque mois , j'ai d'abord fait une boite de dialogue pour désisgner le fichier à importer.

    Dim ChemMabase As Variant
        Position1:
        Dim s As Integer
           
ChemMabase
= Application.GetOpenFilename("Excel Files (*.xls), *.xls", , "Selection du fichier")
            If
ChemMabase
= False Then
                    toto = MsgBox("Vous n'avez pas selectionné de fichier à importer.Désirez vous continuer?", 52, "Erreur")
                    I f (toto = vbYes) Then
                             GoTo Position1
                    End If
        ' --- Si on annule
                    If (toto = vbNo) Then
                            End
                    End If
    End If

          - Après c'est là où je suis bloqué
                J'aimerai avoir un code VBD qui m'importe la première feuille du fichier Mabase sans                      l'ouvrir
Merci d'avance
      

4 réponses

Supra3000 Messages postés 159 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 8 janvier 2010 2
23 janv. 2009 à 16:11
Il est impossible d'importer une feuille excel d'un autre classeur si tu ne l'ouvre pas.

 Pourquoi faut t'il qu'il ne s'ouvre pas? S'il est déjà ouvert tu peux l'ouvrir en lecture seule et rendre la fenêtre invisible..

Bonne continuation
0
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
23 janv. 2009 à 17:10
Salut,

Qu'entends tu dans: "sans ouvrir le classeur" ?

Pour accéder aux données d'un classeur il faut obligatoirement ouvrir celui ci mais pas obligatoirement avec la fenêtre Excel ouverte visuellement.
Le code ci-dessous ouvre le classeur ainsi qu'un instance d'Excel dans les processus système mais sans ouvrir visuellement le programme.

Sub test()

Dim myXl As Excel.Application
Dim myWb As Excel.Workbook
Dim myWs As Excel.Worksheet

Set myXl = New Excel.Application 'Intancie
Set myWb = myXl.Workbooks.Open("c:\Monfichier.xls") 'Ouvre le fichier
Set myWs = myWb.Worksheets.Item(1) 'instancie myWS avec la feuille 1 du classeur

End Sub

Voilà, il n'y aucun autre moyen d'accéder aux données d'un classeur Excel par VBA

LC

Pensez à accepter les réponses qui vous servent 
0
hassanz17 Messages postés 3 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 23 janvier 2009
23 janv. 2009 à 17:56
Merci bcp pour votre  réactivité,


Quand je fais une importation de feuille avec la méthode normale (càd aller sur
le menu d'Excel Données-> Données externes->Importer des données...) cela
importe la feuille sans ouvrir le fichier.

J'ai essayé même d'enregistré la macro liée a cette opération, et sur le
code je retrouve bien le chemin de la feuille à importer, par contre quand je
souhaite rendre ce chemin variable sur le code la macro ne fonctionne plus
0
Supra3000 Messages postés 159 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 8 janvier 2010 2
23 janv. 2009 à 19:14
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & lepathdufichier & ";Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Regis, try Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial B" _
        , _
        "ulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLE" _
        , _
        "DB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:" _
        , "SFP=False"), Destination:=Range("A1"))
        .CommandType = xlCmdTable
        .CommandText = Array("Feuil1$")
        .Name = nomdufichier
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = lepathdufichier
        .Refresh BackgroundQuery:=False
    End With

La méthode ActiveSheet.QueryTables.Add.Refresh BackgroundQuery:=False ouvre le fichier en mode invisible pour pouvoir importe ta feuille. Cette méthode n'est pas magique, je veux dire par là qu'à la limite il est impossible d'importer un fichier qu'il soit binaire, etc sans l'ouvrir pour avoir l'info qui se trouve a l'intérieur...

Bonne continuation
0
Rejoignez-nous