Excel VBA - Supprimer une plage de cellules
Résolu
vbadebutant
Messages postés
5
Statut
Membre
-
ccm81 Messages postés 11033 Statut Membre -
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
J'ai un fichier excel de longueur variable. par macros, j'y fait plusieurs opérations et à la fin, j'aimerais supprimer la plage de cellules dont je n'ai plus besoin. Pour me positionner à la première ligne non-utilisée, j'utilise la macro suivante:
While ActiveCell.Offset(1, 0).Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
' On descend d'une ligne pour la première cellule vide de la colonne
ActiveCell.Offset(1, 0).Select
Comment, maintenant, puis-je déterminer une plage à partir de cette cellule à la fin du tableau et comment la supprimer?
Merci
J'ai un fichier excel de longueur variable. par macros, j'y fait plusieurs opérations et à la fin, j'aimerais supprimer la plage de cellules dont je n'ai plus besoin. Pour me positionner à la première ligne non-utilisée, j'utilise la macro suivante:
While ActiveCell.Offset(1, 0).Value <> ""
ActiveCell.Offset(1, 0).Select
Wend
' On descend d'une ligne pour la première cellule vide de la colonne
ActiveCell.Offset(1, 0).Select
Comment, maintenant, puis-je déterminer une plage à partir de cette cellule à la fin du tableau et comment la supprimer?
Merci
7 réponses
-
Bonjour
Une procedure avec quelques explications
' colonne de reference Const codeb = "A" Public Sub EffaceFinColonne() Dim lideb As Long, adr As String, adrfin As String, plage As String With ActiveSheet lideb = 1 ' recherche de la 1° ligne vide de la colonne codeb While .Range(codeb & lideb) <> "" lideb = lideb + 1 Wend ' plage utilisée de la feuille adr = .UsedRange.Address ' dernière cellule de la plage utilisée adrfin = Split(adr, ":")(1) ' plage a effacer plage = codeb & lideb & ":" & adrfin ' effacer plage Range(plage).ClearContents End With End Sub
bon courage -
Bonjour,
Merci de m'aider. La macro ne fonctionne pas. J'ai un message d'erreur qui me dit que la fonction RANGE à la fin n'a pas un bon argument. Lorsque je vais voir le contenu de ADR, il est égal à "$A:$BK" et PLAGE = "A24453:$BK". Le permier argument, A24453, est correct.
La seule différence avec votre code est que j'ai ramené Const codeb = "A" sous Public Sub
Quelque chose que je n'ai pas copié correctement?
*****
En fait, cette routine semble me donner une plage linéaire; de A à BK. Ce dont j'ai besoin est d'une plage en forme de rectangle. Le point de départ serait A24453 mais l'autre point serait BK1048100 (par exemple) -
bizarre chez moi ça fonctionne bien (sous excel 2003) et adr donne l'adresse correcte de la plage utilisée (du genre $A$1:$M:$50)
essaies ceciPublic Sub EffaceFinColonne() Const codeb = 1 Dim lideb As Long, adr As String, lifin As Long, cofin As Long With ActiveSheet lideb = 1 ' recherche de la 1° ligne vide de la colonne codeb While .Cells(lideb, codeb) <> "" lideb = lideb + 1 Wend ' dernière cellule utilisée de la feuille lifin = .Cells.Find("*", , , , xlByRows, xlPrevious).Row cofin = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column ' effacer plage Range(.Cells(lideb, codeb), .Cells(lifin, cofin)).ClearContents End With End Sub
ou ceci pour aller plus vite
Public Sub EffaceFinColonne() Const codeb = 1 Dim lideb As Long, adr As String, v As Object With ActiveSheet lideb = 1 ' recherche de la 1° ligne vide de la colonne codeb Set v = .Range(.Cells(lideb, codeb), .Cells(Rows.Count, codeb)).Find("", , , xlWhole) If v Is Nothing Then Exit Sub lideb = v.Row ' effacer la fin de la feuille depuis (lideb,codeb) Range(.Cells(lideb, codeb), .Cells(Rows.Count, Columns.Count)).ClearContents End With End Sub
bonne journée -
Bonjour ccm81,
C'est bien de varier les options pour débuter et je confirme que les 3 macros, quelles que soient les fonctions utilisées, fonctionnent parfaitement sous 2007 et 2010.
Personnellement, je choisirais la première en incorporant la constante comme l'a fait vbadebutant.-
Bonjour gbinforme
Tu me rassures, En fait, j'ai cherché une autre solution, vu que (post#2) vbadebutant a apparemment eu un problème avec l'instruction > adr = .UsedRange.Address sous excel 2007 qui semblait ne renvoyer que les colonnes
Et comme il arrive que suivant les versions d'excel .....
bonne journée
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
-
de rien, peux tu mettre le problème à résolu (en haut de ton premier message)
bonne fin de journée
ccm81 -
Bonjour, je veux bien mais je ne trouve pas le lien Modifer - Marquer comme résolu nulle part :(