Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Sélectionner une plage de cellule en VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Finaeylou

XLDnaute Nouveau
Bonjour
Comment sélectionner une plage de cellule en langage VBA
première ligne A2 dernière cellule KXXX
Sélectionner le tout et supprimer les données?

Je n'arrive pas à l'écrire correctement

Sub RangeFromStart()
Range("A2", Range("A2", "K").End(xlDown).End(xlToRight)).Select
Selection.ClearContents
Range("A1").Select
End Sub

Merci
 
Bonjour à tous,
Il faut au commencement prendre de bonnes habitudes.
VB:
Range("A2", Range("A2", "K").End(xlDown).End(xlToRight)).Select
Ceci fait référence à la feuille active. Donc toujours faire des références explicites. Le mieux c'est avec le CodeName de la feuille.

Exemple :
Code:
    With sh_Tests
        .Range("A2:F" & .Range("F" & Rows.count).End(xlUp).Row).Select
    End With
Attention à l'utilisation de xlDown il peut ne pas sélectionner la dernière ligne s'il rencontre une ligne vide dans le lot. Préférer lui xlUp
Il es inutile de faire des Select si l'on ne veux pas que le classeur ressemble à un sapin de noël.
Code:
    With sh_Tests
        .Range("A2:F" & .Range("F" & .Rows.count).End(xlUp).Row).ClearContents
    End With
 
Merci pour votre réponse mais ca ne fonctionne pas, il bloque sur la ligne .Range...


Sub RangeFromStart()

Dim onglet As Worksheet
Dim derniere_ligne As Long
Dim plageDeDonnees As Range

With sh_Tests
.Range("A2:K" & .Range("K" & .Rows.Count).End(xlUp).Row).ClearContents
End With

Range("A1").Select
End Sub
 
Bonjour.
Essayez ça :
VB:
Sub EffacerAK()
   Intersect([A:K],PlageÀPartirDe([A2]).ClearContents
   End Sub
Function PlageÀPartirDe(ByVal CelDéb As Range) As Range
Rem. ——— Plage utilisée à partir de CelDéb.
   Dim NbrLig As Long, NBrCol As Long
   With CelDéb.Worksheet.UsedRange:
      NbrLig = .Row + .Rows.Count - CelDéb.Row
      NBrCol = .Column + .Columns.Count - CelDéb.Column
      If NbrLig <= 0 Or NBrCol <= 0 Then Exit Function
      End With
   Set PlageÀPartirDe = CelDéb.Resize(NbrLig, NBrCol)
   End Function
 
Possible aussi :
VB:
Sub EffacerAK()
   ColUti([A2:K2]).ClearContents
   End Sub
Function ColUti(ByVal PlageDép As Range, Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Rem. ——— Plage renseignée de plus qu'une chaîne vide à partir de PlageDép et ce seulement dans ses colonnes dans la UsedRange.
   Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn), LMin, CMin)
   End Function
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing, _
   Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Rem. ——— Plage renseignée de plus qu'une chaîne vide à partir de PlageDép dans PlageExam, assumé UsedRange si non précisé.
   Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
   On Error GoTo RienTrouvé
   If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
   LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
   CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
   On Error GoTo 0
   NbL = LMax - PlageDép.Row + 1: If NbL < LMin Then NbL = LMin
   NbC = CMax - PlageDép.Column + 1: If NbC < CMin Then NbC = CMin
   If NbL < 1 Or NbC < 1 Then GoTo CEstToutVide
   Set PlgUti = PlageDép.Resize(NbL, NbC)
   Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
   End Function
 
Super celui ci fonctionne même s'il est compliqué à comprendre mais ca me va merci beaucoup
 
bonjour
je vous cite :
VB:
Range("A2", Range("A2", "K").End(xlDown).End(xlToRight)).Select

1 préciser le parent de la plage serait de bonne augure pour la suite
2 Attention à End(Xldown)il part d'en haut vers le bas et s’arrête donc a la première ligne vide (même si il y en d'autres plus bas
3 a quoi sert justement ce xldown et xlright sur une plage en 2d argument dans un range ??????????
4 le select est absolument inutile

je vais traduire l'intention de façon a vérifier si la formulation est bien ce que tu cherche a faire
VB:
Range("A2", Range("A2", "K").End(première cellule vide en descendant vers le bas ).End(première cellule vide en, allant vers la droite )).Select
alors la formule représente t elle bien l'intention

ce qu'il y a de dangereux dans cette formulation
c'est que le xlright va être calculé sur la ligne trouvée par xldown a condition de replacer la parenthèses de fermeture
car la c'est tout simplement une erreur de syntaxe
du coup si avant on a des colonnes supplémentaire de remplies par rapport au xlright de cette ligne ils ne seront pas pris en compte
c'est ballo

oserais -je dire que tu n'est pas dans le bon raisonnement là
mes camarades affirmeront ou infirmeront

toujours est il que pour sélectionner ou tout simplement déterminer une plage limite droite limite basse
dans ton cas serait l'utilisation de find(xlprevious)au préalable pour déterminer la ligne et colonne de fin

pour info le xlright sur une plage de plusieur ligne va forcement donner une erreur
de même que le xldown sur une plage de x colonne d'ailleurs
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
226
  • Question Question
XL 2021 listbox
Réponses
18
Affichages
374
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…