Bonjour,
Découvrant et apprenant VBA comme je peux, j'ai repris un bout de code et adapté à mon projet qui est de reprendre plusieurs feuilles d'une fichier excel en une seule selon certaines colonnes avec la source indiqué dans une autre colonne, le programme est ci-dessous, sauf que pour la source celle-ci est copiée jusqu'a la fin du tableau donc le maximum de lignes dans excel, ce qui ne laisse pas de place pour les autres feuilles, voici le code :


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
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
Sub Macro5()
 
    Dim sh As Worksheet
    Dim DestSh As Worksheet
    Dim Last As Long
    Dim CopyRng As Range
 
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        End With
    Application.DisplayAlerts = False
    On Error Resume Next
    ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    'Add a worksheet with the name "RDBMergeSheet"
    Set DestSh = ActiveWorkbook.Worksheets.Add
    DestSh.Name = "RDBMergeSheet"
 
    'Passe tout les fichiers en vue et trouve la dernière ligne
    For Each sh In ActiveWorkbook.Worksheets
            If sh.Name = "Piste Audit Matisse" Then
 
            'Find the last Row with data on the DestSh
            Last = LastRow(DestSh)
 
            'Fill in the range(s) that you want to copy
           Set CopyRng = sh.Range("C:C")
 
            'Test if there enough rows in the DestSh to copy all the data
            If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
                MsgBox "There are not enough rows in the Destsh"
                GoTo ExitTheSub
                End If
            'This example copies values/formats and Column width
            CopyRng.Copy
            With DestSh.Cells(1, Last + 1)
                .PasteSpecial 8
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                Application.CutCopyMode = False
            End With
 
            DestSh.Cells(Last + 1, "D").Value = sh.Name 'Resize(CopyRng.Rows.Count).
 
        End If
    Next
ExitTheSub:
With Application
        .ScreenUpdating = True
        .EnableEvents = True
        End
End With
End Sub
Function LastCol(sh As Worksheet)
    On Error Resume Next
    LastCol = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlFormulas, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Column
    On Error GoTo 0
End Function
Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlFormulas, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function
Les deux fonctions ci dessous copie soit en fonction de la dernière lignes ou colonnes, j'ai esseyé les deux fonctions le résultat est le même :/
çela fonctionne très bien pour copier les données mais j'aimerais que la source s'arrête au même nombre de lignes que de données et non pas le nombre max de lignes dans excel.
Je vous remercie d'avance