Erreur 91

captaine93 Messages postés 5 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 19 septembre 2005 - 13 sept. 2005 à 13:08
captaine93 Messages postés 5 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 19 septembre 2005 - 19 sept. 2005 à 10:33
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

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 sept. 2005 à 15:40
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
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
13 sept. 2005 à 16:52
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.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
13 sept. 2005 à 17:42
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
0
captaine93 Messages postés 5 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 19 septembre 2005
15 sept. 2005 à 15:40
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 !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
16 sept. 2005 à 10:21
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... :)
0
captaine93 Messages postés 5 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 19 septembre 2005
19 sept. 2005 à 10:33
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 !
0
Rejoignez-nous