Quand j'utilises l'enregistreur de macro, j'ai la syntaxe suivante pour insérer une ligne au-dessus de la ligne 5 :
Rows("5:5").Insert Shift:=xlDown
En fait, tu as le choix entre cette syntaxe ou :
Rows(5).Insert Shift:=xlDown
Il faut donc que tu repères le numéro de la ligne. L'attribut de la fonction Rows n'est pas une cellule (ce que tu essaies de lui faire avaler dans tes exemples), mais un nombre.
Du coup, si je reprends cette partie de ton code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Dim Ma_plage As Range
Dim Cell As Range
Dim macell As Integer
Set Ma_plage = Worksheets("DP").Range(Cells(Premiereligne, 13), Cells(derniereligne - 1, 13))
For Each Cell In Ma_plage
If Cell.Value > semainedebut And Cell.Value <= semainefin Then
Cell.EntireRow.Interior.ColorIndex = 27
Cell.Interior.ColorIndex = 4
Rows(Cell.Row + nbdeligneainserer).insertshifht xlDown
End If
Next Cell |
J'écrirais :
1 2 3 4 5 6 7 8 9 10 11 12 13
| Dim i As Integer
Dim j As Integer
For i = Premiereligne To dernierligne - 1 'on se balade entre le lignes "Premierligne" et "dernierligne - 1"
If Cells(i, 13).Value > semainedebut And Cells(i, 13).Value <= semainefin Then
Cells(i, 13).EntireRow.Interior.ColorIndex = 27
Cells(i, 13).Interior.ColorIndex = 4
Rows(i & ":" & i + nbdeligneainserer - 1).Insert xlDown '*explication ci-dessous
End If
Next i |
* explication :
Sur Excel, à la main, quand on veut insérer n lignes au-dessus de la ligne i, on fait la chose suivante :
- Sélectionner la ligne i et les n-1 lignes en-dessous (on a donc sélectionné n lignes dont la ligne i)
- Cliquer sur le bouton insérer.
C'est ce que j'ai fait avec l'enregistreur de macro et ça nous donne une macro assez logique. Si par exemple, tu veux insérer 3 lignes au-dessus de la ligne 5, tu auras :
Rows("5:7").Insert xlDown
Or 5 = 5 + 3 -1 = ligne au-dessus de laquelle on veut insérer + nb de lignes à insérer - 1.
Avec i et nbdeligneainserer, ça donne l'intervalle [i; i + nbdeligneainserer - 1]. Si on veut respecter l'écriture du code avec les "" et les deux-points, on a donc :
Rows(i & ":" & i + nbdeligneainserer - 1).Insert xlDown
Est-ce que c'est clair ?
Partager