Erreur 91

Signaler
Messages postés
5
Date d'inscription
mercredi 31 août 2005
Statut
Membre
Dernière intervention
19 septembre 2005
-
Messages postés
5
Date d'inscription
mercredi 31 août 2005
Statut
Membre
Dernière intervention
19 septembre 2005
-
Bonjour !
J ai un message d'erreur sur le code suivant...erreur 91 variable non définie...excel pointe sur la dernière boucle "ActiveWorbook.SaveAs...."
Quelqu'un pourrait-il me donner la solution svp...
D'avance merci !


Dim sFichier As String

'Définir le chemin
ChDir ("C:\nico\analyse\en cours")

'Ouvrir tous les fichiers
sFichier = Dir("*.*")
Do Until sFichier = ""
Workbooks.OpenText (sFichier), Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array( _
10, 1), Array(11, 1))
Application.Run "PERSO.XLS!Macro10"

sFichier = Dir()

Loop
ChDir "C:\nico\analyse\en cours\final"
'enregistrer les fichiers au format excel
Do

ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Name, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
Loop
End Sub

6 réponses

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
23
l'erreur 91 indique que tu fait référence à un objet qui n'a pas été instancié.
Cela semblerait donc indiquer que l'objet ActiveWorkbook n'est pas instancié au moment ou tu appelles sa méthode SaveAs(). Donc tu ne dois avoir aucun classeur d'ouvert à ce moment du code.
Assures-toi que ta 1ere boucle ouvre bien au moins un classeur ...

Christophe
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
salut

sauf erreur de ma part, tu fait un do...loop sans condition de sortie

donc le programme ferme les classeur actifs les uns apres les autre, et lorsqu'ils sont tous fermés, ca plante, car il n'y a plus de "activeworkbook" !!!

donc il faut que tu mette une condition de sortie a ta boucle, pour qu'elle s'arrete quand il n'y a plus de classeur ouvert.
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
23
Bien vu Aieeeuuuuuu ... je propose donc ceci
While Not (ActiveWorkBook Is Nothing)
ActiveWorkbook.SaveAs ...
ActiveWorkbook.Close
Wend
ou un for Each

Dim WB as WorkBook
For Each WB In WorkBooks
WB.SaveAs ...
WB.Close
Next

Perso, j'opterai pour la seconde option .. plus propre à mon goût

Christophe
Messages postés
5
Date d'inscription
mercredi 31 août 2005
Statut
Membre
Dernière intervention
19 septembre 2005

désolé mais avec le While not, excel plante a la fin...
Quant au for each, cela ne m'enregistre que le 1er fichier au format excel et tout reste ouvert...
Merci pour votre aide à tous mais là je ne m'en sors pas ( j suis un gros novice en VB)...
L idée for each a l air séduisante mais comment instancier un activeworkbook car la on instancie un workbook uniquement ?
Merci encore de m aider !
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
je ne suis pas sur de ce que j'avance, mais pour l'histoire du for each, s'il ne va pas jusqu'au bout, je pense que c'est du au fait qu'excel ferme en premier le classeur actif qui contient la macro, et que du coup la macro s'arette. j'ai deja eu le probleme (ca fonctionnait sous office 95 et ca plantait sous 2000 !)

pour cela essaie de rajouter un controle dans ton for each :

Dim WB as WorkBook
For Each WB In WorkBooks
if not WB = activeWorkBook then
WB.SaveAs ...
WB.Close
end if
Next

'et apres tu ferme le dernier classeur, celui qui contient a macro !
activeWorkBook.SaveAs...
activeWorkBook.close



c'est sans garantie, mais ca vaut le coup d'essayer... :)
Messages postés
5
Date d'inscription
mercredi 31 août 2005
Statut
Membre
Dernière intervention
19 septembre 2005

ca marche po...
En fait, la macro fonctionne parfaitement...excel fait excatement ce que je lui demande. Donc y a pas de pb avec un classeur qui contiendrait la macro.
Les problèmes réels sont :
1/comment instancier le "activeworkbook" comme une variable
2/lui faire comprendre que quand il a tout fermé il faut s'arrêter...
J'attends vos idées, vous qui répondez gentillement à mes demandes de novices !
Encore merci !