fermeture fichier

Z

zeltron

Guest
Bonjour à tous,

Voici mon pb:

J'ai 2 fichiers le fichier 'appli' et le fichier 'Base BDD'. Sachant que le fichier'Base BDD' est dans un dossier qui se trouve dans le même dossier que le fichier 'appli'.
Ce que je souhaite , c'est que lorsque j'ouvre le fichier 'appli', le fichier 'base BDD' s'ouvre automatiquement.Pour cela j'utilise le code suivant qui ce trouve dans 'this Worbook' du fichier 'appli'.

Private Sub Workbook_Open()

chemin = ActiveWorkbook.Path
ChDir chemin

Workbooks.Open Filename:='Bases\\Base BDD.xls'

End Sub

Ce code marche impec. Dès lors je souhaite la même chose lorsque je ferme le fichier 'appli', c'est a dire que le fichier 'base BDD' se ferme automatiquement; Dès lors j'ai voulu utiliser le code suivant:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemin = ActiveWorkbook.Path
ChDir chemin
Workbooks.Close Filename:='Bases\\Base BDD.xls'
End Sub

Et là j'ai un message avec point d'exclamation en VBA qui est:
'Erreur de compilation: Nombre d'arguments incorrect ou affectation de propriété incorrecte'

Ou est mon erreur dans le code??
Pouvez vous m'aider?

De plus j'aimerais protéger le fichier 'Base BDD en ouverture et ecriture, cependant lorsqu'en ouvrant le fichier 'appli' qui ouvre le fichier 'Base BDD', il me demande les codes d'ouverture et d'ecriture. Où dois je inserer ces codes en VBA afin qu'il les débloque automatiquement a l'ouverture et les remette à la fermeture?

Merci d'avance pour votre aide

Cordialement

Zeltron
 

Bricofire

XLDnaute Impliqué
Bonsoir Zeltron, :)
Pour ton 1er pb, je pense qu'il s'agit d'un des nombreux pièges du vba, lance l'aide VBA, tape Workbooks et cliques sur méthode, tu auras open et close notemment, ça ne fonctionne pas pareil :

Ferme l'objet. La collection Workbooks utilise la syntaxe 1. Les objets Window et Workbook utilisent la syntaxe 2.

Syntaxe 1

expression.Close

Syntaxe 2

expression.Close(SaveChanges, FileName, RouteWorkbook)



Donc dans ton cas, il faut utiliser la syntaxe 1, donc mettre :

Workbooks('BasesBase BDD.xls').Close SaveChanges:=False


Pour le SaveChanges, c'est si tu ne veux pas enregistrer de modifs ;)

Je te renvoie à l'aide car il y a plein de détails comme d'hab :)

Bon courage,

Brico

édition = mep

Message édité par: bricofire, à: 16/01/2006 18:51
 

Bricofire

XLDnaute Impliqué
re, :)

Pour les codes d'ouverture et fermeture regardes toujours dans l'aide à Protect et unprotect (méthodes). C'est simple à appliquer.
Tu peux aussi chercher avec le protection sur le forum, c'est un sujet courant.

Je ne sais pas en quelle version Excel tu es, moi je suis en 2000, depuis les arguments et possibilités à ce niveau ont évoluées je crois, donc tiens en compte dans ce que tu verras ;)

cordialement,

Brico
 
Z

zeltron

Guest
Bonjour Bricofire,

merci beaucoup de m'accorder de ton temps pour m'aider.

J'ai suivi tes conseils, j'ai donc mis les codes suivant:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemin = ActiveWorkbook.Path
ChDir chemin
Workbooks('BasesBase BDD.xls').Close SaveChanges:=True
End Sub

Private Sub Workbook_Open()

chemin = ActiveWorkbook.Path
ChDir chemin

Workbooks.Open Filename:='Bases\\Base BDD.xls'

End Sub

Là dès que je ferme le fichier 'appli', avant de fermer il me met le message suivant:

Erreur d'execution 9
L'indice n'appartient pas à la sélection

Quelle en est la raison?

Par avance merci

Cordialement

Zeltron
 
Z

zeltron

Guest
J'ai supprimer l'extension, cela donne:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemin = ActiveWorkbook.Path
ChDir chemin
Workbooks('BasesBase BDD').Close SaveChanges:=True
End Sub

Private Sub Workbook_Open()

chemin = ActiveWorkbook.Path
ChDir chemin

Workbooks.Open Filename:='Bases\\Base BDD.xls'

End Sub



Mais cela me donne toujours le même message.

Je te joint le dossier ( le code pour le fichier 'base BDD' est : aude75)

Merci d'avance

Cordialement

Zeltron [file name=test_20060116194444.zip size=9689]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20060116194444.zip[/file]
 

Pièces jointes

  • test_20060116194444.zip
    9.5 KB · Affichages: 8
Z

zeltron

