Bonjour,
Voici ce que je voudrai, étant novice en visual basic. Une personne d'un 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
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