Macro sélectionner jusqu'à la dernière cellule non vide

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 !

salsitawapa

XLDnaute Occasionnel
Bonjour à tous, encore un petit problème sur mes macros.
J'ai fais ce bout de code :
Code:
Sub fin()
'sélectionne les cellules à coller
Sheets("Feuil3").Select
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
        Selection.Copy
End Sub
Mais il y a un gros soucis quand j'ai qu'une seule ligne, il va jusqu'à la fin.
Existe t'il un moyen pour ne pas qu'il me fasse la boucle complète ? Merci d'avance
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Bonjour.

Moi j'utilise partout ça:
VB:
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing) As Range
Rem. Cherche la partie utilisée d'une plage, c'est à dire celle qui s'étend jusqu'à la dernière cellule renseignée de plus qu'une chaîne vide.
'    PlageDép: Plage de départ. Seule la 1ère cellule spécifiée est prise en compte pour la déterminer, et suffit donc pour une utilisation VBA.
'            Pour utilisation en formules, il est néanmoins nécessaire de spécifier la plage depuis celle ci jusqu'au reste des colonnes entières.
'    PlageExam: Plus grande plage susceptible de contenir la plage cherchée.
'            Facultatif: UsedRange assumé par défaut.
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 < 1 Then GoTo CEstToutVide
NbC = CMax - PlageDép.Column + 1: If NbC < 1 Then GoTo CEstToutVide
Set PlgUti = PlageDép.Resize(NbL, NbC)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
End Function
'

Function ColUti(ByVal PlageDép As Range) As Range
Rem. Comme PlgUti, mais la plage rendue se limitera aux colonnes couvertes par la plage de départ spécifiée
Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn))
End Function
VB:
Sub fin()
'sélectionne les cellules à coller
PlgUti(Worksheets("Feuil3").[A2]).Copy
End Sub
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Bonjour à tous,

Je ne comprends cette sélection pour copier !
Pourquoi ne pas faire une sélection comme dans mon exemple cellule A2 à F10

Code:
Sub fin()
Sheets("Feuil3").Select
Range("A2:F10").Copy
End Sub

bonne journée
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Merci de votre aide.
@Dranreb j'ai testé, il me sélectionne tout même après le vide, hors j'ai oublié de le dire mes cellules à sélectionner commence en A2 et finissent en D. J'ai mis une colonne "E" pour ne pas qu'il aille me copier les données que j'ai plus loin. Avec ta méthode qui fonctionne très bien, j'ai tout le contenu de ma feuille.

@JBARBE non c'est pas bon car des fois je n'ai qu'une ligne et des fois plusieurs, c'est pour cela que je me suis compliqué la vie...

Merci
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Alors peut être :
VB:
Sub fin()
'sélectionne les cellules à coller
ColUti(Worksheets("Feuil3").[A2:D2]).Copy
End Sub
S'il peut aussi y avoir une ligne vide à partir de laquelle le reste ne vous intéresse plus, ce serait plutôt :
VB:
Sub fin()
'sélectionne les cellules à coller
Feuil3.[A2].CurrentRegion.Copy
End Sub
…enfin si Feuil3 est bien le nom de la constante Worksheet représentant la feuille Excel portant ce même nom, à vérifier dans l'explorateur de projet, rubrique Microsoft Excel Objets. On l'appelle parfois le CodeName, ce nom de constante, bien qu'en réalité ce soit autre chose: c'est une propriété String en lecture seule qui reproduit ce nom.
 
Dernière édition:
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Si PlgUti fonctionnait, il n'y a aucune raison que ColUti ne fonctionne pas.
Vous voulez dire quoi par c'est la bonne feuille ? Est-ce la bonne constante Worksheet ? Le nom Excel de la feuille on s'en fout, il n'a aucune importance.
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Bonjour à tous.


Pas certain que ce soit exactement la réponse souhaitée, mais sait-on jamais.

