Ouvrir un fichier excel caché depuis excel

Fermé
Balata9 - 21 juin 2010 à 18:39
 Balata9 - 22 juin 2010 à 16:28
Bonjour à tous,

Je cherche un moyen d'ouvrir un fichier excel "CALCUL PRODUCTION JOUR" au début d'une macro car la macro va chercher des données dans "CALCUL PRODUCTION JOUR". Cependant, j'aimerais que ce fichier s'ouvre de manière caché et se referme à la fin de la macro.

J'ai écrit la macro suivante mais ca ne marche pas:

Sub FaibleProductible()

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

'Ouvrir le classeur dont on a besoin avec tout le chemin...
Set xlBook = xlApp.Workbooks.Open("C:\Documents and Settings\utilisateur\Bureau\CONNECTIS MARTINIQUE\CALCUL PRODUCTION JOUR.xls")
Set xlSheet = xlBook.Sheets("CALCULS") ' si on veut utiliser une feuille en particulier

La je met la macro qui va chercher les données dans "CALCUL PRODUCTION JOUR"


xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Sub


On dirais que le fichier ne s'ouvre pas car j'ai l'erreur suivante: "l'indice n'appartient pas à la sélection". Merci d'avance pour votre aide


A voir également:

6 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
21 juin 2010 à 19:53
Bonsoir,

J'ai testé en lisant une cellule, le fichier est bien ouvert.

Je me demande quand même pourquoi :
Dim xlSheet As New Excel.Worksheet
et non :
Dim xlSheet As Worksheet
puisque la feuille est existante dans le classeur, mais les 2 versions fonctionnent
eric
0
Pourtant, ca ne marche pas pour moi. Je te met le code en entier, peut être que tu auras une idée de ce qu'il se passe:

Sub FaibleProductible()

Dim xlApp As New Excel.Application 
Dim xlBook As New Excel.Workbook
Dim xlSheet As Worksheet

'Ouvrir le classeur dont on a besoin avec tout le chemin...
Set xlBook = xlApp.Workbooks.Open("C:\Documents and Settings\utilisateur\Bureau\CONNECTIS MARTINIQUE\CALCUL PRODUCTION JOUR.xls")
Set xlSheet = xlBook.Sheets("CALCULS") ' si on veut utiliser une feuille en particulier

Dim i As Long
Dim j As Long
Dim DATA As Long
Dim REF As Long

ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B26:E300").ClearContents

j = 26 'Début du tableau de la page TABLEAU DE CONTROLE'

For i = 8 To 180


If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i) = 0 Then

        Else

DATA = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Cells(i, 9)
REF = ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C22")

End If

If DATA < REF Then

    If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i) = 0 Then
    
    Else

    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("A" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("I" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("D" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("J" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("E" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("L" & i)
      
      
    j = j + 1

    End If

End If

Next i

'Important en quittant le programme ou quand on n'en a plus besoin xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

End Sub


Si tu comprends le problème c'est super!
0
Pourtant, ca ne marche pas pour moi. Je te met le code en entier, peut être que tu auras une idée de ce qu'il se passe:

Sub FaibleProductible()

Dim xlApp As New Excel.Application 
Dim xlBook As New Excel.Workbook
Dim xlSheet As Worksheet

'Ouvrir le classeur dont on a besoin avec tout le chemin...
Set xlBook = xlApp.Workbooks.Open("C:\Documents and Settings\utilisateur\Bureau\CONNECTIS MARTINIQUE\CALCUL PRODUCTION JOUR.xls")
Set xlSheet = xlBook.Sheets("CALCULS") ' si on veut utiliser une feuille en particulier

Dim i As Long
Dim j As Long
Dim DATA As Long
Dim REF As Long

ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B26:E300").ClearContents

j = 26 'Début du tableau de la page TABLEAU DE CONTROLE'

For i = 8 To 180


If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i) = 0 Then

        Else

DATA = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Cells(i, 9)
REF = ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C22")

End If

If DATA < REF Then

    If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i) = 0 Then
    
    Else

    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("A" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("I" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("D" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("J" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("E" & j) = Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("L" & i)
      
      
    j = j + 1

    End If

End If

Next i

'Important en quittant le programme ou quand on n'en a plus besoin xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

End Sub


Si tu comprends le problème c'est super!
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 213
Modifié par eriiic le 21/06/2010 à 23:25
Pas trop le temps actuellement mais tu devrais préciser en quelle ligne tu as 'l'indice n'appartient pas à la sélection'

If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i)
Pourquoi utiliser Workbooks("CALCUL PRODUCTION JOUR") alors que tu as défini xlbook ?
0
J'obtiens le message d'erreur à la ligne suivante:

If Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS").Range("D" & i) = 0 Then

Cela vient peut être du fait que, comme tu dis, j'ai déja défini xlbook. Mais je ne comprend pas comment l'écrire.

Merci encore
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
22 juin 2010 à 14:57
Bonjour,

Pour désigner un classeur (même ouvert), il faut mettre le chemin entier dans la désignation du classeur:
Workbook(C:\Documents and Settings\utilisateur\Bureau\CONNECTIS MARTINIQUE\CALCUL PRODUCTION JOUR.xls") par exemple.

Dans le code, le classeur "CALCUL PRODUCTION JOUR.xls" est instancié dans un objet xlBook et la feuille "CALCULS" de ce calsseur pas xlSheet, il faut donc les utiliser.

Sub FaibleProductible()

Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As Worksheet

'Ouvrir le classeur dont on a besoin avec tout le chemin...
Set xlBook = xlApp.Workbooks.Open("C:\Documents and Settings\utilisateur\Bureau\CONNECTIS MARTINIQUE\CALCUL PRODUCTION JOUR.xls")
Set xlSheet = xlBook.Sheets("CALCULS") ' si on veut utiliser une feuille en particulier

Dim i As Long
Dim j As Long
Dim DATA As Long
Dim REF As Long

ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B26:E300").ClearContents

j = 26 'Début du tableau de la page TABLEAU DE CONTROLE'

For i = 8 To 180


If xlSheet.Range("D" & i) = 0 Then

        Else

DATA = xlSheet.Cells(i, 9)
REF = ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C22")

End If

If DATA < REF Then

    If xlSheet.Range("D" & i) = 0 Then
    
    Else

    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("B" & j) = xlSheet.Range("A" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("C" & j) = xlSheet.Range("I" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("D" & j) = xlSheet.Range("J" & i)
    ThisWorkbook.Worksheets("TABLEAU DE CONTROLE").Range("E" & j) = xlSheet.Range("L" & i)
      
      
    j = j + 1

    End If

End If

Next i

'Important en quittant le programme ou quand on n'en a plus besoin xlBook.Close
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing

End Sub


;o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Finalement j'ai trouvé comment faire, c'était tout bête. Il faut en effet remplacer Workbooks("CALCUL PRODUCTION JOUR").Worksheets("CALCULS"). par xlBook.Sheets("CALCULS")

Merci pour ton aide eriic
0
Merci également Polux31
0