Excel VBA - Supprimer une plage de cellules [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
vendredi 22 février 2013
Statut
Membre
Dernière intervention
28 mai 2013
-
Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
-
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

7 réponses

Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
2 128
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
Messages postés
5
Date d'inscription
vendredi 22 février 2013
Statut
Membre
Dernière intervention
28 mai 2013

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)
Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
2 128
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
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
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 446
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.
Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
2 128
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
MERCI À TOUS! J'ai tout réglé!
Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
2 128
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 :(
Messages postés
9848
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
9 juin 2021
2 128
en haut du tout premier message!