Excel VBA - Supprimer une plage de cellules

Résolu
vbadebutant Messages postés 5 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

7 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. vbadebutant Messages postés 5 Statut Membre
     
    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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  4. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. vbadebutant
     
    MERCI À TOUS! J'ai tout réglé!
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    de rien, peux tu mettre le problème à résolu (en haut de ton premier message)
    bonne fin de journée
    ccm81
    0
  8. vbadebutant
     
    Bonjour, je veux bien mais je ne trouve pas le lien Modifer - Marquer comme résolu nulle part :(
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      en haut du tout premier message!
      0