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

Access Discussion :

methode "cells" empêche la libération de range


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut methode "cells" empêche la libération de range
    Bonjour,

    Après avoir beaucoup écumé les forums (en, fr) et galéré pour comprendre pourquoi mon automation Excel (depuis aAcess) ne se fermait pas correctement (instance excel toujours en exécution) voici ce que j'ai trouvé : code ci-dessous

    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
    Private Sub test_fermer_excel_range()
     
    Dim appXl As Excel.Application
    Dim wbXl As Excel.Workbook
    Dim wsXl As Excel.Worksheet
    Dim rgeXl As Excel.Range
    '
    Set appXl = New Excel.Application
     
    'DocXlsOpening "l:\", "test_excel_range.xls", "feuil1" 'procédure d'ouverture d'un doc
     
    appXl.Workbooks.Open ("l:\test_excel_range.xls")
     
    'Set wbXl = appXl.Workbooks.Add
    'Set wsXl = wbXl.ActiveSheet
    Set wsXl = wbXl.Worksheets("feuil1")
    Set rgeXl = wsXl.Range("C2", "D2")
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    'Instruction (équivalente à celle au-dessus en terme de fonctionnalité)
    ' Set rgeXl = wsXl.Range(Cells(2, 3), Cells(2, 4))
    ' l'utilisation de cells empêche la libération ultérieur de l'objet rgeXl (range)
    ' empêche la fermeture "propre" de Excel par une procédure
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    appXl.Visible = True
    rgeXl.Value = "test"
        With rgeXl
                .Font.Bold = True
                .Font.Size = 9
        End With
     
     
    Set rgeXl = Nothing
     
    'DocXlsClose 'procédure de fermeture d'un doc excel et de excel
    Set wsXl = Nothing
    wbXl.SaveAs "test_excel_range"
    wbXl.Close savechanges:=False
     
    Set wbXl = Nothing
    appXl.Quit
    Set appXl = Nothing
     
    End Sub
    Quelqu'un saurait-il pourquoi "cells" provoque ce problème où est-ce un bug ?

    Pour ma part je préfèrerai largement utiliser "cells" plutôt que utiliser les lettres pour les colonnes.

    En vous remerciant pour vos lumières !

    Chetbo

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Personne intéressé à éclaircir cette question ?

    Au plaisir

  3. #3
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Je viens de tester en version 2010.
    Mise à part que ce code ne fonctionne pas, une fois corrigé Excel se ferme correctement.

    Est-ce que c'est tout le code ? pas de chose cachée/supprimée ?
    Système et MS office à jour ?

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour Loufab,

    Le code présenté est une partie de la procédure. Mais reprend fidèlement la portion qui posait problème avec la définition et l'utilisation de "Range".

    La substitution de la méthode "cells" par les coordonnées de la plage ("A1"...) a solutionné le problème. J'ai testé à plusieurs reprises que c'est bien ce détail qui bloquait la fermeture "propre" d'Excel (pas d'instance toujours présente dans le gestionnaire d'appli).

    Je travaille avec Access 2002, 2003 et win 2000 (qui n'intègre peut-être pas toutes les mises à jour mais je ne peux pas forcer l'admin à les faire...).

    Si c'est mon utilisation de "cells" (mauvaise utilisation, implémentation...) qui est à l'origine du pb je suis preneur de conseils avisés.

    Merci

    Chetbo

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Windows 2000 n'est plus maintenu depuis 2010 on peut dire que vous êtes une boite à la pointe...

    ...(qui n'intègre peut-être pas toutes les mises à jour mais je ne peux pas forcer l'admin à les faire...).
    Si ce n'est pas le cas il faut mettre à jour l'admin.

    Sinon j'ai refais le test avec la méthode Cells... le problème se produit bien.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    En regardant de plus près ton code on peut voir 2 choses.

    La première est que tes Cells n'appartiennent à aucun objet déclaré et que tu vides les objets créés avant d'avoir fermer l'application. J'ai tracé le process on s'aperçoit qu'Excel attend un processus pour se fermer.

    Voici le code corrigé.

    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
     
    ...
    Set rgeXl = wsXl.Range(wsXl.Cells(2, 3), wsXl.Cells(2, 4))
    ' l'utilisation de cells empêche la libération ultérieur de l'objet rgeXl (range)
    ' empêche la fermeture "propre" de Excel par une procédure
    '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    appXl.Visible = True
    rgeXl.Value = "test"
        With rgeXl
                .Font.Bold = True
                .Font.Size = 9
        End With
     
    wbXl.Close savechanges:=False 'ou true comme tu veux.
     
    appXl.Quit
    Set appXl = Nothing
    Set rgeXl = Nothing
    Set wsXl = Nothing
    Set wbXl = Nothing
    La libération des objets à la fin (après fermeture d'Excel) y est pour quelque chose. L'attachement du cells à son objet maitre est plus propre.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour Loufab,

    Merci pour ces éclaircissements, je ne savais pas que c'était mieux de libérer les objets après fermeture de l'appli (je pensais que le plus tôt est le mieux).

    Pour l'"adressage" plus propre et clair de cells j'avais essayé mais sans succès.

    Pour win 2000 l'admin de ma boite est fâchée avec l'idée de dépenses dans des outils qui fonctionnent et font déjà ce qu'on leur demande... donc l'informatique n'est pas une priorité.

    Merci encore et à une prochaine ;-)

    Chetbo

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

Discussions similaires

  1. passage d' l'index d'une boucle a une methode : banalisation de quote
    Par sallemel dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 23/01/2012, 12h03

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