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
| Option Explicit
Public Sub test()
Dim wbSource As Workbook
Dim wbCible As Workbook
Dim wsSource As Worksheet
Dim wsCible As Worksheet
Dim iZone, nbZone As Integer
Dim premiereLigne, nbLignes As Integer
Dim premiereLigneCopie As Integer
Dim colRef As Integer
Dim rg As Range
Set wbSource = ThisWorkbook
Set wbCible = ThisWorkbook 'a adapter
Set wsSource = wbSource.Worksheets("Feuil2") 'a adapter
Set wsCible = wbCible.Worksheets("Feuil3") 'a adapter
nbZone = 3 'Pour le moment, à augmenter si on ajoute des prénoms
premiereLigne = 11 'a adapter : le premiere ligne de données, ici pierre
colRef = 2 'a adapter : la colonne qui contient pierre, paul, jacques
premiereLigneCopie = 1 'a adapter : la premiereLigne sur laquelle on copie dans la feuille cible
iZone = 1
Do While iZone <= nbZone
Set rg = wsSource.Cells(premiereLigne, colRef)
If rg.MergeCells Then 'Si c'est une cellule mergée
nbLignes = rg.MergeArea.Rows.Count 'On récupère son nombre de lignes
Else 'Sinon il n'y a qu'une ligne
nbLignes = 1
End If
'On effectue la copie
wsSource.Range(rg, rg.Offset(nbLignes - 1, 0)).EntireRow.Copy
wsCible.Paste wsCible.Cells(premiereLigneCopie, 1)
'On passe à la zone suivante
premiereLigne = premiereLigne + nbLignes
premiereLigneCopie = premiereLigneCopie + nbLignes
iZone = iZone + 1
Loop
End Sub |
Partager