IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Test de Sub dans un module : erreur 3045, Currentdb() ==> Fichier en cours d'utilisation


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité à 65 ans
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité à 65 ans

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut Test de Sub dans un module : erreur 3045, Currentdb() ==> Fichier en cours d'utilisation
    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 :
    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
    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
    Erreur d'exécution '3045' :
    Impossible d'utiliser « chemin-et-nom-de-ma-base ».
    Fichier en cours d'utilisation
    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.
    J'ai lu dans kb/94035/fr de Microsoft :
    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.
    Et pourtant, j'ai ce message... ?

    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.
    Michel

    Office 2019 Pro Plus, Win10 Pro 64 bits ; Access et VBA depuis Access 2 ; encore actif même si retraité ; seul utilisateur de mon PC.

  2. #2
    Membre du Club
    Homme Profil pro
    Retraité à 65 ans
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité à 65 ans

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    J'ai laissé de côté l'application qui me causait le problème 3045 ci-dessus pour créer une nouvelle application de gestion des inscriptions aux Portes Ouvertes organisées par une ONG dont je suis membre. C'est une contribution bénévole. Il s'agit d'analyser des formulaires Word pour en extraire les informations et les injecter dans une base Access pour permettre aux visiteurs du site Web de l'ONG de sélectionner quels sites PO ils souhaiteraient visiter.

    L'analyse des formulaires se passe bien, j'ai mes données, elles sont bien identifiées. Lorsque je veux les ajouter aux tables "tblParticipant", "tblSite" avec "tblHoraire" et "tblDétails" (les caractéristiques des divers sites), j'ajoute le code pour ouvrir la DB et en exécutant "Set MyDB = Current(Db)", l'erreur 3045 surgit. J'ai déjà recréé une nouvelle base .accdb en y important ce que j'avais créé dans la base .mdb où l'erreur se produisait déjà.

    J'ai appliqué la solution que j'ai signalée au début de mon message précédent : remetre le dossier en lecture et écriture. Hélas, dès que l'application tourne, le dossier où se trouve ma base se retrouve mis en lecture seule. C'est tourner en rond ! Help.

    La Sub cmdImporterFiches_Click exécute la Function Extract(oFN As String) et c'est dans la section "Initialisation" que se produit l'erreur sur le "Set MyDB = Current(Db)".
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    ' Quelques déclarations 
    Dim MyDB As DAO.Database
    Dim MySetDetailFile As DAO.Recordset
    Dim MySetTable As DAO.Recordset
    Dim wFSO As New FileSystemObject
    Dim wFil As File
    Dim wDossier As Folder
    Dim wApp As New Word.Application
    Dim wDoc As Word.Document
    Dim FilName As String
    Private Sub cmdImporterFiches_Click() '*************************************
    ' Identifie les fichiers présents dans le dossier d'extraction de courriels,
    ' traite le contenu et le déplace vers le dossier des Traités
    ' Répertoires des Inscriptions : champs dans le formulaire d'appel
        On Error GoTo HandleErrors
        Set wDossier = wFSO.GetFolder(Me.ctlChemin)
        For Each wFil In wDossier.Files
            If Left(wFil.Name, 9) = Me.ctlPréfixe Then
                Extract (wFil.Name)
                If SwOK = True Then         ' 1er fichier intraitable
                    wFil.Move Me.ctlChemin & Me.ctlFichesTraitées
                Else
                    Exit For
                End If
            End If
        Next wFil
        Set wDoc = Nothing
        Set wFSO = Nothing
        Set wApp = Nothing
     
    ExitHere:
        Exit Sub
     
    HandleErrors:
        HandleErrors Err.Number, "cmdImporterFiches_Click"
        Resume ExitHere
    End Sub
    Public Function Extract(oFN As String) '*************************************
        On Error GoTo HandleErrors
        GoSub Initialisation ' <==<==<==<==<==<== ERREUR
        wDoc.Unprotect (PWD)                        ' protection par mot de passe
        intI = wDoc.FormFields.Count                ' nombre de champs
    ' j'ai sauté le code des tests sur les noms et structures des documents Word
    ' et les traitements des fichiers car l'erreur se produit avant !
     
    AbortHere:
        wDoc.Close SaveChanges:=False
        MySetDetailFile.Close
        Set MySetDetailFile = Nothing
        MySetTable.Close
        Set MySetTable = Nothing
        Set wDoc = Nothing
        wApp.Quit
        Set wApp = Nothing
        Set MyDB = Nothing
     
    ExitHere:
        Exit Function
     
    HandleErrors:
        HandleErrors Err.Number, "Extract"
        SwOK = False
        Resume AbortHere
     
    Initialisation:
    ' je n'ai pas inclus l'initialisation des constantes
        SwOK = True
        Set MyDB = CurrentDb() ' <==<==<==<==<==<== ERREUR
        Set wDoc = wApp.Documents.Open(FileName:=Me.ctlChemin & oFN)
        Set MySetDetailFile = MyDB.OpenRecordset(KfilNamDL)   ' tlkpDétailListe
        Return
    End Function '---------------------------------------------------------------
    Je précise que je suis seul utilisateur de mon PC sous Windows 8 Pro et de l'application en développement, que je n'ai ouvert que le formulaire des importations (qui a comme source une table dont l'enregistrement donne chemin et noms des dossiers). En VBA, j'ai dans cet ordre les références suivantes :
    - Visual Basic for Applications
    - Microsoft Access 14.0 Object Library
    - Ole Automation
    - Microsoft Office 14.0 Access database engine Object Library
    - Microsoft Scripting Runtime
    - Microsoft Word 14.0 Object Library
    Ces deux dernières librairies étant nécessaire pour travailler sur des documents Word.

    D'avance merci pour vos suggestions. Je vais continuer mes essais en changeant l'ordre des librairies.

    Michel
    Michel

    Office 2019 Pro Plus, Win10 Pro 64 bits ; Access et VBA depuis Access 2 ; encore actif même si retraité ; seul utilisateur de mon PC.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Février 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2016
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Pour corriger l'erreur 3045 Microsoft Access, alors dans ce cas il peut être fixé en suivant les étapes ci-dessous:
    1. Allez sur votre machine serveur.
    2. Si pas possible, ne pas sauter sur les étapes # 5-6
    3. Ouvrez Gestion de l'ordinateur (utilisation des outils d'administration ou% SystemRoot% \ system32 \ compmgmt.msc / s)
    4. Passez à l'étape n ° 7
    5. Sélectionnez Action / Se connecter à un autre ordinateur.
    6. Sélectionnez votre serveur PC à partir de la liste et entrez
    7. Sélectionnez Outils système / Shared Folders / Open Files.
    8. Regardez dans cette liste pour l'information quant à savoir qui a accès au fichier (s)
    9. Force fermeture du fichier (s), si (et seulement si) approprié.
    De cette façon, vous pouvez corriger cette erreur.

  4. #4
    Membre du Club
    Homme Profil pro
    Retraité à 65 ans
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité à 65 ans

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut
    Kevin678,

    Désolé, je n'ai pris connaissance de votre message qu'aujourd'hui. Et vieux moutard que j'aimais, euh non ! Mieux vaut tard que jamais !

    Merci pour vos suggestions, mais pardonnez mon avis, elles ne sont pas toutes pertinentes car toutes mes bases sont sur le disque dur de mon ordinateur personnel et même si elles sont attachées, elles ne me semblent pas être sur un serveur, que je n'ai pas, non peut-être ? Mon PC n'est pas en réseau, j'ai juste un accès Internet par câbles Ethernet vers mon routeur.

    J'ai cependant suivi votre procédure, à partir du point 7 ==> Outils Système ==> Dossiers partagés ==> Fichiers ouverts et j'ai le message "Aucun éléments à afficher dans cet aperçu" et c'est normal puisque je n'ai aucun dossier "Partagé".

    A noter :
    (1) la commande suggérée devrait plutôt s'écrire "%SystemRoot%\system32\compmgmt.msc /s" sans les espaces perturbateurs
    (2) depuis lors, je suis passé à Windows 10 Pro 64 bits

    Et surtout le problème a disparu un jour tout seul, sans que je sache ni pourquoi ni comment et je ne m'en souviens pas de la date exacte en 2013 ! Et miserere mihi, je n'ai plus pensé à ce topic.

    Devrais-je marquer le sujet (ancien) comme résolu ? M^me si ce n'estpas çà à 100 %.
    Michel

    Office 2019 Pro Plus, Win10 Pro 64 bits ; Access et VBA depuis Access 2 ; encore actif même si retraité ; seul utilisateur de mon PC.

Discussions similaires

  1. [AC-2010] Err. 3045, Currentdb() ==> Fichier en cours d'utilisation
    Par mihego32 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/02/2013, 10h36
  2. Réponses: 0
    Dernier message: 02/07/2010, 20h14
  3. Test fichier en cours d'utilisation
    Par RemiBousquet dans le forum Administration et Installation
    Réponses: 4
    Dernier message: 12/01/2010, 17h05
  4. Réponses: 33
    Dernier message: 02/02/2009, 22h25
  5. Réponses: 9
    Dernier message: 06/06/2006, 22h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo