Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/08/2011, 14h12   #1
Invité de passage
 
Homme olivier
Ingénieur qualité méthodes
Inscription : juillet 2011
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme olivier

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 27
Points : 1
Points : 1
Par défaut Copie de code

Bonjour à tous,

Voilà ma problèmatique, je désire copier puis coller les lignes de 1 à 96 de mon code

Code :
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
 
Sub un()
 
 
'1)CT01
 
Dim Sh As Worksheet
Dim i As Integer
Dim Rep As String
Dim Res
 
Application.ScreenUpdating = False
Rep = "Z:\Config\Bureau\Apres traitement\CT01"                                                     'Ton répéeroire
Res = ListFichiers(Rep)
Set Sh = ThisWorkbook.Worksheets("feuille")                                                        'La feuille de destination
For i = 1 To UBound(Res)
    Call Transfert(Rep & "\" & Res(i), Sh)
Next i
Set Sh = Nothing
End Sub
Sub Transfert(ByVal FichierCSV As String, Ws As Worksheet)
Dim Wb As Workbook
Dim LastLig As Long, NewLig As Long
 
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
    .Range("H4:H" & LastLig).Copy Ws.Range("Z" & NewLig)
    .Range("E4:E" & LastLig).Copy Ws.Range("Y" & NewLig)
    .Range("L4:L" & LastLig).Copy Ws.Range("AA" & NewLig)
    .Range("O4:O" & LastLig).Copy Ws.Range("AB" & NewLig)
    '...etc
    '..Report des autres colonnes
    '...etc
    Ws.Range("A:A").NumberFormat = "[$-F400]h:mm:ss AM/PM"
End With
Wb.Close False
Set Wb = Nothing
End Sub
 
 
'Lister les fichiers triées
Function ListFichiers(ByVal Chemin As String) As String()
Dim i As Integer
Dim Fichier As String, Tb() As String
 
Fichier = Dir(Chemin & "\*.csv")
Do While Fichier <> ""
    i = i + 1
    ReDim Preserve Tb(1 To i)
    Tb(i) = Fichier
    Fichier = Dir
Loop
 
If i > 0 Then Quicksort Tb, 1, i
ListFichiers = Tb
End Function
'Sub de tri rapide
Sub Quicksort(T() As String, ByVal LoBound As Long, ByVal UpBound As Long)
Dim Hi As Integer, Lo As Integer, i As Integer
Dim Med As String
 
If LoBound >= UpBound Then Exit Sub
i = Int((UpBound - LoBound + 1) * Rnd + LoBound)
Med = T(i)
T(i) = T(LoBound)
Lo = LoBound
Hi = UpBound
Do
    Do While T(Hi) >= Med
        Hi = Hi - 1
        If Hi <= Lo Then Exit Do
    Loop
    If Hi <= Lo Then
        T(Lo) = Med
        Exit Do
    End If
    T(Lo) = T(Hi)
    Lo = Lo + 1
    Do While T(Lo) < Med
        Lo = Lo + 1
        If Lo >= Hi Then Exit Do
    Loop
    If Lo >= Hi Then
        Lo = Hi
        T(Hi) = Med
        Exit Do
    End If
    T(Hi) = T(Lo)
Loop
Quicksort T(), LoBound, Lo - 1
Quicksort T(), Lo + 1, UpBound
End Sub
 
'2)CT03
'Création d'une sous directory CT03bis
Sub deux()
MkDir "Z:\Config\Bureau\Apres traitement\CT03bis"
End Sub
 
'Déplacer les fichiers dans CT03bis
Sub trois()
 
Dim Fso As Object
Dim FsoRepertoire As Object
Dim FsoFichier As Object
 
Dim strRepertoire As String
 
strRepertoire = ThisWorkbook.Path
 
Set Fso = CreateObject("Scripting.FileSystemObject")
Set FsoRepertoire = Fso.GetFolder(ThisWorkbook.Path & "\CT03")
 
'Boucle sur fichiers du repertoire
For Each FsoFichier In FsoRepertoire.Files
  If Left$(FsoFichier.Name, 10) = "CT3__T1A-7" Then
    FsoFichier.Copy strRepertoire & "\CT03\" & FsoFichier.Name, True
    FsoFichier.Move strRepertoire & "\CT03bis\" & FsoFichier.Name
  End If
Next
 
 
 
End Sub
à la fin de celui ci afin de coller d'aures colonnes mais ca ne fonctionne pas, quelqu'un peut il m'aider ?


Code :
1
2
3
4
5
6
7
8
9
10
11
 
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("E4:E" & LastLig).Copy Ws.Range("AI" & NewLig)
    .Range("H4:H" & LastLig).Copy Ws.Range("AJ" & NewLig)
    .Range("L4:L" & LastLig).Copy Ws.Range("AK" & NewLig)
    .Range("O4:O" & LastLig).Copy Ws.Range("AL" & NewLig)
    .Range("S4:S" & LastLig).Copy Ws.Range("AM" & NewLig)
    .Range("V4:V" & LastLig).Copy Ws.Range("AN" & NewLig)
    '...etc
Cordialement

Olivier
olive59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 14h31   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par olive59 Voir le message
...
Voilà ma problèmatique, je désire copier puis coller les lignes de 1 à 96 de mon code
(...)
à la fin de celui ci afin de coller d'aures colonnes mais ca ne fonctionne pas, quelqu'un peut il m'aider ?
(...)
ben pour copier des lignes tu sélectionne tes lignes 1 à 96 puis tu actionne les touches CTRL+C ... tu vas à la fin de ton code avec la touche FIN et tu colle avec CTRL+V ...
cela devrai fonctionner..



si c'est autre chose que tu veux faire et qui fonctionne pas essai d'être plus clair ..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 15h21   #3
Invité de passage
 
Homme olivier
Ingénieur qualité méthodes
Inscription : juillet 2011
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme olivier

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 27
Points : 1
Points : 1
Par défaut Variables

Rebonjour,

Lorsque je copie puis colle le morceau de code à la fin, cela donne cela :

Code :
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
 
 
Sub un()
 
 
'1)CT01
 
Dim Sh As Worksheet
Dim i As Integer
Dim Rep As String
Dim Res
 
Application.ScreenUpdating = False
Rep = "Z:\Config\Bureau\Apres traitement\CT01"                                                     'Ton répéeroire
Res = ListFichiers(Rep)
Set Sh = ThisWorkbook.Worksheets("feuille")                                                        'La feuille de destination
For i = 1 To UBound(Res)
    Call Transfert(Rep & "\" & Res(i), Sh)
Next i
Set Sh = Nothing
End Sub
Sub Transfert(ByVal FichierCSV As String, Ws As Worksheet)
Dim Wb As Workbook
Dim LastLig As Long, NewLig As Long
 
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
    .Range("H4:H" & LastLig).Copy Ws.Range("Z" & NewLig)
    .Range("E4:E" & LastLig).Copy Ws.Range("Y" & NewLig)
    .Range("L4:L" & LastLig).Copy Ws.Range("AA" & NewLig)
    .Range("O4:O" & LastLig).Copy Ws.Range("AB" & NewLig)
    '...etc
    '..Report des autres colonnes
    '...etc
    Ws.Range("A:A").NumberFormat = "[$-F400]h:mm:ss AM/PM"
End With
Wb.Close False
Set Wb = Nothing
End Sub
 
 
'Lister les fichiers triées
Function ListFichiers(ByVal Chemin As String) As String()
Dim i As Integer
Dim Fichier As String, Tb() As String
 
Fichier = Dir(Chemin & "\*.csv")
Do While Fichier <> ""
    i = i + 1
    ReDim Preserve Tb(1 To i)
    Tb(i) = Fichier
    Fichier = Dir
Loop
 
If i > 0 Then Quicksort Tb, 1, i
ListFichiers = Tb
End Function
'Sub de tri rapide
Sub Quicksort(T() As String, ByVal LoBound As Long, ByVal UpBound As Long)
Dim Hi As Integer, Lo As Integer, i As Integer
Dim Med As String
 
If LoBound >= UpBound Then Exit Sub
i = Int((UpBound - LoBound + 1) * Rnd + LoBound)
Med = T(i)
T(i) = T(LoBound)
Lo = LoBound
Hi = UpBound
Do
    Do While T(Hi) >= Med
        Hi = Hi - 1
        If Hi <= Lo Then Exit Do
    Loop
    If Hi <= Lo Then
        T(Lo) = Med
        Exit Do
    End If
    T(Lo) = T(Hi)
    Lo = Lo + 1
    Do While T(Lo) < Med
        Lo = Lo + 1
        If Lo >= Hi Then Exit Do
    Loop
    If Lo >= Hi Then
        Lo = Hi
        T(Hi) = Med
        Exit Do
    End If
    T(Hi) = T(Lo)
Loop
Quicksort T(), LoBound, Lo - 1
Quicksort T(), Lo + 1, UpBound
End Sub
 
'2)CT03
'Création d'une sous directory CT03bis
Sub deux()
MkDir "Z:\Config\Bureau\Apres traitement\CT03bis"
End Sub
 
'Déplacer les fichiers dans CT03bis
Sub trois()
 
Dim Fso As Object
Dim FsoRepertoire As Object
Dim FsoFichier As Object
 
Dim strRepertoire As String
 
strRepertoire = ThisWorkbook.Path
 
Set Fso = CreateObject("Scripting.FileSystemObject")
Set FsoRepertoire = Fso.GetFolder(ThisWorkbook.Path & "\CT03")
 
'Boucle sur fichiers du repertoire
For Each FsoFichier In FsoRepertoire.Files
  If Left$(FsoFichier.Name, 10) = "CT3__T1A-7" Then
    FsoFichier.Copy strRepertoire & "\CT03\" & FsoFichier.Name, True
    FsoFichier.Move strRepertoire & "\CT03bis\" & FsoFichier.Name
  End If
Next
 
End Sub
 
 
 
 
Sub quatre()
Dim Sh As Worksheet
Dim i As Integer
Dim Rep As String
Dim Res
'(reste du code) 'coller les colonnes sur fichier excel
 
Application.ScreenUpdating = False
Rep = "Z:\Config\Bureau\Apres traitement\CT03"                                                     'Ton répéeroire
Res = ListFichiers(Rep)
Set Sh = ThisWorkbook.Worksheets("feuille")                                                        'La feuille de destination
For i = 1 To UBound(Res)
    Call Transfert(Rep & "\" & Res(i), Sh)
Next i
Set Sh = Nothing
End Sub
Sub Transfert(ByVal FichierCSV As String, Ws As Worksheet)
Dim Wb As Workbook
Dim LastLig As Long, NewLig As Long
 
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("E4:E" & LastLig).Copy Ws.Range("AI" & NewLig)
    .Range("H4:H" & LastLig).Copy Ws.Range("AJ" & NewLig)
    .Range("L4:L" & LastLig).Copy Ws.Range("AK" & NewLig)
    .Range("O4:O" & LastLig).Copy Ws.Range("AL" & NewLig)
    .Range("S4:S" & LastLig).Copy Ws.Range("AM" & NewLig)
    .Range("V4:V" & LastLig).Copy Ws.Range("AN" & NewLig)
    '...etc
    '..Report des autres colonnes
    '...etc
    Ws.Range("A:A").NumberFormat = "[$-F400]h:mm:ss AM/PM"
End With
Wb.Close False
Set Wb = Nothing
End Sub
 
 
'Lister les fichiers triées
Function ListFichiers(ByVal Chemin As String) As String()
Dim i As Integer
Dim Fichier As String, Tb() As String
 
Fichier = Dir(Chemin & "\*.csv")
Do While Fichier <> ""
    i = i + 1
    ReDim Preserve Tb(1 To i)
    Tb(i) = Fichier
    Fichier = Dir
Loop
 
If i > 0 Then Quicksort Tb, 1, i
ListFichiers = Tb
End Function
'Sub de tri rapide
Sub Quicksort(T() As String, ByVal LoBound As Long, ByVal UpBound As Long)
Dim Hi As Integer, Lo As Integer, i As Integer
Dim Med As String
 
If LoBound >= UpBound Then Exit Sub
i = Int((UpBound - LoBound + 1) * Rnd + LoBound)
Med = T(i)
T(i) = T(LoBound)
Lo = LoBound
Hi = UpBound
Do
    Do While T(Hi) >= Med
        Hi = Hi - 1
        If Hi <= Lo Then Exit Do
    Loop
    If Hi <= Lo Then
        T(Lo) = Med
        Exit Do
    End If
    T(Lo) = T(Hi)
    Lo = Lo + 1
    Do While T(Lo) < Med
        Lo = Lo + 1
        If Lo >= Hi Then Exit Do
    Loop
    If Lo >= Hi Then
        Lo = Hi
        T(Hi) = Med
        Exit Do
    End If
    T(Hi) = T(Lo)
Loop
Quicksort T(), LoBound, Lo - 1
Quicksort T(), Lo + 1, UpBound
End Sub
Il me donne des erreurs :
-Erreur de complilation : nom ambigu détecté : Transfert
-Erreur de complilation : nom ambigu détecté : ListFichiers
-Erreur de complilation : nom ambigu détecté : Quicksort
-Erreur de compilation : numéro de ligne ou étiquette ou instruction ou fin d'instruction
et cela continue...
Le premier code fonctionne bien mais la copie de ce code ne fonctionne pas, qu'en penses tu ?

Cordialement

Olivier
olive59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 15h32   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Tu ne peu pas bêtement copier tout ton code pour le doubler. ..!!

il faut d'abord que tu comprenne ton code ...

par exemple pourquoi copier la fonction listeFichier ? que doit-elle faire de différent dans ton 2° code par rapport au 1° ....
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 16h10   #5
Invité de passage
 
Homme olivier
Ingénieur qualité méthodes
Inscription : juillet 2011
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme olivier

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 27
Points : 1
Points : 1
Par défaut Variables

Oui, tu as raison, il faut sûrement comprendre le code mais pour ma part je ne suis pas informaticien et c'est donc quelqu'un de fort sympa qui m'a fait ce code et je n'ai pas trop de temps car ceci fait partie de mon stage et je suis à la bourre. Je me suis rendu compte qu'il y a plusieurs types de variables sur VB et je pense qu'il faut que je les détailles mieux, qu'en penses tu ?

Cordialement

Olivier
olive59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 11h47   #6
Invité de passage
 
Homme olivier
Ingénieur qualité méthodes
Inscription : juillet 2011
Messages : 27
Détails du profil
Informations personnelles :
Nom : Homme olivier

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : juillet 2011
Messages : 27
Points : 1
Points : 1
Par défaut Définition des variables

Bonjour,

Voici ce que vous demande, étant novice en visual basic. Une personne de ce forum, fort sympathique, m'a crée une partie de ce code ligne 1 à 96, code qui copie sur un fichier excel des colonnes de fichiers .csv, ceci fonctionne trés bien.
Je désirerai refaire la même chose avec d'autres fichiers .csv alors j'ai fais un copier/coller (1-96 / 131-223) mais ca ne fonctionne pas alors en me disant que cela devait peut être être du à un problème de variables, j'ai renommé toutes les variables en rajoutant un "a" à la fin de toutes, ça ne fonctionne toujours pas et je ne sais pas d'ou vient l'erreur, quelqu'un pourrait-il m'aider ?

Cordialement

Olivier


Code :
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
 
Sub un()
 
 
'1)CT01
 
Dim Sh As Worksheet
Dim i As Integer
Dim Rep As String
Dim Res
 
Application.ScreenUpdating = False
Rep = "Z:\Config\Bureau\Apres traitement\CT01"                                                     'Ton répéeroire
Res = ListFichiers(Rep)
Set Sh = ThisWorkbook.Worksheets("feuille")                                                        'La feuille de destination
For i = 1 To UBound(Res)
    Call Transfert(Rep & "\" & Res(i), Sh)
Next i
Set Sh = Nothing
End Sub
Sub Transfert(ByVal FichierCSV As String, Ws As Worksheet)
Dim Wb As Workbook
Dim LastLig As Long, NewLig As Long
 
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
    .Range("H4:H" & LastLig).Copy Ws.Range("Z" & NewLig)
    .Range("E4:E" & LastLig).Copy Ws.Range("Y" & NewLig)
    .Range("L4:L" & LastLig).Copy Ws.Range("AA" & NewLig)
    .Range("O4:O" & LastLig).Copy Ws.Range("AB" & NewLig)
    '...etc
    '..Report des autres colonnes
    '...etc
    Ws.Range("A:A").NumberFormat = "[$-F400]h:mm:ss AM/PM"
End With
Wb.Close False
Set Wb = Nothing
End Sub
 
 
'Lister les fichiers triées
Function ListFichiers(ByVal Chemin As String) As String()
Dim i As Integer
Dim Fichier As String, Tb() As String
 
Fichier = Dir(Chemin & "\*.csv")
Do While Fichier <> ""
    i = i + 1
    ReDim Preserve Tb(1 To i)
    Tb(i) = Fichier
    Fichier = Dir
Loop
 
If i > 0 Then Quicksort Tb, 1, i
ListFichiers = Tb
End Function
'Sub de tri rapide
Sub Quicksort(T() As String, ByVal LoBound As Long, ByVal UpBound As Long)
Dim Hi As Integer, Lo As Integer, i As Integer
Dim Med As String
 
If LoBound >= UpBound Then Exit Sub
i = Int((UpBound - LoBound + 1) * Rnd + LoBound)
Med = T(i)
T(i) = T(LoBound)
Lo = LoBound
Hi = UpBound
Do
    Do While T(Hi) >= Med
        Hi = Hi - 1
        If Hi <= Lo Then Exit Do
    Loop
    If Hi <= Lo Then
        T(Lo) = Med
        Exit Do
    End If
    T(Lo) = T(Hi)
    Lo = Lo + 1
    Do While T(Lo) < Med
        Lo = Lo + 1
        If Lo >= Hi Then Exit Do
    Loop
    If Lo >= Hi Then
        Lo = Hi
        T(Hi) = Med
        Exit Do
    End If
    T(Hi) = T(Lo)
Loop
Quicksort T(), LoBound, Lo - 1
Quicksort T(), Lo + 1, UpBound
End Sub
 
'2)CT03
'Création d'une sous directory CT03bis
Sub deux()
MkDir "Z:\Config\Bureau\Apres traitement\CT03bis"
End Sub
 
'Déplacer les fichiers dans CT03bis
Sub trois()
 
Dim Fso As Object
Dim FsoRepertoire As Object
Dim FsoFichier As Object
 
Dim strRepertoire As String
 
strRepertoire = ThisWorkbook.Path
 
Set Fso = CreateObject("Scripting.FileSystemObject")
Set FsoRepertoire = Fso.GetFolder(ThisWorkbook.Path & "\CT03")
 
'Boucle sur fichiers du repertoire
For Each FsoFichier In FsoRepertoire.Files
  If Left$(FsoFichier.Name, 10) = "CT3__T1A-7" Then
    FsoFichier.Copy strRepertoire & "\CT03\" & FsoFichier.Name, True
    FsoFichier.Move strRepertoire & "\CT03bis\" & FsoFichier.Name
  End If
Next
 
 
 
End Sub
 
 
Public Sub MacroPrincipale()
Dim Sha As Worksheet
Dim X As Integer
Dim Repa As String
Dim Resa
'(reste du code) 'coller les colonnes sur fichier excel
 
 
Application.ScreenUpdating = False
Repa = "Z:\Config\Bureau\Apres traitement\CT03"                                                     'Ton répéeroire
Resa = ListFichiersa(Repa)
Set Sha = ThisWorkbook.Worksheets("feuille")                                                        'La feuille de destination
For X = 1 To UBound(Resa)
    Call Transferta(Repa & "\" & Resa(X), Sha)
Next X
Set Sha = Nothing
End Sub
Sub Transferta(ByVal FichierCSV As String, Wsa As Worksheet)
Dim Wba As Workbook
Dim LastLiga As Long, NewLiga As Long
 
Application.ScreenUpdating = False
Set Wba = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wba.Worksheets(1)
    LastLiga = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLiga = Wsa.Cells(Wsa.Rows.Count, "A").End(xlUp).Row + 1
    .Range("E4:E" & LastLiga).Copy Wsa.Range("AI" & NewLiga)
    .Range("H4:H" & LastLiga).Copy Wsa.Range("AJ" & NewLiga)
    .Range("L4:L" & LastLiga).Copy Wsa.Range("AK" & NewLiga)
    .Range("O4:O" & LastLiga).Copy Wsa.Range("AL" & NewLiga)
    .Range("S4:S" & LastLiga).Copy Wsa.Range("AM" & NewLiga)
    .Range("V4:V" & LastLiga).Copy Wsa.Range("AN" & NewLiga)
    '...etc
    '..Report des autres colonnes
    '...etc
   End With
Wba.Close False
Set Wba = Nothing
End Sub
 
 
'Lister les fichiers triées
Function ListFichiersa(ByVal Chemina As String) As String()
Dim X As Integer
Dim Fichiera As String, Tba() As String
 
Fichiera = Dir(Chemina & "\*.csv")
Do While Fichiera <> ""
    X = X + 1
    ReDim Preserve Tba(1 To X)
    Tba(X) = Fichiera
    Fichiera = Dir
Loop
 
If X > 0 Then Quicksorta Tba, 1, X
ListFichiersa = Tba
End Function
'Sub de tri rapide
Sub Quicksorta(A() As String, ByVal LoBounda As Long, ByVal UpBounda As Long)
Dim Hia As Integer, Loa As Integer, X As Integer
Dim Meda As String
 
If LoBounda >= UpBounda Then Exit Sub
X = Int((UpBounda - LoBounda + 1) * Rnd + LoBounda)
Meda = A(X)
A(X) = A(LoBounda)
Loa = LoBounda
Hia = UpBounda
Do
    Do While A(Hia) >= Meda
        Hia = Hia - 1
        If Hia <= Loa Then Exit Do
    Loop
    If Hia <= Loa Then
        A(Loa) = Meda
        Exit Do
    End If
    A(Loa) = A(Hia)
    Loa = Loa + 1
    Do While A(Loa) < Meda
        Loa = Loa + 1
        If Loa >= Hia Then Exit Do
    Loop
    If Loa >= Hia Then
        Loa = Hia
        A(Hia) = Meda
        Exit Do
    End If
    A(Hia) = A(Loa)
Loop
Quicksorta A(), LoBounda, Loa - 1
Quicksorta A(), Loa + 1, UpBounda
End Sub
olive59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 15h16   #7
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu...!

bonjour
tu precise que "ws" est un workseet ok

mais en aucun cas tu precise le quel??

donc quand tu dis :
Code :
.Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
"ws" a pour valeur rien du tout


Citation:
Code :
1
2
3
4
5
6
7
8
9
10
Sub Transfert(ByVal FichierCSV As String, Ws As Worksheet)
Dim Wb As Workbook
Dim LastLig As Long, NewLig As Long
 
Application.ScreenUpdating = False
Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
With Wb.Worksheets(1)
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
    .Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 21h00   #8
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
Citation:
Envoyé par olive59 Voir le message
Oui, tu as raison, il faut sûrement comprendre le code mais pour ma part je ne suis pas informaticien et c'est donc quelqu'un de fort sympa qui m'a fait ce code et je n'ai pas trop de temps car ceci fait partie de mon stage et je suis à la bourre.
Bonjour,

Je suis toujours fort perplexe (et c'est un euphémisme) face à ce genre de demande.

Si ton maître de stage te demande de faire une livraison avec un 38 tonnes alors que tu n'as pas le permis poids lourd, tu le fais?
Tu comptes sur les autres chauffeurs pour t'aider, par CB, à choisir les bonnes vitesses en fonction de la charge et de la pente?

Je ne conçois pas qu'on puisse se mettre à programmer, dans un cadre professionnel, sans avoir, au minimum, les bases.

Pour moi, dans ton cas, il n'y a que 2 options:
Soit tu étudies le VBA pour réaliser ce que tu veux faire (et on pourra t'aider si tu coinces).
Soit tu dis que tu n'as pas les compétences pour faire ce qui t'est demandé.

Copier du code sans le comprendre est la pire chose qu'on puisse faire.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 19/08/2011, 21h51   #9
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu

bonsoir

Citation:
je n'ai pas trop de temps car ceci fait partie de mon stage et je suis à la bourre.

il est sur que si on a donné ce boulot a faire il y a ohhh 3 mois c'est sur tu es a la bourre

avec un peu de volonté et beaucoup d'observation ainsi que la lecture de la faq pour debuter ici meme j'ai mis deux semaines a faire mes propres fonctions de base et pourtant 2 semaine avant je savais tout juste récupérer mes email avec beaucoup de difficultés dans ma boite mail

tu devrais ty mettre toute de suite si tu veux un resultat rapide

bon courage

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 09h24   #10
Membre Expert
 
Homme Hervé Silve
Inscription : août 2010
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme Hervé Silve
Localisation : France

Informations forums :
Inscription : août 2010
Messages : 773
Points : 2 093
Points : 2 093
Bonjour à toutes et tous,

Là Olivier, il est vrai que tu t'es lancé dans un truc que tu ne maîtrise pas du tout mais bon c'est comme ça qu'on apprend aussi (en galérant)
La fonction 'ListFichiers' et les Sub 'Quicksort' et 'Transfert' reçoivent des valeurs passées en arguments donc, pas la peine de les doubler, il te suffit de leurs passer d'autres valeurs. Si tu veux travailler sur plusieurs répertoires, il te suffit de construire un tableau (un Array) avec le chemin de ces répertoires. Dans ton code j'ai rajouter le second dossier que tu veux traiter et si il y en a d'autres, il te suffit de les rajouter à la suite (Attention, je n'ai rien testé !!!) :
Code :
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
 
Sub un()
 
    '1)CT01
 
    Dim Sh As Worksheet
    Dim I As Integer
    Dim J As Integer
    Dim Rep 'tableau des répertoires
    Dim Res 'tableau des fichiers
 
    'gèle la mise à jour de l'écran
    Application.ScreenUpdating = False
 
    'ICI, ajoute les répertoires que tu veux traiter
    'Tes répertoires dans un tableau
    Rep = Array("Z:\Config\Bureau\Apres traitement\CT01", _
                "Z:\Config\Bureau\Apres traitement\CT03")
 
    For J = 0 To UBound(Rep)
 
        'fichiers du répertoire en cours
        Res = ListFichiers(Rep(J))
 
        'La feuille de destination (le nom de la feuille est-il bien "feuille" ?)
        Set Sh = ThisWorkbook.Worksheets("feuille")
 
        For I = 1 To UBound(Res)
            Call Transfert(Rep(J) & "\" & Res(I), Sh)
        Next I
 
    Next J
 
    'même si Excel le fait tout seul, il est mieux de le rétablir manuellement
    Application.ScreenUpdating = True
 
    Set Sh = Nothing
 
End Sub
Sub Transfert(ByVal FichierCSV As String, _
              Ws As Worksheet)
 
    Dim Wb As Workbook
    Dim LastLig As Long
    Dim NewLig As Long
 
    Set Wb = Workbooks.Open(Filename:=FichierCSV, local:=True)
 
    With Wb.Worksheets(1)
 
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        NewLig = Ws.Cells(Ws.Rows.Count, "A").End(xlUp).Row + 1
        .Range("A4:A" & LastLig).Copy Ws.Range("A" & NewLig)
        .Range("H4:H" & LastLig).Copy Ws.Range("Z" & NewLig)
        .Range("E4:E" & LastLig).Copy Ws.Range("Y" & NewLig)
        .Range("L4:L" & LastLig).Copy Ws.Range("AA" & NewLig)
        .Range("O4:O" & LastLig).Copy Ws.Range("AB" & NewLig)
        '...etc
        '..Report des autres colonnes
        '...etc
        Ws.Range("A:A").NumberFormat = "[$-F400]h:mm:ss AM/PM"
 
    End With
 
    Wb.Close False
 
    Set Wb = Nothing
 
End Sub
 
 
'Lister les fichiers triées
Function ListFichiers(ByVal Chemin As String) As String()
 
    Dim I As Integer
    Dim Fichier As String
    Dim Tb() As String
 
    Fichier = Dir(Chemin & "\*.csv")
 
    Do While Fichier <> ""
 
        I = I + 1
        ReDim Preserve Tb(1 To I)
        Tb(I) = Fichier
        Fichier = Dir
 
    Loop
 
    If I > 0 Then Quicksort Tb, 1, I
 
    ListFichiers = Tb
 
End Function
 
'Sub de tri rapide
Sub Quicksort(T() As String, _
              ByVal LoBound As Long, _
              ByVal UpBound As Long)
 
    Dim Hi As Integer
    Dim Lo As Integer
    Dim I As Integer
    Dim Med As String
 
    If LoBound >= UpBound Then Exit Sub
 
    I = Int((UpBound - LoBound + 1) * Rnd + LoBound)
    Med = T(I)
    T(I) = T(LoBound)
    Lo = LoBound
    Hi = UpBound
 
    Do
 
        Do While T(Hi) >= Med
            Hi = Hi - 1
            If Hi <= Lo Then Exit Do
        Loop
        If Hi <= Lo Then
            T(Lo) = Med
            Exit Do
        End If
        T(Lo) = T(Hi)
        Lo = Lo + 1
        Do While T(Lo) < Med
            Lo = Lo + 1
            If Lo >= Hi Then Exit Do
        Loop
        If Lo >= Hi Then
            Lo = Hi
            T(Hi) = Med
            Exit Do
        End If
        T(Hi) = T(Lo)
 
    Loop
 
    Quicksort T(), LoBound, Lo - 1
    Quicksort T(), Lo + 1, UpBound
 
    End Sub
 
    '2)CT03
    'Création d'une sous directory CT03bis
Sub deux()
 
    MkDir "Z:\Config\Bureau\Apres traitement\CT03bis"
 
End Sub
 
'Déplacer les fichiers dans CT03bis
Sub trois()
 
    Dim Fso As Object
    Dim FsoRepertoire As Object
    Dim FsoFichier As Object
    Dim strRepertoire As String
 
    strRepertoire = ThisWorkbook.Path
 
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set FsoRepertoire = Fso.GetFolder(ThisWorkbook.Path & "\CT03")
 
    'Boucle sur fichiers du repertoire
    For Each FsoFichier In FsoRepertoire.Files
 
      If Left$(FsoFichier.Name, 10) = "CT3__T1A-7" Then
        FsoFichier.Copy strRepertoire & "\CT03\" & FsoFichier.Name, True
        FsoFichier.Move strRepertoire & "\CT03bis\" & FsoFichier.Name
      End If
 
    Next
 
End Sub
Hervé.
Theze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h13.


 
 
 
 
Partenaires

Hébergement Web