Sub PrincipalVersModele()
Dim derlig&, tablo, ligEcrit&, i&, j&, n&, nbrLig&, nbbloc&
Application.ScreenUpdating = False
'effacer les précédentes valeurs
With Sheets("Modele")
.Range("a18:z44").ClearContents ' du premier bloc
.Range("a54:a" & .Rows.Count).EntireRow.Delete 'tous les autres blocs
End With
'lecture des valeurs sources à copier dans tablo
With Sheets("Principal")
derlig = .Cells(.Rows.Count, "a").End(xlUp).row
If derlig = 2 Then
MsgBox "Pas de données sur la feuille 'Principal' -> Fin"
Exit Sub
End If
' définir le nombre de lignes à lire (multiple de 14)
' ==> on pourra donc prendre des lignes sources vides en compte !
' pas d'incidence sur le résultat,
' mais ça simplifie grandement le code par la suite
nbrLig = derlig - 2
If nbrLig Mod 14 = 0 Then
derlig = 2 + 14 * Int(nbrLig / 14)
Else
derlig = 2 + 14 * (1 + Int(nbrLig / 14))
End If
'lecture des données sources
tablo = .Range(.Cells(3, "a"), .Cells(derlig, "d")).Value
End With
With Sheets("Modele")
.Activate
'copie du 1ier bloc (vide) autant de fois qu'il le faut
nbbloc = Int((derlig - 2) / 14) - 1
If nbbloc > 0 Then .Rows("18:53").Copy .Rows(54).Resize(nbbloc * 36)
'écriture des valeurs de tablo sur "Modele"
ligEcrit = 18 'ligne de la future écriture des données
n = 0 ' comptage du nombre de lignes écrites
For i = 1 To UBound(tablo)
.Cells(ligEcrit, "a") = tablo(i, 1)
.Cells(ligEcrit, "k") = tablo(i, 2)
.Cells(ligEcrit, "s") = tablo(i, 3)
.Cells(ligEcrit, "w") = tablo(i, 4)
n = n + 1
If n = 14 Then ' fin d'un bloc
ligEcrit = ligEcrit + 10
n = 0
Else ' toujours dans le même bloc
ligEcrit = ligEcrit + 2
End If
Next i
Application.CutCopyMode = False
Application.Goto .Range("a1"), True
' définition zone d'impression
ActiveSheet.PageSetup.PrintArea = .Range("a1:z" & ligEcrit - 1).Address
End With
End Sub