Bonjour,
1 2 3 4 5 6 7 8
| Sub exemple()
Dim i As Variant
i = Range("A:A")
If Cells(i, 1) = "~?" Then
Cells(i, 1).EntireRow.Delete
End If
End Sub |
Dans le code ci-dessus, plusieurs choses :
- A chaque fois que tu fais référence à une cellule, pense à ajouter au moins la feuille Parent :
Worksheets("LeNomDeTaFeuille").cells(i,1)
Ca t'évitera bien des problèmes de référence par la suite. Ou sinon, encore plus simple, tu déclares un objet worksheet permettant d'y faire référence facilement et rapidement :
1 2 3 4 5
| dim MaFeuille as worksheet
set MaFeuille = workbooks("MonClasseur").worksheets("MaFeuille")
'Pour y faire référence de cette manière :
MaFeuille.cells(i,1) |
Pour supprimer des lignes, dans un premier temps, tu dois connaître le numéro de la dernière ligne non vide de ton tableau. Pour cela, utilise la ligne suivante :
1 2
| Dim Ligne as long
Ligne=MaFeuile.cells(rows.count,1).end(xlup).row 'Tu connaîtras ainsi la dernière ligne non vide de la colonne 1 |
Ensuite, pour supprimer proprement les lignes, il faut boucler à partir de la fin (pour éviter de sauter des lignes)
1 2 3
| For i = Ligne to 1 'Tu vas ici boucler de la fin de ton tableau jusqu'à la ligne 1
'Ta procédure
Next i |
Si tu sais quel va être le type unique de données que ta variable i va prendre, alors il faut lui donner un type précis. En l’occurrence ici, ce que tu cherches à faire c'est boucler sur chaque ligne.
Une dernière chose concernant la suppression d'une ligne, il y a plusieurs façons de le faire. Moi j'utilise celle-ci :
Reprenons ton exemple :
1 2
| Dim i as variant
i=range("A:A") |
Il est possible de procéder ainsi en intégrant une boucle "For Each" qui te permettra de boucler sur chaque cellule de la zone A:A. Cependant, maintenant qu'Excel à plus d'1 million de ligne, c'est un peu laborieux. Donc si tu as besoin de travailler sur une zone, il est toujours préférable de bien la définir. C'est là que reviens la variable "Ligne" utilisé précédemment pour baliser ta zone de la manière suivante :
Ps : Dans ce cas, à la place de déclarer i as variant, tu peux la typer en tant que Range car elle va recevoir une zone de cellule
i=MaFeuille.range("A:A" & Ligne)
Bonne lecture et bon apprentissage !
Partager