Excel VBA - Supprimer une plage de cellules

Résolu
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

  1. 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
    1. 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
      1. 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
        1. Contributeur
          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
          1. 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
        2. MERCI À TOUS! J'ai tout réglé!
          0
          1. de rien, peux tu mettre le problème à résolu (en haut de ton premier message)
            bonne fin de journée
            ccm81
            0
            1. Bonjour, je veux bien mais je ne trouve pas le lien Modifer - Marquer comme résolu nulle part :(
              0
              1. en haut du tout premier message!
                0