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

Macros et VBA Excel Discussion :

L'appel a db.close ne ferme pas l'application MS ACCESS


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Cadre Manageur
    Inscrit en
    Octobre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cadre Manageur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut L'appel a db.close ne ferme pas l'application MS ACCESS
    Bonjour à tous,

    Je pose ici ma première question, j'espère être au bon endroit.

    Voici ma problématique:
    Sous Excel 2010, que j'utilise comme GUI pour accéder à une base MS Access sur un réseau, j'ai écrit le code ci-dessous qui fonctionne très bien:

    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
    Function DernierNumeroAuto() As Long
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim temp As String
    Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
    temp = UCase(Environ("username"))
    db.Execute ("INSERT INTO [SAVP_Data] (RSV_BDD, USER) VALUES ('RESERVE', """ & temp & """)") ' Ecriture et réservation de la fiche suivante avec N° de fiche
    Set rs = db.OpenRecordset("SELECT @@identity AS NewID FROM SAVP_Data")
    Numfiche = CLng(rs.Fields("NewID"))     ' ATTENTION LES DEUX NUMEROS SERONT A CONCORDER DANS LA NOVUELLE BASE
    FicheID = Numfiche
    Workbooks("SAVPRO.xlsm").Sheets("Fiche").Range("ID").Value = Numfiche
    'rs.Close        ' On ferme !
    db.Close        ' On ferme !
    Set rs = Nothing
    Set db = Nothing
    End Function
    En mode pas à pas, dans le gestionnaire des tâches, on voit bien MS ACCESS s'ouvrir puis se fermer avec l'exécution de db.close

    Mais pour des raisons que je ne comprends pas, le code ci-dessous, que j'ai aussi écrit, ne ferme pas l’application MS ACCESS lors de l'exécution de db.close.
    Ce qui rends mon application instable par la suite lors d'un prochain accès à la bdd notament.

    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
    Public Sub RechercherDsBase(ByVal Selection As String, ByVal Champs As String, Optional ByVal MaDate As String)
    Dim db As DAO.Database ' ou déclarer Dim db AsDatabase ne change rien
    Dim rs As DAO.Recordset
    Dim strSQL As String
    Dim iCols As Integer
     
    strSQL = "SELECT SAVP_Data.[N° FICHE], SAVP_Data.[DATE D'ENTREE], SAVP_Data.[Soldé], SAVP_Data.[REF PRODUIT], SAVP_Data.[N° SERIE MP], SAVP_Data.[N° LOT], " & _
             "SAVP_Data.[CODE CLIENT], SAVP_Data.[Nom du CLIENT], SAVP_Data.[Ref_Pdt_Client], SAVP_Data.[N° SERIE CLIENT], " & _
             "SAVP_Data.[DOC CLIENT], SAVP_Data.[RAPPORT QUALITE CLIENT], SAVP_Data.[D_Pdt_Rep], SAVP_Data.[Date Transmis Expedition] " & _
             "FROM SAVP_Data "
    Select Case Selection   ' Complétion de la commande SQL
        Case "Référence Eaton"  ' OptionButton01
            strSQL = strSQL & "WHERE (SAVP_Data.[REF PRODUIT] = """ & Champs & """);"
        Case "N° Série Eaton"   ' OptionButton02
            strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE MP] = """ & Champs & """);"
        Case "N° BL Eaton"      ' OptionButton03
            strSQL = strSQL & "WHERE (SAVP_Data.[Extraction BL de SAP] = """ & Champs & """);"
        Case "Référence Client" ' OptionButton04
            strSQL = strSQL & "WHERE (SAVP_Data.[Ref_Pdt_Client] = """ & Champs & """);"
        Case "Code Client"      ' OptionButton05
            strSQL = strSQL & "WHERE (SAVP_Data.[CODE CLIENT] = """ & Champs & """);"
        Case "N° Série Client"  ' OptionButton06
            strSQL = strSQL & "WHERE (SAVP_Data.[N° SERIE CLIENT] = """ & Champs & """);"
        Case "N° Doc/Cmd Client" ' OptionButton07
            strSQL = strSQL & "WHERE (SAVP_Data.[DOC CLIENT] = """ & Champs & """);"
        Case "N° Rapport NC Clt" ' OptionButton08
            strSQL = strSQL & "WHERE (SAVP_Data.[RAPPORT QUALITE CLIENT] = """ & Champs & """);"
        Case Else
            Call Messagerie("")
    End Select
    Set db = DBEngine.OpenDatabase(Workbooks("SAVPRO.xlsm").Sheets("Paramètres").Range("C4").Value & "SAVPRO.accdb") 'Etablissement de la connection avec la base access SAVPRO
    Set rs = db.OpenRecordset(strSQL)
    For iCols = 0 To rs.Fields.count - 1 ' Copie de l'entête du recordset dans l'onglet
        Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
    Next
    Workbooks("SAVPRO.xlsm").Sheets("ResultRech").Range("A2").CopyFromRecordset rs   ' Copie du contenu du recordset dans l'onglet
    'rs.Close
    db.Close        ' On ferme !
    Set rs = Nothing
    Set db = Nothing
    End Sub
    J'ai commenté out les lignes a partir de: set rs... jusqu'à rs.close mais rien y fait.
    J'en déduit donc que l'ouverture de la base est ce qui pose problème. Mais mes compétences s'arrêtes la...

    Pouvez vous m'aider à comprendre ce qu'il se passe?

    Merci pour votre aide

    MAJ_1: Je viens de m'apercevoir que lorsque je ferme mon GUI rien ne change mais si je stop le débugger ensuite (alors qu'il est arrêté d’apparence) alors MS Access se ferme.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je n'ai (quasiment) jamais manipulé des objets Access en VBA, il se peut donc que ce que je vais écrire soit une mauvaise idée et une mauvaise syntaxe.
    Si tu veux fermer Access, il me semble plus logique de faire un Quit sur l'application que de fermer la base de données.
    En tout cas, c'est comme ça que je procèderais si j'avais à fermer Excel depuis une autre application.

    Petit détail : prends la peine de vérifier (ou plutôt de dire à VBA de vérifier) qu'il n'y a pas d'autre base ouverte avant de fermer l'application.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Personnellement je n'utilses DAO que dans Access.

    Pour Excel j'utilises ADO.


    https://www.developpez.net/forums/d1...a/#post9998598

  4. #4
    Candidat au Club
    Homme Profil pro
    Cadre Manageur
    Inscrit en
    Octobre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cadre Manageur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Je n'ai (quasiment) jamais manipulé des objets Access en VBA, il se peut donc que ce que je vais écrire soit une mauvaise idée et une mauvaise syntaxe.
    Si tu veux fermer Access, il me semble plus logique de faire un Quit sur l'application que de fermer la base de données.
    En tout cas, c'est comme ça que je procèderais si j'avais à fermer Excel depuis une autre application.

    Petit détail : prends la peine de vérifier (ou plutôt de dire à VBA de vérifier) qu'il n'y a pas d'autre base ouverte avant de fermer l'application.
    C'est un bonne idée, que je vais essayer.

    Si quelqu'un pouvait compléter ce thread en expliquant pourquoi lors de l'ouverture de la base dans ce cas précis, celle-ci ne se ferme pas lors d'un db.close ca serait top!

  5. #5
    Candidat au Club
    Homme Profil pro
    Cadre Manageur
    Inscrit en
    Octobre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cadre Manageur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    Personnellement je n'utilses DAO que dans Access.

    Pour Excel j'utilises ADO.


    https://www.developpez.net/forums/d1...a/#post9998598
    Merci, je vais aller voir la différence entre les deux, je suis novice.

  6. #6
    Candidat au Club
    Homme Profil pro
    Cadre Manageur
    Inscrit en
    Octobre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Cadre Manageur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 4
    Points : 3
    Points
    3
    Par défaut DAO vs ADO: DAO est une technologie obsolèe et non supportée pour machines 64-bits
    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    Personnellement je n'utilses DAO que dans Access.

    Pour Excel j'utilises ADO.


    https://www.developpez.net/forums/d1...a/#post9998598

    J'ai donc implémenté le code pour du ADO et mon problème d'ouverture et de fermeture de MS ACCESS est résolu.

    Merci: dysorthographie

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par ThierryT85 Voir le message
    Si quelqu'un pouvait compléter ce thread en expliquant pourquoi lors de l'ouverture de la base dans ce cas précis, celle-ci ne se ferme pas lors d'un db.close ca serait top!
    Parce que fermer un document d'une application, ce n'est pas fermer l'application elle-même.
    Essaye avec Excel : si tu fermes un classeur (Fichier > Fermer), Excel reste ouvert.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] DoCmd.Close ne ferme pas le bon formulaire !
    Par Jeanpierre71 dans le forum IHM
    Réponses: 7
    Dernier message: 20/11/2012, 11h53
  2. Access ne se ferme pas à sortie application
    Par Godard dans le forum Access
    Réponses: 7
    Dernier message: 07/05/2007, 10h00
  3. mon application ne se ferme pas completement
    Par smail21 dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/09/2005, 15h15
  4. Réponses: 14
    Dernier message: 16/05/2005, 13h20
  5. Outlook ne se ferme pas après un envoi de mail
    Par Joke dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2003, 17h32

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