virgil_68
Messages postés4Date d'inscriptionvendredi 10 novembre 2006StatutMembreDernière intervention12 août 2008
-
8 août 2008 à 00:29
virgil_68
Messages postés4Date d'inscriptionvendredi 10 novembre 2006StatutMembreDernière intervention12 août 2008
-
12 août 2008 à 07:09
Bonjour.
J'ai développé un utilitaire avec VBA sous Excel 2007. Sans rentrer dans les détails, mon code passe en revue un ensemble de fichiers excel, en les ouvrant et en vérifiant leur conformité : nom d'onglet repondant a certains criteres, Entete de colonne formatee d'une certaine facon, etc ..... Tout se passe tres bien, sauf la fermeture des fichiers analysés. Les fichiers se ferment, mais le code VBA associé reste ouvert. Si on repete la macro plusieurs fois, on se retrouve avec le meme code VBAProjet ouvert plusieurs fois. Jusqu'a ce que viennent le message "Mémoire Insuffisante". Quelqu'un a t il une solution pour fermer le code associés d'un fichier excel lorsque celui ci reste ouvert ? Est ce un bug de Excel 2007 ?
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 8 août 2008 à 23:27
Bonsoir,
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 les fichiers, nécessairement le code VBA associé est aussi fermé. Ici, ce que tu dis n'est pas logique, en soit...
Je vois que deux possibilités :
1 / Le code VBA, agit dans la programmation dans VBProject... C'est à dire, qu'il y a du code VBA qui code dans VBE... (c'est possible !) C'est une programmation extrêmement spéciale, donc.
2 / Le code VBA ce charge dans PERSO.XLS, où quelque chose du genre...
Enfin, tout cela n'est pas en général très ordinaire. IL faudrait préciser ce point... A moins que, les fichiers ne soient pas vraiment fermés (ce qui me semble le + probable).
Dans l'absolu, il faudrait avoir le code "réplicateur" (s'il est assez court) et l'endroit où il se réplique, et le code que tu utilises pour ouvrir tes fichiers.
virgil_68
Messages postés4Date d'inscriptionvendredi 10 novembre 2006StatutMembreDernière intervention12 août 2008 12 août 2008 à 07:09
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 :
<hr />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
<hr />
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) :
<hr />
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
<hr />
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 ....