Bonjour,
A ta place je créerais une fonction indépendante comme par exemple celle-ci
Dans cet exemple, on suppose que les données commencent à la ligne 1 qui contient les étiquettes de colonnes et les données à partir de la ligne 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Function InsertFunction(sht As Worksheet, RowNumber As Long, NumberOfColumns As Integer, Optional PassWord As String) As Boolean
' Arguments
' sht Objet feuille
' RowNumber Numéro de la ligne à insérer
' NumberOfColums Nombre de colonnes à vérifier
' [PassWord] Mot de passe par défaut pas de mot de passe
Dim c As Integer
If RowNumber > 2 Then
With sht
If Len(PassWord) Then .Unprotect PassWord
.Rows(RowNumber).Insert shift:=xlDown
For c = 1 To NumberOfColumns
If .Cells(2, c).HasFormula Then
.Cells(2, c).Copy .Cells(RowNumber, c)
End If
Next
If Len(PassWord) Then .Protect PassWord
End With
InsertFunction = True
End If
End Function |
Que l'on invoque comme ceci
InsertFunction ThisWorkbook.Sheets("monTest"), ActiveCell.Row, 7, "toto"
ou comme cela
1 2 3
| If Not InsertFunction(ThisWorkbook.Sheets("monTest"), ActiveCell.Row, 7, "toto") Then
MsgBox "Pas d'insertion pour les lignes 1 à 2", vbCritical
End If |
donc pour l'adapter à ton code
1 2 3 4 5 6 7 8 9
| Sub InsertionLigne()
Dim i As Integer, ligne As Long
ligne = ActiveCell.Row
For i = 1 To Sheets.Count
If Not InsertFunction(ThisWorkbook.Sheets(i), ligne, 10, "toto") Then
MsgBox "Pas d'insertion pour les lignes 1 à 2", vbCritical
End If
Next
End Sub |
Le fait de créer une fonction indépendante te facilite la maintenance de ton code et allège la procédure appelante.
Partager