Excel VBA - Supprimer une plage de cellules

Résolu/Fermé
vbadebutant
Messages postés
5
Date d'inscription
vendredi 22 février 2013
Statut
Membre
Dernière intervention
28 mai 2013
- 22 févr. 2013 à 18:04
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
- 25 févr. 2013 à 18:49
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
A voir également:

7 réponses

ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
22 févr. 2013 à 19:57
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
0
vbadebutant
Messages postés
5
Date d'inscription
vendredi 22 février 2013
Statut
Membre
Dernière intervention
28 mai 2013

Modifié par vbadebutant le 22/02/2013 à 20:44
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)
0
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
Modifié par ccm81 le 23/02/2013 à 06:31
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
0
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
23 févr. 2013 à 09:35
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.
0
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
23 févr. 2013 à 12:23
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MERCI À TOUS! J'ai tout réglé!
0
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
25 févr. 2013 à 17:06
de rien, peux tu mettre le problème à résolu (en haut de ton premier message)
bonne fin de journée
ccm81
0
Bonjour, je veux bien mais je ne trouve pas le lien Modifer - Marquer comme résolu nulle part :(
0
ccm81
Messages postés
10357
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
5 juillet 2022
2 299
25 févr. 2013 à 18:49
en haut du tout premier message!
0