Guest
Ok, c'est bon, çà marche
Le code de fermeture est:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Workbooks('BaseBDD.xls').Close SaveChanges:=True
End Sub


Merci pour ton aide bricofire,et merci au site

Maintenant je vais voir comment faire lorsque le fichier 'BaseBDD' est protégé en lectuer et modification

A plus

Merci

Zeltron
 
Z

zeltron

Guest
J'ai toujours un problème. Je ne sais pas comment adapté le code VBA de la solution ci dessus, lorsque le fichier à ouvrir est protégé en ecriture et en lecture ( c'est le fichier BaseBDD qui est protégé), je me doute que je doit essayer.
L'aide de VBA indique ceci:
Password Argument de type Variant facultatif. Chaîne qui contient le mot de passe requis pour ouvrir un classeur protégé. Si vous ne spécifiez pas cet argument et si le classeur requiert un mot de passe, l'utilisateur est invité à entrer ce mot de passe.

WriteResPassword Argument de type Variant facultatif. Chaîne qui contient le mot de passe requis pour écrire dans un classeur protégé en écriture. Si vous ne spécifiez pas cet argument et si le classeur requiert un mot de passe, l'utilisateur est invité à entrer ce mot de passe.

Mais je n'arrive pas a voir comment coder en VBA cela.

Quelqu'un peut il m'aider?

Par avance merci

Cordialement

Zeltron
 

Bricofire

XLDnaute Impliqué
re re Zeltron :)
;) avec un peu de code, ça va mieux tout de suite, ton fichier qui pose pb à la fermeture s'appelle, dans ton code Base BDD.xls et non BasesBase BDD.xls !!! avec ça :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemin = ActiveWorkbook.Path
ChDir chemin

Workbooks('Base BDD.xls').Close SaveChanges:=True
End Sub

c'est bon !

Quand tu mets Bases\\\\\\\\Base BDD.xls le nom avant l'antislash indique un chemin (ou une partie), dans ton cas c'est normal qu'il ne trouve pas BasesBase BDD.xls qui est un nom inexistant pour lui, je regardes le reste..

A+
Brico

Message édité par: bricofire, à: 16/01/2006 23:35
 

Bricofire

XLDnaute Impliqué
re... :)
ton code tel que dans ton fichier :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
chemin = ActiveWorkbook.Path
ChDir chemin
Workbooks('BasesBase BDD').Close SaveChanges:=True
End Sub


Je te le remets car si tu esaies de taper un antislash dans ton message, il apparaît chez toi, mais disparaît dans le post, pour en avoir un dans le post comme mon dernier, il faut en fait en taper 4 à l'écran (il y a un fil là-dessus) sur le salon.
Mais là tu as bien le pb dans ton code et de toutes façons vu la syntaxe et la logique de la méthode Close, il ne faut pas y mettre de chemin... Il est là sous la main, donc excel n'a pas besoin de le chercher dirrons-nous :)

a+
Brico
 

Bricofire

XLDnaute Impliqué
re.. :) ,

Pour ouvrir ton fichier protégé, il suffit de mettre ça dans ton code, excuses moi mais tout à l'heure je n'ai pas regardé de près, car je n'étais pas censé être sur mon micro :)

Private Sub Workbook_Open()

chemin = ActiveWorkbook.Path
ChDir chemin

Workbooks.Open Filename:='Bases\\\\\\\\Base BDD.xls', PassWord:='aude75'

End Sub


A+
Brico
édition... les antislashs ...

Message édité par: bricofire, à: 17/01/2006 00:16
 
Z

zeltron

Guest
Je te remercie Bricofire pour ton aide, par contre as tu une idée pour le cas ou le fichir baseBDD est protégé en lecture et en modification, comme je l'explique plus haut
J'ai toujours un problème. Je ne sais pas comment adapté le code VBA lorsque le fichier à ouvrir est protégé en ecriture et en lecture ( c'est le fichier BaseBDD qui est
protégé).
L'aide de VBA indique ceci:
Password Argument de type Variant facultatif. Chaîne qui contient le mot de passe requis pour ouvrir un
classeur protégé. Si vous ne spécifiez pas cet argument et si le classeur requiert un mot de passe,
l'utilisateur est invité à entrer ce mot de passe.

WriteResPassword Argument de type Variant facultatif. Chaîne qui contient le mot de passe requis pour écrire dans un
classeur protégé en écriture. Si vous ne spécifiez pas cet argument et si le classeur requiert un
mot de passe, l'utilisateur est invité à entrer ce mot de passe.

Mais je n'arrive pas a voir comment coder en VBA cela.

As tu une idée?

Par avance merci

Cordialement

Zeltron
 

Discussions similaires

Réponses
10
Affichages
506
Réponses
2
Affichages
284

Statistiques des forums

Discussions
312 183
Messages
2 086 005
Membres
103 087
dernier inscrit
sarah.caneri