Excel VBA - Supprimer une plage de cellules
Résolu
vbadebutant
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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
A voir également:
- Excel vba effacer une plage de cellules
- Formule excel pour additionner plusieurs cellules - Guide
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Verrouiller cellules excel - Guide
- Word et excel gratuit - Guide
7 réponses
Bonjour
Une procedure avec quelques explications
bon courage
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)
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 ceci
ou ceci pour aller plus vite
bonne journée
essaies ceci
Public 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.
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
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