Problème lors de la fermeture d'un objet - Excel grisé
Bonjour à tous,
Lors de la fermeture de mon objet ma macro "efface" le worbook utilisé.
Quand je le rouvre après exécution de la macro, les données n'y sont plus et à la place j'ai un excel gris sans feuille, toutefois en ouvrant VBA les feuilles apparaissent bien.
Voici mon code:
Sub MacroImpaye()
'Impayee Month1
Set Month1 = GetObject("C:\toto\Month1 2021.xlsx")
'Partie non utile pour la résolution de mon problème, tout fonctionne ici
Nb_ligne = Month1.ActiveSheet.Range(Month1.Worksheets(1).Range("A4"), Month1.Worksheets(1).Range("A4").End(xlDown)).Rows.Count + 3
If Not Month1.Worksheets("Balance Summary").AutoFilterMode Then Month1.Worksheets("Balance Summary").Range("A4").AutoFilter
Month1.ActiveSheet.Range(Month1.Worksheets(1).Range("A4"), Month1.Worksheets(1).Range("A4").End(xlToRight)).AutoFilter Field:=4, Criteria1:=AnalisysCode
A = Month1.Worksheets("Balance Summary").Range("U" & Nb_ligne).Value
b = Month1.Worksheets("Balance Summary").Range("V" & Nb_ligne).Value
C = Month1.Worksheets("Balance Summary").Range("W" & Nb_ligne).Value
d = Month1.Worksheets("Balance Summary").Range("X" & Nb_ligne).Value
e = Month1.Worksheets("Balance Summary").Range("Y" & Nb_ligne).Value
Template.Windows(1).Activate
With Template.Worksheets("Template")
.Range("C4").Value = A
.Range("D4").Value = b
.Range("E4").Value = C
.Range("F4").Value = d
.Range("G4").Value = e
End With
Month1.Worksheets("Balance Summary").Range("A1:AA" & Nb_ligne).Copy
'Je pense que le problème provient plutôt ici
Month1.Close savechanges = False
Set Month1 = NothingJe voudrai fermer le classeur Month1 et que ce dernier reste sans modification afin qu'a la fin de ma macro, je n'ai que le classeur "Template" qui soit ouvert.
Merci de votre aide (si il est possible de m'expliquer si vous avez la solution, car même après relecture du fonctionnement du GetObjet, impossible de comprendre).
Bonne journée, et bon week-end à suivre.
Cordialement.
Bonjour ExGats,
Pour ouvrir et définir un classeur ouvert, on n'utilise pas
Set Month1 = GetObject("C:\toto\Month1 2021.xlsx")GetObject : retourne une référence à un objet fourni par un composant ActiveX (rien à voir)
Mais
Set Month1 = Workbooks.Open("C:\toto\Month1 2021.xlsx")Le problème ne vient-il pas de là par la suite
@+
Bonjour Bruno, merci de votre aide.
Le classeur Month1 n'est pas ouvert, je récupère des informations dedans que je vais ensuite coller sur mon template, j'ai lu quelque part que si l'on ne modifie pas un fichier, il faut mieux le récupérer par GetObject.
J'aimerai si c'est possible passer par GetObject, afin de savoir d'où provient mon erreur et mieux comprendre pour la suite.
Merci à vous
EDIT : je peux contourner le problème en codant :
Set Month1 = GetObject("C:\toto\Month1 2021.xlsx")
....Mon code....
Set Month1=nothing
Mais à la fin, lorsque je ferme mon classeur contenant la macro, il me propose si je veux enregistrer le classeur Month1 2021.
Je réalise cela 12 fois (12 mois), et fermer l'ensemble des 12 classeurs à la fin et plutôt chronophage.
Merci.
Month1 est sous la même application que template, par conséquent cette ligne de code ferme l'ensemble de mes classeurs y compris "Template"
Je pourrais créer une 2nd instance pour Month1, mais je ne pense pas que cela est le plus optimal =/
C'est incompréhensible pour moi Set Month1 = GetObject("C:\Users/Month1 2021.xlsx" permet sous la même instance que le classeur utilisé par la macro de récupérer la référence au classeur.
Je devrais donc théoriquement pouvoir le fermer sans problème avec un Month1.close savechanges=false...
Re,
Je vois cette ligne
Month1.Worksheets("Balance Summary").Range("A1:AA" & Nb_ligne).Copy Sans aucun "Paste", est-ce bien normal ?
De plus je viens de me rendre compte d'une horreur
Voilà comment il faut écrire le "Close"
Month1.Close SaveChanges:=False@+
Yes il y a un past qui est passé à l'as dans mon copier coller, mais il est bien copier au sein du template.
Pour le close j'ai écris un peu vite, mais j'avais bien la bonne syntaxe ^^
EDIT : Il me manquait bien les deux points ! Et je n'avais pourtant pas de message d'erreur, et le false se mettait d'une couleur différente donc je pensais que la syntaxe était bonne.
MERCI beaucoup, perdu quelques heures pour ":"....