Bonjour et merci à ceux qui se penchent sur mon probleme.
Tout d'abord, je réponds à us_30 pour effacer les doutes. Il dit, je cite :
"Je pense que quelque chose n'est pas clair, lorsque tu dis : " Les fichiers se ferment, mais le code VBA associé reste ouvert. ". En effet, si tu ferme sles fichiers, nécessairement le code VBA associé est aussi fermé. Ici, ce que tu dis n'est pas logique, en soit..."
Oui, c'est vrai, ca ne parait pas logique, mais c'est ainsi que cela se passe. En plus, j'ai, sur mon lieu de travail un dualscreen, qui me permet d'avoir l'environnement VB d'un coté et le tableur de l'autre. Lors du déroulement de la macro, lorsque je laisse Application.ScreenUpdating = True,je vois clairement les fichiers s'ouvrir, puis se refermer, mais sur l'ecran VB, la branche VBAProject correpondante reste ouverte ....
Sur demande de lillith212 , et les autres qui pourraient creuser mon souci (qui je pense est lié a un bug Excel 2007), voici les bouts de code qui me permettent d'ouvrir et de fermer les fichiers sources en cours de programme :
Tout d'abord, la partie où je choisis les fichiers que je veux analyser :
Public Sub Demarrage()
Dim Classeur As Workbook
Dim fd As FileDialog
Dim fdfs As FileDialogFilters
Dim fdf As FileDialogFilter
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim Element As Variant
With fd
fd.InitialFileName = ActiveWorkbook.Path
fd.Filters.Add "Fichiers Excel", "*.xls"
If .Show = -1 Then
For Each Element In .SelectedItems
Verif (Element)
Next Element
Else
End If
End With
Set fd = Nothing
End Sub
Puis la procedure qui ouvre un fichier et l'analyse : (je mets le début et la fin, car le reste n'est qu'analyse et traitement) :
Sub Verif(Element As String)
Dim Onglet As Worksheet
Dim Nom_Onglet As String
Dim Nom_Entete As String
Dim Classeur As Workbook
Dim Col As Integer
Dim RapportA As String
Dim RapportB As String
Dim RapportC As String
Dim Tmp As String
Dim NomFichierSortie As String
Dim iTmp, TailleRapport As Integer
Dim TableauZone() As Variant
Dim ZoneNommeeOk As Boolean Dim Nom_Zone As String
Application.ScreenUpdating = False
Set Classeur = Workbooks.Open(Element, , True)
|
|
|Analyse du fichier ouvert ......
|
|
Classeur.Close SaveChanges:=False
Set Classeur = Nothing
Application.ScreenUpdating = True
End Sub
Voila. C'est tout.
PS : J'ai testé mon code sur un Excel 2003, et tout fonctionne à merveille, ce qui me laisse vraiment penser qu'Excel 2007 à un bug ....