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
| ' ---------------------------------------------------------
' Procédure d'import des fichiers Excel d'un dossier
' ---------------------------------------------------------
Sub ImportFichiersXL()
Dim sDossier As String, sFichier As String
Dim sNomFichierAImporter As String, sDate As String
Dim sNomTableDestination As String
Dim lgFileCnt As Long, lgImportCnt As Long
' Dossier contenant les fichiers Excel
sDossier = fnDemanderDossier("C:\Users\Desktop\Travaux\FormatPivotAnalyse\FormatPivot")
If Len(sDossier) = 0 Then
MsgBox "Aucun dossier n'a été choisi", vbInformation, "Opération annulée"
End If
sFichier = Dir(sDossier & "\*.xl*", vbNormal)
Do While Len(sFichier) > 0
' Préparer nom table destination
sDate = fnGetYMDFromFileName(sFichier)
If Len(sDate) = 8 Then
sNomTableDestination = "Pivot du " & sDate
Else
lgFileCnt = lgFileCnt + 1
sNomTableDestination = "Pivot (" & Format(Now, "ddmmyyyy") & ") N°" & lgFileCnt
End If
' Supprimer la table si elle existe déjà
If DCount("*", "MSysObjects", "Name='" & sNomTableDestination & "' And [Type]=1") > 0 Then
DoCmd.DeleteObject acTable, sNomTableDestination
End If
' Préparer nom complet du fichier à importer
sNomFichierAImporter = sDossier & "\" & sFichier
' Importer
DoCmd.TransferSpreadsheet acImport, , sNomTableDestination, sNomFichierAImporter, True
lgImportCnt = lgImportCnt + 1
' fichier suivant
sFichier = Dir()
Loop
MsgBox "Nombre de fichier(s) importé(s): " & lgImportCnt, vbInformation
End Sub
' ---------------------------------------------------------
' Fonction qui extrait YYYYMMDD d'un nom de fichier
' et retourne DDMMYYYY ou une chaîne vide ("") en
' cas d'echec.
' ---------------------------------------------------------
Function fnGetYMDFromFileName(sFichier As String) As String
Dim sYMD As String, i As Integer, c As String
Dim sValRetour As String
' Extraire les 8 1ers chiffres en partant de la gauche
' Ils sont censés représenter l'année, le mois, le jour
For i = 1 To Len(sFichier)
c = Mid(sFichier, i, 1)
If c >= "0" And c <= "9" Then
sYMD = sYMD & c
End If
If Len(sYMD) = 8 Then Exit For
Next
If Len(sYMD) = 8 Then
sValRetour = Mid(sYMD, 7, 2) & Mid(sYMD, 5, 2) & Mid(sYMD, 1, 4)
End If
' Retourner valeur
fnGetYMDFromFileName = sValRetour
End Function
' ---------------------------------------------------------
' Fonction pour choisir un dossier
' ---------------------------------------------------------
Function fnDemanderDossier(Optional sInitPath As String = "")
Dim oFDlg As Object, sDossier As String
' Initialisation variable objet oFDlg
' 1=Ouvrir Fichier, 2=Enregistrer. sous..., 4=Choisir dossier
Set oFDlg = Application.FileDialog(4)
' Titre de la boîte de dialogue
oFDlg.Title = "Sélectionner le dossier"
' Dossier de départ
If Len(sInitPath) = 0 Then sInitPath = CurrentProject.Path
If Right(sInitPath, 1) <> "\" Then sInitPath = sInitPath & "\"
oFDlg.InitialFileName = sInitPath
' Sélection multiple = Non
oFDlg.AllowMultiSelect = False
' Affichage de la boîte de dialogue
sDossier = ""
If oFDlg.Show Then
sDossier = oFDlg.SelectedItems(1)
End If
' Libération variable objet
Set oFDlg = Nothing
' Retourner valeur
fnDemanderDossier = sDossier
End Function |