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
A voir également:
- Excel vba effacer une plage de cellules
- Liste déroulante excel - Guide
- Verrouiller cellules excel - Guide
- Déplacer une colonne excel - Guide
- Somme de plusieurs cellules excel - Guide
- Excel compter cellule couleur sans vba - 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