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, 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
  2. de rien, peux tu mettre le problème à résolu (en haut de ton premier message)
    bonne fin de journée
    ccm81
    0
    1. MERCI À TOUS! J'ai tout réglé!
      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. 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. 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. 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