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 :

Processus Excel actif apres procedure Access


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Par défaut Processus Excel actif apres procedure Access
    Bonjour,

    Je viens vers vous pour essayer de résoudre un problème lié à un processus d'Excel toujours actif après une écriture de données en VBA, depuis Access vers un classeur xls (l'objectif étant d'alimenter un tableau ligne par ligne avec des calculs effectués depuis ma BDD). J'ai pourtant cherché longuement des solutions à ce dysfonctionnement (déjà identifié dans des forums notamment ici) mais sans résultat pour moi.

    Au premier lancement de la procédure, tout se déroule normalement. Le deuxième lancement (sans fermer access) bloque sur la méthode "range" qui me permet de récupérer la derniere ligne remplie dans une colonne. Excel est alors actif dans les processus Windows avant de lancer la procédure.
    Si je supprime la ligne dédiée à la récupération de la dernière ligne excel, je ferme correctement le processus excel à chaque lancement.

    ci-dessous mon 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
    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
    Private Sub btn_test_export_xls_wikipcs_Click()
     
    'Dim appexcel As Excel.Application
    Dim appexcel As New Excel.Application 'remplace la ligne précédente à partir d'une réponse trouvé
    Dim wbexcel As Excel.Workbook
    Dim cnn1 As ADODB.Connection
    Dim myrecordset As New ADODB.Recordset
    Dim sql As String
    Dim lastligne, u, i As Integer
     
    'Appel du fichier Excel à remplir
     
    appexcel.Visible = False ' testé à vrai sans succès 
    Set wbexcel = appexcel.Workbooks.Open("E:\test.xls")
     
    ' Appel de la feuille
     
    appexcel.Sheets("Feuil1").Select
     
     
    ' Recup derniere ligne B1 et affecte ligne +1 (bug à ce niveau)
     
    lastligne = Range("B1").End(xlDown).Row
    u = lastligne + 1
     
     
    ' recordset + requete calcul
     
    Set cnn1 = CurrentProject.Connection
    myrecordset.ActiveConnection = cnn1
     
    sql = "ma requete"
     
    'ouverture recordset
     
    myrecordset.Open sql
     
    i = 2
     
    Do While myrecordset.EOF = False
     
    ' rempli les valeurs dans excel
     
    appexcel.Cells(u, i) = myrecordset.Fields("CompteDeAvancement du PCS")
     
     
    myrecordset.MoveNext
     
    ' vide recordset + deconnect
     
    i = i + 1
     
    Loop
     
    myrecordset.Close
    Set cnn1 = Nothing
     
    ' ferme excel
     
    wbexcel.SaveAs "E:\test.xls"
    wbexcel.Close
    appexcel.Quit
     
    Set appexcel = Nothing
    Set wbexcel = Nothing
     
    End Sub
    En vous remerciant d'avance pour votre aide.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Je te propose une modif de cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    appexcel.Visible = False ' testé à vrai sans succès 
    Set wbexcel = appexcel.Workbooks.Open("E:\test.xls")
     
    ' Appel de la feuille
     
    appexcel.Sheets("Feuil1").Select
     
     
    ' Recup derniere ligne B1 et affecte ligne +1 (bug à ce niveau)
     
    lastligne = Range("B1").End(xlDown).Row
    u = lastligne + 1
    réécrite ainsi, avec un objet supplémentaire à déclarer : ShExcel As Excel.Worksheet (variable à libérer en fin de procédure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    appexcel.Visible = False ' testé à vrai sans succès 
    appExcel.EnableEvents = False
    Set wbexcel = appexcel.Workbooks.Open("E:\test.xls")
     
    ' Appel de la feuille
     
    Set Shexcel = wbexcel.WorkSheets("Feuil1")
     
     
    ' Recup derniere ligne B1 et affecte ligne +1 (bug à ce niveau)
     
    lastligne = Shexcel.Range("B1").End(xlDown).Row
    u = lastligne + 1
    J'ai modifié en précisant les objets sans appel à l'objet actif et j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    appExcel.EnableEvents = False
    pour bloquer d'éventuelles procédures évènementielles.

    Encore un détail : par précaution tu devrais types lastligne et u long plutôt qu'integer.

    Cordialement,

    PGZ

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 32
    Par défaut
    Bonsoir,

    Merci beaucoup pour ta réponse détaillée et tes conseils, ça fonctionne parfaitement

    Cordialement,
    HC

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

Discussions similaires

  1. [AC-2000] Création fichier Excel et processus toujours actif
    Par moustika dans le forum VBA Access
    Réponses: 6
    Dernier message: 22/02/2011, 04h18
  2. Réponses: 2
    Dernier message: 14/01/2008, 14h17
  3. Processus EXCEL;exe actif apres fermeture
    Par jamescook dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/10/2007, 11h49
  4. Réponses: 3
    Dernier message: 22/07/2007, 20h26
  5. Tuer un processus Excel dans Access
    Par Jordmund dans le forum Access
    Réponses: 4
    Dernier message: 29/08/2006, 08h59

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