Bonjour,
J'édite le message ici pour éviter une lecture inutile : l'erreur 3045 ne s'est plus produite une fois que j'ai mis le répertoire des bases en "lecture/écriture" au lieu de "lecture seule". Enfantin mais je suis mortifié de n'y avoir pas pensé plus vite. Il a fallu qu'une discussion ailleurs en anglais sur des problèmes d'Access en réseau me mettent la puce à l'oreille. Cependant, je ne m'explique pas comment la permission sur le répertoire a été inopinément mise en "lecture seule" après plusieurs journées à utiliser ce répertoire sans problème. Je laisse quand même mon message s'il peut aider un autre visiteur du site, même si ce n'est qu'un peu.
J'utilise ACCESS 2010 sous Windows 8 Pro, comme seul utilisateur de mon PC pour développer des applications depuis Access 2, jadis pour mes clients, maintenant pour moi étant retraité.
J'ai eu un sérieux problème avec une erreur 3734, dont je parle dans la discussion "3734 persiste et saigne...". J'ai sauvegardé ma base, l'ai compactée/réparée puis utilisé l'option "/decompile" (ce n'est pas la première fois), compilé le projet, compacté/réparé/sauvegardé la base.
Je l'ouvre - sans ouverture de formulaire ni de macro AutoExec -, je choisis mon module global "zG11M_DBdocum" (seul ouvert), je me positionne sur la SUB DocContInventory dont voici le code :
Le module compile sans erreur. Dans la fenêtre d'exécution immédiate, je tape DocContInventory[Enter] et cette fois j'ai ce message VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Public Sub DocContInventory() Dim MyDB As DAO.Database Dim MyCont As Container Dim MyProperty As Property Dim MyDoc As Document Set MyDB = CurrentDb() For intK = 0 To MyDB.Containers.Count - 1 Set MyCont = MyDB.Containers(intK) For intI = 0 To MyCont.Documents.Count - 1 Set MyProperty = MyCont.Properties(intI) Debug.Print "Properties ("; intI; ")" Debug.Print " Name: "; MyProperty.Name Debug.Print " Type: "; MyProperty.Type Debug.Print " Value: "; MyProperty.Value Set MyDoc = MyCont.Documents(intI) For intJ = 0 To MyDoc.Properties.Count - 1 Set MyProperty = MyDoc.Properties(intJ) Debug.Print "Properties ("; intJ; ")" Debug.Print " Name: "; MyProperty.Name Debug.Print " Type: "; MyProperty.Type Debug.Print " Value: "; MyProperty.Value Next intJ Set MyProperty = Nothing Next intI Set MyCont = Nothing Next intK Set MyDB = Nothing End Sub
Je clique sur déboguage pour voir que le curseur est sur la ligne 6 "Set MyDB...". Dans les options, je modifie le "Mode d'ouverture par défaut" de "Mode exclusif" à "Mode partagé" même si je suis le seul utilisateur de mon PC et de ma DB. Le "Verrouillage par défaut" est règlé sur "Aucun". Je ferme la DB et la relance, mêmes étapes de test que ci-dessus et même message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Erreur d'exécution '3045' : Impossible d'utiliser « chemin-et-nom-de-ma-base ». Fichier en cours d'utilisation
J'ai lu dans kb/94035/fr de Microsoft :
Et pourtant, j'ai ce message... ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Toutefois, si vous exécutez une procédure Visual Basic qui utilise la fonction CurrentDB() ou l'objet DBEngine avant d'exécuter la méthode OpenDatabase, l'erreur n'apparaît pas.
J'ai, comme le conseille jimbolion dans la discussion "3734", décidé de recréer une DB pour y importer tous les objets. En même temps, je scinde les données et les autres objets, avec une base "XyzData.accdb" contenant les tables (et les requêtes liées au champ contenant une liste déroulante) et une base "Xyz.accdb" avec les requêtes, formulaires, états et module, plus les tables attachées.
J'ouvre la base programme, mon module en mode création, je le compile et dans la fenêtre d'exécution immédiate, je lance ma SUB DocContInventory ... et même erreur 3045 ; à noter que le "Mode d'ouverture par défaut" était sur "Mode exclusif" et le "Verrouillage par défaut" sur "Aucun".
Je n'ai rien trouvé comme remède, ici au Club ou ailleurs... J'espère que -ce n'est pas une maladie orpheline. Merci d'avance pour vos conseils.
Partager