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 :
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 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
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
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
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 ?
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
Merci beaucoup de votre aide, je sais pas comment résoudre ce probleme aléatoire...
Merci
Partager