Bonjour à tous, j'espère que vous allez m'aider car j'ai un beug qui intervient quelque fois et que je ne sais pas comment résoudre. D'ailleurs je n'arrive pas à le reproduire systématiquement, je n'ai pas encore détecter le cas provoquant ce beug.
Vous imaginez bien que je ne suis pas à l'aise car je me dit que ça pourra très bien arriver avec les utilisateurs...

j'ai une base access d'un côté et des fichiers excel de l'autre. Deux fonctionnalitées, l'une est de charger dans Access le contenu des fichiers excel et l'autre d'effectuer un export dans excel du contenu des tables access.

Pour faire simple, j'ai donc deux boutons sur mon formulaire, un bouton chargement access et un bouton export excel.

Pour le chargement, j'ouvre des fichiers excel (plusieurs) je l'ai parcourt et je charge dans Access.

Pour l'export, je crée un fichier excel et je l'alimente a l'aide d'un recordset.

Le beug, c'est que parfois, quand je lance la fonctionnalité de chargement, le fichier a importer s'ouvre mais il y a également un autre fichier excel qui s'ouvre.
cet autre fichier excel s'appelle book1 et contient une ligne dont le contenu se trouve dans la base access. Ensuite ça me demande si je veux enregistrer les changements du fichier book 1 et ça fait planter mon chargement mais je ne sais plus sur quel ligne de code...
Je me doute donc que quelque chose n'est pas ok, et je soupçonne que ce fichier book1 a été crée lors d'un export vers excel...et qui a peut etre été mal fermé..
Je dis ça car le nom de l'onglet est le meme que celui que je nomme dans la fonctionnalité d'export vers excel.

Bon je suis pas un expert, j'ai crée le code en regardant les syntaxe sur ce site.
Je voudrais déja vérifier avec vous que le code est correct, propre et que c'est bien comme ça qu'on travaille avec des fichiers excel.

Procédure de chargement :
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
 
Private Sub CmdChargementActiviteService_Click()
 
    Set xls = FnOuvrirFichierXls(CurrentProject.Path & "\" & RepertoirePA & "\" & NomFichier)
 
    'Activer onglet "projet"
    xls.Sheets("projet").Activate
 
        'Parcourt des activitées
        While xls.Cells(iNumLigne, 3) <> "fin"
 
            'remplir table budget
            SQLInsertion = "INSERT INTO budget (Type, Producteur,Periode, niveauActivite1, niveauActivite2, niveauActivite3, niveauActivite4, Nature, IndicateurVariabilite, TotalJH, Montant, ModeAllocation, CentreSolutionFinanceJH, CentreSolutionFinanceMontant, CentreSolutionRHJH,CentreSolutionRHMontant, CentreSolutionSiègeSupportJH,CentreSolutionSiègeSupportMontant, CentreDeServicesJH,CentreDeServicesMontant, CentreDeProductionJH,CentreDeProductionMontant,  DSICentraleJH, DSICentraleMontant)" _
            & "VALUES ('" & strType & "','" & xls.Cells(NumLigneDebut, 1) & "','" & xls.Cells(NumLigneDebut, 2) & "','" & Replace(xls.Cells(iNumLigne, 3), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 4), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 5), "'", "''") & "','" & Replace(xls.Cells(iNumLigne, 6), "'", "''") & "','" & strNature & "','" & strIndicateurVariabilite & "','" & xls.Cells(iNumLigne, 7) & "'," & iTJMBrut * xls.Cells(iNumLigne, 7) & ",'" & xls.Cells(iNumLigne, 9) & "','" & DestCSFJH & "','" & DestCSFMontant & "','" & DestCSRHJH & "','" & DestCSRHMontant & "','" & DestCSSSJH & "','" & DestCSSSMontant & "','" & DestCSJH & "','" & DestCSMontant & "','" & DestCPJH & "','" & DestCPMontant & "','" & DestDSIJH & "','" & DestDSIMontant & "')"
 
            'MsgBox SQLInsertion
            DoCmd.RunSQL SQLInsertion
 
    Call FnFermerFichierXls(xls)
 
 
'ouverture du fichier des sous activitées
Set xls = FnOuvrirFichierXls(CurrentProject.Path & "\" & RepertoirePlanRH & "\" & FichierPlanRH)
 
xls.Sheets("Sous-activité").Activate
 
SQL ...
    'MsgBox SQLInsertion
    DoCmd.RunSQL SQLInsertion
 
Call FnFermerFichierXls(xls)
 
End Sub
Procédure d'export :
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
 
Private Sub CmdExporterBudget_Click()
 
If IsNull(txtPeriode.Value) = False Then
    SQLBudget = "SELECT * FROM Budget WHERE periode = '" & txtPeriode.Value & "'"
    'MsgBox SQLBudget
End If
 
 
'initialisation des variables
iNumLigneDebut = 2
 
Set rs = CurrentDb.OpenRecordset(SQLBudget)
If rs.RecordCount = 0 Then
    MsgBox "aucun résultat pour la recherche"
    Exit Sub
End If
 
rs.MoveFirst
 
'Fichier déja présent ?
If Dir(CurrentProject.Path & "\Budget.xlsx", vbHidden) <> "" Then
    If MsgBox("Un export a déja été réalisé pour cette période et ce producteur, voulez-vous l'écraser ?", vbYesNo) = vbYes Then
        'Le fichier est il ouvert
        If IsFileOpen(CurrentProject.Path & "\Budget.xlsx") = True Then
            MsgBox "Veuillez fermer le fichier budget puis relancer le traitement"
            Exit Sub
        Else
            'supprimer le fichier
            Kill (CurrentProject.Path & "\Budget.xlsx")
        End If
    Else
        Exit Sub
    End If
End If
 
Workbooks.Add
Sheets("sheet1").Select
Sheets("sheet1").Name = "Budget"
Sheets("budget").Activate
 
'Création entete
Sheets("budget").Cells(1, 1) = "Producteur"
.......
 
While Not rs.EOF
    Sheets("budget").Cells(iNumLigneDebut, 1) = (rs!Producteur)
.......    
    rs.MoveNext
    iNumLigneDebut = iNumLigneDebut + 1
Wend
 
 
ActiveWorkbook.SaveAs FileName:=CurrentProject.Path & "\Budget"
ActiveWorkbook.Close
 
MsgBox "Export terminé"
 
 
end sub
Les procédures ouverture et fermeture d'un fichier excel :
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
 
 
Public Function FnOuvrirFichierXls(CheminFichier As String) As Excel.Application
 
Dim xls As Excel.Application
 
Set xls = CreateObject("Excel.Application")
xls.Workbooks.Open CheminFichier
xls.Visible = True
 
Set FnOuvrirFichierXls = xls
 
End Function
 
 
Public Sub FnFermerFichierXls(ByVal objFichierXls As Excel.Application)
 
objFichierXls.ActiveWorkbook.Save
objFichierXls.Workbooks.Close
objFichierXls.Quit
 
Set objFichierXls = Nothing
 
End Sub
Si vous pouviez déja me dire si la manière dont j'ouvre et je ferme les fichiers excel est correct, et si la manière dont je crée les fichiers excel est correct également ?

Merci beaucoup de votre aide, je sais pas comment résoudre ce probleme aléatoire...

Merci