VBA : Pb fermeture objet Excel depuis VBA Access

Creepy

XLDnaute Accro
Bonjour à toutes & à tous,

Sous VBA Access, je fais un "sort" sur un fichier Excel avec le code suivant :

Code:
Public Sub Tri_XLS(ByVal fichier As String, ByVal montype As Integer)
Dim xlapp As Excel.Application
Dim Xlbook As Excel.Workbook
Set xlapp = New Excel.Application
xlapp.Visible = False
Set Xlbook = xlapp.Workbooks.Open(fichier)
Select Case montype
Case 1 ' 
    Xlbook.ActiveSheet.UsedRange.Sort Key1:=Range("D2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
Case 2 ' 
  Xlbook.ActiveSheet.UsedRange.Sort Key1:=Range("E2"), Order1:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Case Else
End Select
 
Xlbook.Close savechanges:=True
xlapp.Quit
Set Xlbook = Nothing
Set xlapp = Nothing
 
End Sub

J'ai beau tourner le code dans tous les sens, rien n'y fait, je n'arrive pas à fermer la session Excel (toujours présente dans le gestionnaire des tâches).

Par contre si je mets en commentaire les SORT, la session est bien fermée.

J'ai voulu contourner en passant pas un données/convertir, même combat ! Par contre si je fais d'autres opérations pas de souci l'objet Excel est bien fermé.

Avez-vous une idée d'où cela peut venir ?

Merci d'avance, bonne soirée.

Creepy
 

chris

XLDnaute Barbatruc
Re : VBA : Pb fermeture objet Excel depuis VBA Access

Bonjour

Peut-être un problème de timing : le sort prenant trop de temps.

Je crois qu'il y a une possibilité de demander d'attendre un retour de l'autre application.

Ne la connaissant pas, ce que je fait c'est

  • ajouter la création d'un fichier en dernière commande de l'appli (xls dans ton cas) mais tu dois pouvoir tester la date de modif dans ton cas puisque tu enregistres
  • faire une boucle qui teste la présence de ce fichier sur le disque : tu peux toi tester que la date/heure est supérieure à celle du fichier ouvert.
  • tant que ce qui est attendu n'est pas satisfait, le code boucle : cela permet de ne continuer que si l'autre appli a bien fini.
 
C

Compte Supprimé 979

Guest
Re : VBA : Pb fermeture objet Excel depuis VBA Access

Salut Creepy, Chris,

J'ai testé le code chez moi, il fonctionne parfaitement :p

Tu fermes bien les variables objet dans le bon sens,
donc logiquement tu ne devrais pas avoir de soucis :confused:

A+
 

Creepy

XLDnaute Accro
Re : VBA : Pb fermeture objet Excel depuis VBA Access

Bonjour,

Le code fonctionne d'Excel à Excel, mais pas d'Access vers Excel. Je sais que c'est un forum Excel, mais bon on pilote Excel quand même.

En plus je me dis, que quelqu'un a peut être déjà rencontré le problème.

Doublement étrange d'autant plus que je pensais que VBA etait le même pour toutes les applications Office !! ?? !!
Donc si cela marche en VBA Excel cela devrait marcher en VBA Access et Word (tiens je vais faire le test par curiosité).

Merci de vos réponses

Creepy
 
C

Compte Supprimé 979

Guest
Re : VBA : Pb fermeture objet Excel depuis VBA Access

Re,

Désolé, mais j'ai oublié de te préciser que j'ai testé sur Access :rolleyes:

Access me lance bien Excel,
ouvre bien le fichier que j'ai référencé,
fait un tri (bidon pour moi),
referme le fichier,
ferme excel

Donc, chez moi ça fonctionne :D

A+
 
C

Compte Supprimé 979

Guest
Re : VBA : Pb fermeture objet Excel depuis VBA Access

Creepy,

J'ai repensé à ça, j'ai fait une application sous access,
qui ouvre une feuille Excel, la remplie et ferme le tout sans "résidu"

Donc voici mon code à adpater à tes besoins
Code:
Private Sub BnImpFiche_Click()
On Error GoTo Erreur_Proc
  Dim MonFic As String
  ' Initialisation de l'environnement
  MonRep = LireIni("REPERTOIRES", "Base")
  If Right(MonRep, 1) <> "\" Then MonRep = MonRep & "\"
  MonFic = MonRep & "_FicheOuvCLT.xls"
  MaBase = MonRep & NomBase
  Dim xlApp As Object
  Dim wbk As Excel.Workbook
  Dim sht As Excel.Worksheet
  Set xlApp = CreateObject("Excel.Application")
  With xlApp
    .Workbooks.Open (MonFic)
    ' Affiche le document
    .Visible = True
    .CommandBars("Standard").Visible = True
    .CommandBars("Formatting").Visible = True
    ' Instancier la feuille active dans le classeur
    Set sht = .ActiveWorkbook.ActiveSheet
    ' Compléter la feuille excel
    sht.Range("H17").Value = Me.Demandeur
    Select Case Me.CltType
      Case "Particulier"
        sht.Range("B20").Value = "X"
        sht.Range("B21").Value = ""
        sht.Range("B22").Value = ""
      Case "Privé"
        sht.Range("B20").Value = ""
        sht.Range("B21").Value = "X"
        sht.Range("B22").Value = ""
      Case "Public"
        sht.Range("B20").Value = ""
        sht.Range("B21").Value = ""
        sht.Range("B22").Value = "X"
    End Select
    ' Le nom du client
    sht.Range("B25").Value = Nz(Me.CltNom1, "")
    sht.Range("B26").Value = Nz(Me.CltNom2, "")
    ' L'adresse du client
    sht.Range("B27").Value = Nz(Me.CltAdr1, "")
    sht.Range("B28").Value = Nz(Me.CltAdr2, "")
    ' Le code postal + la ville
    sht.Range("B29").Value = Nz(Me.CltCodePTT, "")
    sht.Range("B30").Value = Nz(Me.CltVille, "")
    ' Le télephone + le fax
    sht.Range("B32").Value = Nz(Me.CltTel, "")
    sht.Range("B33").Value = Nz(Me.CltFax, "")
    ' Le numéro de siret
    sht.Range("B35").Value = Nz(Me.CltSiret, "")
    ' Le code APE
    sht.Range("B38").Value = Nz(Me.CltCodeAPE, "")
    ' On sauvegarde le fichier
    .ActiveWorkbook.SaveAs (PathFic & "FOC " & Me.CltNom1 & ".xls")
    If MsgBox("Voulez-vous réellement imprimer la Fiche d'Ouverture Client ?", _
      vbQuestion + vbYesNo, "QUESTION ...") = vbYes Then
      .ActiveWorkbook.PrintOut
    End If
    .ActiveWorkbook.Close
  End With
Exit_Erreur:
  xlApp.Quit
  Set xlApp = Nothing
  Exit Sub
  
Erreur_Proc:
  MsgBox Err.Description & vbCrLf & "Inscription dans fichier 'ErrorLog.txt'"
  LogError Err, Me.Name, "Sub TabRécap_Click()"
  Resume Exit_Erreur
End Sub

Cordialement.
 

Discussions similaires

Réponses
14
Affichages
637

Statistiques des forums

Discussions
312 103
Messages
2 085 316
Membres
102 860
dernier inscrit
fredo67