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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
| Option Explicit
Dim NbFichiers As Long
Dim DossierOk As String
Const DossierFichiers = "C:\Faq\Faq Vba\Exemples\Lecture Donnees\FF"
Const NomFeuille As String = "Offre de Prix"
Const TypeFichier As String = "XLS"
Const NomFichierRch = "FF+COXX*"
Sub btnImport_QuandClic()
Dim Debut As Variant
Dim NumeroLigne As Long, i As Long
Dim NomFichier As String
' Par curiosité
Debut = Time()
Application.ScreenUpdating = False
EnteteImport
NomDossierOk
ListeFichiersDans DossierOk
' E14 014 C16 C19 D11 N11 F35 F43
' On démarre le remplissage de ShImport à cette ligne
NumeroLigne = 4
For i = 1 To NbFichiers
NomFichier = ShImport.Range("A" & NumeroLigne)
With ShImport
.Cells(NumeroLigne, 4) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "E14")
.Cells(NumeroLigne, 5) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "O14")
.Cells(NumeroLigne, 6) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "C16")
.Cells(NumeroLigne, 7) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "C19")
.Cells(NumeroLigne, 8) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "D11")
.Cells(NumeroLigne, 9) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "N11")
.Cells(NumeroLigne, 10) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "F35")
.Cells(NumeroLigne, 11) = ExtraireValeur(DossierOk, NomFichier, NomFeuille, "F43")
End With
NumeroLigne = NumeroLigne + 1
Application.StatusBar = "Lecture Données : " & i & " / " & NbFichiers
Next
Application.StatusBar = "Terminé : " & Format((Time() - Debut) * 100000, "0.00")
MepImport
Application.ScreenUpdating = True
End Sub
Sub DispoBoutonsImport()
Dim t As Range
With ShImport
.Activate
.Rows(1).RowHeight = 12.75
.Rows(2).RowHeight = 12.75
Set t = .Cells(1, 3)
With .Buttons("btnImport")
.Left = t.Left + 3
.Top = t.Top + 5
.Width = t.Width - 6
.Height = Rows(1).RowHeight + Rows(2).RowHeight - 8
End With
End With
End Sub
Private Sub EnteteImport()
With ShImport
' Tout effacer
.Cells.Clear
.Range("A3") = "Fichier"
' A tout hasard cela peut être interessant
' d'avoir ces infos sur les fichiers
.Range("B3") = "Date de Création"
.Range("C3") = "Date Dernière Modification"
' E14 014 C16 C19 D11 N11 F35 F43
.Range("D3") = "Devis"
.Range("E3") = "Date"
.Range("F3") = "Société"
.Range("G3") = "Ville"
.Range("H3") = "Destinataire"
.Range("I3") = "Téléphone"
.Range("J3") = "Total HT"
.Range("K3") = "Condition Règlement"
End With
End Sub
Private Function ExtraireValeur(ByVal Dossier As String, ByVal fichier As String, _
ByVal feuille As String, ByVal Cellule As String)
Dim Argument As String
Dim Pos As Integer
Pos = InStr(Dossier, "'")
If Pos > 0 Then Dossier = Replace(Dossier, "'", "''")
Pos = InStr(fichier, "'")
If Pos > 0 Then fichier = Replace(fichier, "'", "''")
Argument = "'" & Dossier & "[" & fichier & "]" & feuille & "'!" & Range(Cellule).Address(, , xlR1C1)
ExtraireValeur = ExecuteExcel4Macro(Argument)
End Function
Private Sub ListeFichiersDans(ByVal NomDossierSource As String)
Dim FSO As Object
Dim DossierSource As Object
Dim fichier As Object
Dim r As Long, VerifNom As Boolean
Dim Extension As String
On Error GoTo erreurs
Set FSO = CreateObject("Scripting.FileSystemObject")
Set DossierSource = FSO.GetFolder(NomDossierSource)
Application.StatusBar = ""
NbFichiers = 0
r = ShImport.Range("A" & Rows.Count).End(xlUp).Row + 1
For Each fichier In DossierSource.Files
Extension = UCase$(FSO.GetExtensionName(fichier))
If fichier.Name <> ThisWorkbook.Name Then
VerifNom = fichier.Name Like NomFichierRch
If VerifNom Then
If Extension = UCase(TypeFichier) Then
With ShImport
.Cells(r, 1) = fichier.Name
.Cells(r, 2) = fichier.DateCreated
.Cells(r, 3) = fichier.DateLastModified
End With
NbFichiers = NbFichiers + 1
r = r + 1
Application.StatusBar = "Lecture Noms Dates création et modification fichiers : " & r
End If
End If
End If
Next fichier
' Nommer la zone contenant les données pour faciliter un tri éventuel
ActiveWorkbook.Names.Add Name:="Zone_de_Tri", RefersToR1C1:="=Import!R4C1:R" & (NbFichiers + 3) & "C11"
Set fichier = Nothing
Set DossierSource = Nothing
Set FSO = Nothing
Exit Sub
erreurs:
If Err.Number = 76 Then
MsgBox "Dossier inexistant" & vbCrLf & "Modifier dans VBA le chemin" & vbCrLf & "Const Dossier = " & DossierFichiers & " en conséquence", vbOKOnly, "Dossier des Fichiers"
End If
End Sub
Private Sub MepImport()
With ActiveWindow
.ScrollRow = 1
.ScrollColumn = 1
End With
With ShImport
.Rows("3:3").Font.Bold = True
.Columns("B:C").Select
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
With ShImport
.Columns("E:E").NumberFormat = "dd/mm/yyyy"
.Columns("A:K").Columns.AutoFit
.Range("A1").Select
End With
DispoBoutonsImport
End Sub
Private Sub NomDossierOk()
DossierOk = DossierFichiers
If Right$(DossierOk, 1) <> "\" Then DossierOk = DossierOk & "\"
End Sub |
Partager