Bonjour à tous,

Je reviens vers vous au sujet de ma macro. Le but est qu'elle fasse un vulgaire copier/coller de plusieurs feuilles vers une seule autre afin de concaténer l'ensemble.
En mode pas à pas, tout va bien. Cependant lorsque j’exécute ma macro, elle ne prend pas en compte l'ensemble des fichiers sources.

Du coup je me suis dit que cela pourrait provenir du fait que certaines taches sont plus longues que d'autres à exécuter, le copier/coller de milliers de lignes par exemple. Et donc j'ai mis une fonction pause de quelques secondes avant de passer à la taches suivantes mais le résultat est incorrecte. La 6eme feuille à copier se copie en ligne 2 au lieu de la ligne qui suit la dernière non vide.

Je n'arrive pas à trouver ce qui pourrait expliquer qu'en pas à pas, tout s'effectue correctement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Sub concatene()
Dim infolog, final As Workbook
 
Dim Nomfichier As String
Dim cpt, i As Double
 
dateJ = Date
dateYYYY = Right(dateJ, 4)
dateMM = Left(Right(dateJ, 7), 2)
dateDD = Left(dateJ, 2)
dateFic = dateYYYY & dateMM & dateDD
cpt = 1
 
 
Workbooks.Add
 
 
ActiveWorkbook.SaveAs Filename:= _
  "C:\Users\kguesmia\Documents\Alerte CASSE appro\Risque CASSE au " & dateFic & ".xlsx" _
  , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
 
Set final = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Alerte CASSE appro\Risque CASSE au " & dateFic & ".xlsx")
 
Set infolog = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Alerte CASSE appro\Donnees\Liste4_" & dateFic & " .xls")
Application.Wait Time + TimeSerial(0, 0, 3) 'attendre 3s
 
infolog.Sheets(1).UsedRange.Copy final.Sheets(1).Range("A" & cpt)
Application.Wait Time + TimeSerial(0, 0, 3)  'attendre 3s
 
cpt = final.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
 
i = 5
 Do While i <> 95
 
 Nomfichier = Dir("C:\Users\kguesmia\Documents\Alerte CASSE appro\Donnees\Liste" & i & "_" & dateFic & " .xls")
 
 If Nomfichier <> "" Then
  Set infolog = Workbooks.Open(Filename:="C:\Users\kguesmia\Documents\Alerte CASSE appro\Donnees\Liste" & i & "_" & dateFic & " .xls")
    Application.Wait Time + TimeSerial(0, 0, 3) 'attendre 3s
   ' Application.CutCopyMode = False:
    infolog.Sheets(1).Rows(1).Delete
    infolog.Sheets(1).UsedRange.Copy final.Sheets(1).Range("A" & cpt + 1)
    Application.Wait Time + TimeSerial(0, 0, 3)  'attendre 3s
    infolog.Sheets(1).UsedRange.Copy: Application.CutCopyMode = False
    infolog.Close SaveChanges:=False
cpt = final.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
End If
 
i = i + 1
 
Loop