Dans la feuille concernée :​
Code:
Sub BasDroite()
Const Colonne = "E" '(ou 5). Les colonnes à partir de la cinquième seront ignorées.
Dim Plg As Range
  Set Plg = [A2]
  With Cells(PremièreCelluleVideSousDernièreCelluleNonVide(Plg).Row, PremièreCelluleVideADroiteDernièreCelluleNonVide(Plg, "E").Column)
    Range(Plg, .Offset(.Row > Plg.Row, .Column > Plg.Column)).Select
  End With
End Sub
Dans un module standard :​
Code:
Function PremièreCelluleVideSousDernièreCelluleNonVide(r As Range, Optional Ligne&) As Range
'r étant une cellule, la fonction renvoie la Première Cellule Vide Sous la Dernière Cellule NonVide en dessous de r.
'Le paramètre optionnel sert à limiter la plage de recherche.
    If Ligne = 0 Then Ligne = r.Parent.Rows.Count
    With r.Parent.Cells(Ligne, r.Column).End(xlUp).Offset(1)
        Set PremièreCelluleVideSousDernièreCelluleNonVide = _
            .Parent.Cells((.Row + r.Row + Abs(.Row - r.Row)) / 2, r.Column).Offset(IsEmpty(r.Value) * (r.Row = 1) * (.Row = 2))
    End With
End Function

Function PremièreCelluleVideADroiteDernièreCelluleNonVide(r As Range, Optional Colonne = 0) As Range
'r étant une cellule, la fonction renvoie la Première Cellule Vide À droite de la Dernière Cellule NonVide à droite de r.
'Le paramètre optionnel sert à limiter la plage de recherche.
    If Colonne = 0 Then Colonne = r.Parent.Columns.Count
    With r.Parent.Cells(r.Row, Colonne).End(xlToLeft).Offset(, 1)
        Set PremièreCelluleVideADroiteDernièreCelluleNonVide = _
            .Parent.Cells(r.Row, (.Column + r.Column + Abs(.Column - r.Column)) / 2).Offset(, IsEmpty(r.Value) * (r.Column = 1) * (.Column = 2))
    End With
End Function


Bonne nuit.


ℝOGER2327
#7654


Lundi 2 As 142 (Sainte Rrose Sélavy, héroïne - fête Suprême Quarte)
14 Brumaire An CCXXIII, 0,8769h - endive
2014-W45-2T02:06:16Z


P.s. : Le code proposé est approximatif ! Voir une autre version au message #10.
 

Pièces jointes

Dernière édition:
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Merci ça fonctionne super bien...
Par contre, j'ai mis les 2 codes dans mon module pour pouvoir faire appel directement à ta macro avec le bouton "fin"...
Code:
Sub fin()
Sheets("Feuil3").Select
BasDroite

End Sub

Code:
Sub BasDroite()
Const Colonne = "E" '(ou 5). Les colonnes à partir de la cinquième seront ignorées.
Dim Plg As Range
  Set Plg = [A2]
  With Cells(PremièreCelluleVideSousDernièreCelluleNonVide(Plg).Row, PremièreCelluleVideADroiteDernièreCelluleNonVide(Plg, "E").Column)
    Range(Plg, .Offset(.Row > Plg.Row, .Column > Plg.Column)).Select
  End With
    Selection.Copy
End Sub
 
Re : Macro sélectionner jusqu'à la dernière cellule non vide

Re...


Merci ça fonctionne super bien...
Par contre, j'ai mis les 2 codes dans mon module pour pouvoir faire appel directement à ta macro avec le bouton "fin"...
(...)
Tout va bien...

...ou presque, parce qu'en relisant le code, j'y ai trouvé quelques bourdes. D'autre part, l'obligation de garder vide la cellule E2 n'est pas satisfaisante.

Voici une autre version que j'espère plus robuste.​


Bonne soirée.


ℝOGER2327
#7656


Lundi 2 As 142 (Sainte Rrose Sélavy, héroïne - fête Suprême Quarte)
14 Brumaire An CCXXIII, 7,5511h - endive
2014-W45-2T18:07:21Z
 

Pièces jointes

- 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
2
Affichages
859
Réponses
22
Affichages
3 K
Retour