Ouvrir un fichier excel caché depuis excel
Balata9
-
Balata9 -
Balata9 -
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:
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
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
6 réponses
-
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 -
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! -
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! -
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-
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)
-
-
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 -