Problème dans la sauvegarder et fermeture de mon fichier Exc

arthur5c -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

J'ai connecté un Formulaire Access avec un Excel pour transférer des données. Bref, cela fonctionne.
Mais c'est la seconde étape qui pose problème. En effet, j'ai l'impression que dans mon code j'ouvre mon Excel pour insérer les données mais je ne sauvegarde pas et ferme pas le document.

Par conséquent, j'ai comme message d'erreur sur Excel :

"Document verrouillé pour modification par microsoft office user"

Merci d'avance

Code :

chemin = Application.CurrentProject.Path & "\" & nom_chemin & ".xlsm"

Set fenetre = New Excel.Application
Set classeur = fenetre.Workbooks.Open(chemin)

Sheets(nom_lot).Select
Do While Cells(taille_tableau, 1) <> ""
taille_tableau = taille_tableau + 1
Loop

MsgBox (taille_tableau)
numero_lot = taille_tableau - 2
classeur.Sheets(nom_lot).Cells(taille_tableau, 1).Value = numero_lot
classeur.Sheets(nom_lot).Cells(taille_tableau, 3).Value = Budget_Quantite
classeur.Sheets(nom_lot).Cells(taille_tableau, 2).Value = excel_Noms
classeur.Sheets(nom_lot).Cells(taille_tableau, 4).Value = excel_hscode
classeur.Sheets(nom_lot).Cells(taille_tableau, 6).Value = excel_fabricants
classeur.Sheets(nom_lot).Cells(taille_tableau, 7).Value = excel_modeles
classeur.Sheets(nom_lot).Cells(taille_tableau, 8).Value = excel_prix
MsgBox ("Donnée copiée")

fenetre.Application.DisplayAlerts = False
fenetre.Quit

Set fenetre = Nothing
Set classeur = Nothing

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    Peut-être en ajoutant
    call classeur.close()
    ?
    0
  2. Arthur5c
     
    Il prend que :

    Call classeur.close

    Et cela indique une erreur avec la ligne : Automation error
    0
    1. Arthur5c
       
      ( Je suis sur VBA Access )
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Arthur5c
         
        SI tu veux sauver ton classeur:
        Call classeur.Close(True)
        0
  3. arthur5c
     
    Toujours le même message :

    Run-time error '-2147417848 (80010108)':

    Automation error

    Puis pour le debug, il me surlonge la ligne : Call classeur.Close(True)
    0
  4. arthur5c
     
    Option Compare Database
    Option Explicit
    
    Private Sub Commande38_Click()
        Dim requete, requete2 As Recordset
        Dim sql, resultat, excel_Noms, excel_hscode, excel_fabricants, excel_modeles As String
        Dim excel_prix As Currency
        Dim taille_tableau, numero_lot As Integer
        taille_tableau = 2
    
        If Budget_Nom = "" Then
            MsgBox ("Noms du documents de Budgetisation")
        ElseIf Budget_Lot = "" Then
            MsgBox ("Numero de Lots vide")
        ElseIf Choix_ID = "" Then
            MsgBox ("Numero d'ID vide")
        ElseIf Budget_Quantite = "" Then
            MsgBox ("Quantité vide")
        Else
            If MsgBox("Avez-vous fermer votre Excel de Budgetisation ?", vbYesNo, "Fermeture de la Budgetisation") = vbYes Then
                Dim fenetre As Excel.Application, classeur As Excel.Workbook
                Dim chemin As String, recuperation, nom_chemin, nom_lot As String
                
                nom_chemin = Budget_Nom
                    nom_lot = "Lot1"
                
                sql = "SELECT Noms, HScode, Fabricants, Modeles, Prix FROM T_BDD WHERE ID= " & Choix_ID & ";"
                Set requete = CurrentDb.OpenRecordset(sql)
                requete.MoveFirst
                excel_Noms = requete("Noms")
                excel_hscode = requete("HScode")
                excel_fabricants = requete("Fabricants")
                excel_modeles = requete("Modeles")
                excel_prix = requete("Prix")
                
                chemin = Application.CurrentProject.Path & "\" & nom_chemin & ".xlsm"
            
                Set fenetre = New Excel.Application
                Set classeur = fenetre.Workbooks.Open(chemin)
                
                Sheets(nom_lot).Select
                Do While Cells(taille_tableau, 1) <> ""
                    taille_tableau = taille_tableau + 1
                Loop
                
                MsgBox (taille_tableau)
                numero_lot = taille_tableau - 2
                classeur.Sheets(nom_lot).Cells(taille_tableau, 1).Value = numero_lot
                classeur.Sheets(nom_lot).Cells(taille_tableau, 3).Value = Budget_Quantite
                classeur.Sheets(nom_lot).Cells(taille_tableau, 2).Value = excel_Noms
                classeur.Sheets(nom_lot).Cells(taille_tableau, 4).Value = excel_hscode
                classeur.Sheets(nom_lot).Cells(taille_tableau, 6).Value = excel_fabricants
                classeur.Sheets(nom_lot).Cells(taille_tableau, 7).Value = excel_modeles
                classeur.Sheets(nom_lot).Cells(taille_tableau, 8).Value = excel_prix
                MsgBox ("Donnée copiée")
               
                fenetre.Application.DisplayAlerts = False
                fenetre.Quit
                
                Call classeur.Close(True)
                
                Set fenetre = Nothing
                Set classeur = Nothing
                
            End If
        End If
        
        
    End Sub
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      "classeur" est ouvert dans "fenetre", et devient donc inutilisable après la ligne 58.
      0