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 :
|
Option explicite
sFolder public comme corde
sFilename public () comme corde
NFiles public comme nombre entier
GetFileList secondaire ()
Faible varFileList comme variante
Obscurcir I comme nombre entier
« Obtenir l'annuaire de l'utilisateur »
Avec Application.FileDialog (msoFileDialogFolderPicker)
. Exposition
Si .SelectedItems.Count = 0 sortent alors le sous-marin « utilisateur décommandé »
sFolder = .SelectedItems (1)
Extrémité avec
« Obtenir une liste de tous les dossiers dans cet annuaire. »
« Noter que ce n'est pas récursif… bien qu'il pourrait être… »
varFileList = GetFileNames (sFolder, « *.txt »)
Sinon IsArray (varFileList) puis
MsgBox « aucuns dossiers trouvés. », vbInformation
Sortir le sous-marin
Finir si
« Installer la rangée de nom de fichier basée sur l'annuaire choisi »
NFiles = UBound (varFileList) + 1
sFilename de ReDim (1 à NFiles)
« Copier les noms de fichier dans une rangée de corde pour l'usage ailleurs »
Pour I = 0 à UBound (varFileList)
sFilename (I + 1) = CStr (varFileList (i))
Après i
OutputFilenames2XL
ImportFileContent
Sous-marin d'extrémité
Fonction privée GetFileNames (sPath de ByVal comme corde, sFilter facultatif comme corde) comme variante
« Renvoie une rangée unidimensionnelle avec des noms de fichier »
« Renvoie autrement faux »
Faible f comme corde
Obscurcir I comme nombre entier
Obscurcir FileList () comme corde
Si sFilter = sFilter de "" puis = « *.* »
Choisir le cas Right$ (sPath, 1)
Enfermer « \ », « / »
sPath = Left$ (sPath, Len (sPath) - 1)
Extrémité choisie
Conserve FileList (0) de ReDim
f = Dir$ (sPath et « \ » et sFilter)
Faire tandis que Len (f) > 0
Conserve FileList de ReDim (i) comme corde
FileList (i) = f
i = I + 1
f = Dir$ ()
Boucle
Si FileList (0) <> vident alors
GetFileNames = FileList
Autrement
GetFileNames = faux
Finir si
Finir la fonction
Sous-marin privé OutputFilenames2XL ()
Faible iBaseRow comme nombre entier, iBaseCol comme nombre entier
Faible shTarget comme feuille de travail
Obscurcir I comme nombre entier
Placer le shTarget = l'Application.ActiveSheet
iBaseRow = gamme (« BaseCell »). Rangée
iBaseCol = gamme (« BaseCell »). Colonne
« Peupler les champs d'en-tête »
shTarget.Range (« ImportDate »). Valeur = maintenant
shTarget.Range (« FolderPath »). Valeur = sFolder
shTarget.Range (« NFiles ») = NFiles
« Peupler la colonne de nom de fichier de la table »
Pour I = 1 à NFiles
shTarget.Cells (iBaseRow + I - 1, iBaseCol). Valeur = sFilename (i)
Après i
« Mettre la formule pour analyser l'Id de transaction en la première colonne »
shTarget.Range (cellules (iBaseRow, iBaseCol - 1), cellules (iBaseRow + NFiles - 1, iBaseCol - 1)) .FormulaR1C1 = « =MID (R [0] C [1], LEN (R [0] C [1]) - 14.8) »
Sous-marin d'extrémité
ImportFileContent secondaire privé ()
Obscurcir I comme nombre entier, j comme nombre entier
Obscurcir le shTarget comme feuille de travail
Obscurcir l'iBaseRow comme nombre entier, iBaseCol comme nombre entier
Obscurcir le shSource comme feuille de travail
Obscurcir le sActiveFilename comme corde
Obscurcir le sFullPath comme corde
Obscurcir l'iRowCount comme nombre entier
Obscurcir l'iTargetColumn comme nombre entier
Obscurcir le rSourceRange comme gamme
« Données basses de magasin pour la feuille de travail de cible que nous construisons »
Placer le shTarget = l'Application.ActiveSheet
iBaseRow = gamme (« BaseCell »). Rangée
iBaseCol = gamme (« BaseCell »). Colonne
« Traiter maintenant chaque nom de fichier juste importé vers la feuille de travail »
Application.ScreenUpdating = faux
Application.WindowState = xlMinimized
Application.Calculation = xlCalculationManual
Application.Visible = faux
« Barre de progrès d'installation »
frmProgress de charge
frmProgress.ProgressBar.Max = NFiles
frmProgress.ProgressBar.Value = 0
frmProgress.Show
Pour I = 1 à NFiles
sActiveFilename = sFilename (i)
sFullPath = sFolder et « \ » et sActiveFilename
« Dossier délimité par importation des textes »
Nom de fichier de Workbooks.OpenText : =sFullPath, _
Origine : =437, StartRow : =1, DataType : =xlDelimited, TextQualifier : = _
xlDoubleQuote, ConsecutiveDelimiter : =False, étiquette : =True, point-virgule : =False, _
Virgule : =False, l'espace : =False, autre : =False, FieldInfo : =Array (1, 1), _
TrailingMinusNumbers : =True
« Stocker le nom de feuille et le format/ajoutent des formules exigées »
Placer le shSource = l'Application.ActiveSheet
iRowCount = Application.WorksheetFunction.CountA (colonnes (« A : »))
shSource.Range (cellules (1, 2), cellules (iRowCount, 2)) .FormulaR1C1 = « =FIND ("" : "", R [0] C [- 1]) »
shSource.Range (cellules (1, 3), cellules (iRowCount, 3)) .FormulaR1C1 = « =IF (LAISSÉ (R [0] C [- 2], "" de commentaire de "" 7)=, 61, VALEUR (MI (R [0] C [- 2], 2, R [0] C [- 1] - 2))) »
shSource.Range (cellules (1, 4), cellules (iRowCount, 4)) .FormulaR1C1 = « =RIGHT (R [0] C [- 3], LEN (R [0] C [- 3]) - R [0] C [- 2] - 1) »
« S'assurer que les cellules sont mises à jour avec les données courantes (seulement requises si le calcul est placé au manuel) »
shSource.Calculate
« Copient maintenant les données analysées en résultant dans les cellules correctes sur la feuille de travail de cible »
Pour j = 1 à l'iRowCount
iTargetColumn = CInt (shSource.Cells (j, 3).Value)
Placer le rSourceRange = le shSource.Cells (j, 4)
shTarget.Cells (iBaseRow + I - 1, iBaseCol + iTargetColumn). Valeur = rSourceRange.Value
Prochain j
« Enfin fin le dossier de cahier de travail de source puisque nous sommes finis avec lui »
Cahiers de travail (sActiveFilename). SaveChanges étroit : =False
frmProgress.ProgressBar.Value = I
frmProgress.Repaint
Après i
shTarget.Columns (« C : BK ») .EntireColumn.AutoFit
frmProgress.Hide
Application.Calculation = xlCalculationAutomatic
Application.Calculate
Application.ScreenUpdating = rectifient
Application.WindowState = xlMaximized
Application.Visible = rectifient
Sous-marin d'extrémité
|