Comment faire référence à une colonne d'une plage nommée
Bonjour à tous,
J'ai nommée une plage de cellules "DESIGNATION_DES_TRAVAUX" qui correspond au corps d'un devis type (là où l'on note la désignation des articles, la quantité, le prix...).
J'essaie de supprimer les lignes vides de cette plage nommée (qui, soit dit en passant, en réalité ne sont entièrement vides car il y a les formules masquées du calcul des prix) mais je ne sais pas comment le dire.
J'ai trouvé un code mais quand je l'exécute cela me supprime toute la plage nommée.
Sub SuppLigneVIDE()
Sheets("DEVIS").Range("DESIGNATION_DES_TRAVAUX").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Et j'ai également trouvé un code pour supprimer les lignes qui contiennent le mot "code" dans la colonne A, cela fonctionne, mais là encore je n'ai pas trouvé comment lui dire de ne chercher que dans la plage nommée. Car si un jour, j'ai le mot "code" en colonne A dans une autre cellule qui n'a rien à voir avec le corps de mon devis, ben ça va supprimer la ligne, et il ne faudrait pas.
Sub SuppLigneCODE()
Dim i As Integer
For i = [A3000].End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "code" Then Rows(i).Delete
Next i
End Sub
Précision très importante au vu des codes que je vois sur le net : Il m'est impossible, je pense, de procéder à un "tri" car les lignes sont construites comme suit :
| Bla Bla Bla Bla Bla Bla Bla Bla | |||||||
| A30 | Bla Bla Bla Bla Bla | ||||||
| A30a | Bla Bla Bla Bla Bla | H | 0 | 0,00 | |||
| Bla Bla Bla Bla Bla Bla Bla Bla | |||||||
| A30 | Bla Bla Bla Bla Bla | ||||||
| A30A | Bla Bla Bla Bla Bla | H | 0 | 0,00 | |||
| Bla Bla Bla Bla Bla | |||||||
| 1.1.2.3 | Bla Bla Bla Bla Bla | m² | 0 | 0,00 | |||
| code | Renseigner le code | 0 | 0,00 | ||||
Une petite idée où cela n'est pas possible ?
bonjour pegpas,
pour supprimer les lignes dont la 2ième colonne est vide. S'il n'y a pas des cellules vides, cela cause une erreur à éviter avec "on error resume next"
Sub SuppLigneVIDE()
Sheets("DEVIS").Range("DESIGNATION_DES_TRAVAUX").columns(2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Submais je vois des cellules fusionnées ...
Bonjour BsAlv,
Merci pour ta réponse mais je viens de tester et effectivement, il me supprime également les cellules fusionnées. Et il ne faut pas.
Mais je viens de tester ton code en changeant colonne 2 par colonne 1 et.... ça fonctionne ! Merci à toi !
En revanche j'ai voulu adapter le second code avec ton astuce, ce qui donne :
Sub SuppLigneCODE()
Dim i As Integer
For i = Sheets("DEVIS").Range("DESIGNATION_DES_TRAVAUX").Columns(1).End(xlUp).Row To 1 Step -1
If Cells(i, 1) = "code" Then Rows(i).Delete
Next i
End Sub
Mais là, cela n'a aucun effet.
re, je ne l'ai pas testé, mais vous pouvez essayer ceci (le point en face de .Cells et de .Rows est immportant en combinaison avec le With ... End With). Si vous voulez utiliser les cellules d'une autre colonne, changez le "1" de With Sheets("DEVIS").Range("DESIGNATION_DES_TRAVAUX").Columns(1)
Sub SuppLigneCODE()
Dim i As Integer
With Sheets("DEVIS").Range("DESIGNATION_DES_TRAVAUX").Columns(1) 'première colonne de cette plage
For i = .Rows.Count To 1 Step -1 'de la dernière cellule vers la première
If .Cells(i, 1) = "code" Then .Cells(i, 1).EntireRow.Delete
Next i
End With
End SubOh punaise ça fonctionne nickel ! Un énorme merci !
Bonne journée à vous et merci encore.