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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| Function FichierXL(MyReq As String, MyCriteres As String)
Dim db As DAO.Database
Dim rstData As DAO.Recordset
Dim rstCriteres As DAO.Recordset
Dim xlApp As Excel.Application
Dim xlSheet As Excel.Worksheet
Dim xlBook As Excel.Workbook
Dim Fichier As String
Dim PrefixeGroupe As String
Dim Pays As String
Dim Sens As String
Dim Ent As String
Dim libelleEnt As String
Dim SQL As String
Dim DerniereLigne As Integer
Set db = CurrentDb
'Set rstData = db.OpenRecordset(MyReq, dbOpenSnapshot)
Set rstCriteres = db.OpenRecordset(MyCriteres, dbOpenSnapshot)
'If rstData.RecordCount < 1 Then 'test si requete vide sinon plantage au rstData.movefirstData
' MsgBox "Pas d'enregistrement répondant aux critères" & Chr(13) & "Le fichier Excel ne sera pas crée", vbInformation, "Aucun enregistrement"
' Set rstData = Nothing
' Set db = Nothing
'Exit Function
' End If
Fichier = MyReq & ".XLS"
rstCriteres.MoveFirst 'on se place au premier enregistrement
'rstData.MoveFirst
Set xlApp = CreateObject("Excel.Application") ' on ouvre l'application Excel en invisible
xlApp.Visible = True
Do
PrefixeGroupe = rstCriteres.Fields(0)
Do '2ème boucle : GROUPE
Set xlBook = xlApp.Workbooks.Add 'on cree un nouveau fichier
Pays = rstCriteres.Fields(1) 'affecte le nomd du champ1 pays à la variable Pays
Do '3ème boucle : PAYS
Ent = rstCriteres.Fields(4) 'affecte le champ 4 a la variable : ENT
Do '4ème boucle : ENT
Set xlSheet = xlBook.Worksheets.Add 'on ajoute un onglet dans excel
Sens = rstCriteres.Fields(3) 'affecte le nom du champ 3 à la variable : soit le sens
xlSheet.Name = Left(rstCriteres.Fields(3) & " " & rstCriteres.Fields(2), 31) ' l'onglet s'appelle comme le libelle entreprise+sens 31 carac
'''''' ecrire le set Rst.data avec requete SQL
''''''''SQL = "SELECT * From " & MyReq
Set rstData = db.OpenRecordset(MyReq, dbOpenSnapshot)
For j = 1 To rstData.Fields.Count - 1 ' on parcourt tous les champs on met le nom en première ligne
xlSheet.Cells(1, j) = rstData.Fields(j - 1).Name
With xlSheet.Cells(1, j) 'quelques mises en forme
.Interior.ColorIndex = 15 'couleur à gris
.Interior.Pattern = xlSolid 'fond de cellule à gris
.HorizontalAlignment = xlCenter 'centrage du titre
End With
Next j
'Copier depuis le recorset rstData filtré..
xlSheet.Cells(2, 1).CopyFromRecordset rstData
xlSheet.Columns("A:E").Select 'Effacement des 5 premières colonnes inutiles
xlSheet.Columns("A:E").Delete
'Ecrire pour faire le total de la colonne T
' Dim DerniereLigne As Integer
DerniereLigne = xlSheet.Range("A1").End(xlDown).Row
xlSheet.Cells(DerniereLigne + 1, "S") = "TOTAL"
xlSheet.Cells(DerniereLigne + 1, "T") = "somme"
rstCriteres.MoveNext
xlSheet.Columns.AutoFit
If rstCriteres.EOF Then Exit Do
Loop While rstCriteres.Fields(4) = Ent '4ème boucle ENT
If rstCriteres.EOF Then Exit Do
Loop While rstCriteres.Fields(1) = Pays And rstCriteres.Fields(0) = PrefixeGroupe '3ème boucle PAYS
xlBook.SaveAs Lec_Param("Chemin") & PrefixeGroupe & " " & Lec_Param("Date") & " " & Pays & " " & Fichier 'enregistrement du fichier chemin contenu dans le paramètre +nom ds la variable
xlBook.Close
If rstCriteres.EOF Then Exit Do
Loop While rstCriteres.Fields(0) = PrefixeGroupe '2d boucle GROUPE
If rstCriteres.EOF Then Exit Do
Loop Until rstCriteres.EOF
MsgBox "Les fichiers ont été crées"
xlApp.Quit
'on libère les instances
Set rstCriteres = Nothing
Set rstData = Nothing
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End Function |
Partager