Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

xlUp et xlDown

7 réponses
Avatar
Tatanka
Bonjour,

Pour sélectionner la plage de la première
cellule non vide de la colonne A à la dernière
cellule non vide de la même colonne, on utilise
xlUp et xlDown. Il arrive cependant que ça
ne donne pas le bon résultat.
J'ai donc utilisé cette macro pour tout prévoir!
Qu'en pensez-vous et avez-vous d'autres suggestions ?

Sub Sélectionne()
Dim bas As Range, haut As Range
If Application.CountA([a:a]) = 0 Then
MsgBox "Aucune donnée dans la colonne A."
Exit Sub
End If
If [a65536] = "" Then Set bas = [a65536].End(xlUp) Else Set bas = [a65536]
If [a1] = "" Then Set haut = [a1].End(xlDown) Else Set haut = [a1]
Range(haut, bas).Select
End Sub

Serge

7 réponses

Avatar
perso
Bonsoir Serge,

On peut aussi de prévoir un peu plus,

En ces moments de changements possibles de versions, on pourrait
ajouter un test sur la version, car 2007 possède bien plus de cellules
que 2003 ou avant......

j'ai fait une petite macro qui prend ta demande en compte et qui
ajoute quelques tests + vérifie la version d'excel pour gérer le
nombre de cellules dans la colonne

La macro fonctionne sur la colonne active, mais tu faire un
Range("CeQueTuVeux").select au début pour forcer une colonne
particulière,
c'est donc un peu plus flexible et ré-utilisable
J'ai gardé tes variables haut & bas....

Voici le code:

Sub SelectionneToutPrévoir() 'Fait pour
fonctionner sur la colonne de la cellule active.
Dim haut As Range, bas As Range
Dim Ver As Long, CelluleFin As Long

CelluleFin = 65536
If Application.Version = "12.0" Then CelluleFin = 1048576

Set haut = Cells(1, ActiveCell.Column)
Set bas = Cells(CelluleFin, ActiveCell.Column)

If IsEmpty(haut) Then Set haut = haut.End(xlDown)
If IsEmpty(bas) Then Set bas = bas.End(xlUp)

If haut.Row = CelluleFin And bas.Row = 1 Then
'1048576 pour Excel 2007 ou 65536 pour Excel 2003 ou inférieur
ActiveCell.Select
MsgBox "Aucune donnée dans la colonne " &
Mid(ActiveCell.Address, 2, 1)
Else
Range(haut, bas).Select
End If

End Sub

Testé sur 2003 & 2007 pour ton info

Qu'en penses tu ?

Pat REDNEF
Avatar
Tatanka
Salut Pat,

C'est effectivement beaucoup plus souple et ça me semble impeccable.
Les concepteurs d'Excel auraient pu définir xlUp et xlDown sans que l'on
soit obligé de faire de telles contorsions, non ?

Serge



a écrit dans le message de news:
Bonsoir Serge,

On peut aussi de prévoir un peu plus,

En ces moments de changements possibles de versions, on pourrait
ajouter un test sur la version, car 2007 possède bien plus de cellules
que 2003 ou avant......

j'ai fait une petite macro qui prend ta demande en compte et qui
ajoute quelques tests + vérifie la version d'excel pour gérer le
nombre de cellules dans la colonne

La macro fonctionne sur la colonne active, mais tu faire un
Range("CeQueTuVeux").select au début pour forcer une colonne
particulière,
c'est donc un peu plus flexible et ré-utilisable
J'ai gardé tes variables haut & bas....

Voici le code:

Sub SelectionneToutPrévoir() 'Fait pour
fonctionner sur la colonne de la cellule active.
Dim haut As Range, bas As Range
Dim Ver As Long, CelluleFin As Long

CelluleFin = 65536
If Application.Version = "12.0" Then CelluleFin = 1048576

Set haut = Cells(1, ActiveCell.Column)
Set bas = Cells(CelluleFin, ActiveCell.Column)

If IsEmpty(haut) Then Set haut = haut.End(xlDown)
If IsEmpty(bas) Then Set bas = bas.End(xlUp)

If haut.Row = CelluleFin And bas.Row = 1 Then
'1048576 pour Excel 2007 ou 65536 pour Excel 2003 ou inférieur
ActiveCell.Select
MsgBox "Aucune donnée dans la colonne " &
Mid(ActiveCell.Address, 2, 1)
Else
Range(haut, bas).Select
End If

End Sub

Testé sur 2003 & 2007 pour ton info

Qu'en penses tu ?

Pat REDNEF
Avatar
Tatanka
Oups! Petite erreur dans ta macro pour trouver le nom de la colonne.

Une suggestion :

Sub Colonne()
ad = ActiveCell.Address(0, 0)
For i = 1 To Len(ad)
v = Mid(ad, i, 1)
If Not IsNumeric(v) Then c = c & v
Next i
MsgBox "Colonne active : " & c
End Sub

Serge


"Tatanka" a écrit dans le message de news:
Salut Pat,

C'est effectivement beaucoup plus souple et ça me semble impeccable.
Les concepteurs d'Excel auraient pu définir xlUp et xlDown sans que l'on
soit obligé de faire de telles contorsions, non ?

Serge



a écrit dans le message de news:
Bonsoir Serge,

On peut aussi de prévoir un peu plus,

En ces moments de changements possibles de versions, on pourrait
ajouter un test sur la version, car 2007 possède bien plus de cellules
que 2003 ou avant......

j'ai fait une petite macro qui prend ta demande en compte et qui
ajoute quelques tests + vérifie la version d'excel pour gérer le
nombre de cellules dans la colonne

La macro fonctionne sur la colonne active, mais tu faire un
Range("CeQueTuVeux").select au début pour forcer une colonne
particulière,
c'est donc un peu plus flexible et ré-utilisable
J'ai gardé tes variables haut & bas....

Voici le code:

Sub SelectionneToutPrévoir() 'Fait pour
fonctionner sur la colonne de la cellule active.
Dim haut As Range, bas As Range
Dim Ver As Long, CelluleFin As Long

CelluleFin = 65536
If Application.Version = "12.0" Then CelluleFin = 1048576

Set haut = Cells(1, ActiveCell.Column)
Set bas = Cells(CelluleFin, ActiveCell.Column)

If IsEmpty(haut) Then Set haut = haut.End(xlDown)
If IsEmpty(bas) Then Set bas = bas.End(xlUp)

If haut.Row = CelluleFin And bas.Row = 1 Then
'1048576 pour Excel 2007 ou 65536 pour Excel 2003 ou inférieur
ActiveCell.Select
MsgBox "Aucune donnée dans la colonne " &
Mid(ActiveCell.Address, 2, 1)
Else
Range(haut, bas).Select
End If

End Sub

Testé sur 2003 & 2007 pour ton info

Qu'en penses tu ?

Pat REDNEF







Avatar
perso
Merci pour ton message,

pas d'erreur à l'heure ou j'ai testé.....

Je check demain et reviens te donner mon avis

Tu es sur 2003 ?
Ca bog ou ?

Bonne nuit au MFPE et à toi,

Pat REDNEF
Avatar
anonymousA
Bonjour,

AMC , les procs ci-dessous fonctionnent pour toutes les versions d'Excel
supérieures ou égales à 2000 ( à cause de Split) et permet de trouver
pour toutes les plages de cellules les informations de position de
dernière ligne et de dernière colonne.
Cette utilisation de Find pour cette affaire fait partie des grands
classiques que tu peux trouver sur de multiples sites.
Attention, si il n'y a pas de dernière ligne ou de dernière colonne ,
les fonctions ci-dessus renvoient 0 ou rien. Tu peux perfectionner la
chose en les forçant à renvoyer autre chose.

Public Function Lastrow(rng As Range) As Long

Dim rngtemp As Range

If rng.Areas.Count > 1 Then MsgBox " pas possible sur zones non
contigues": Exit Function

Set rngtemp = rng.Find("*", rng.Range("A1"), xlFormulas, xlPart,
xlByRows, xlPrevious)

If Not rngtemp Is Nothing Then Lastrow = rngtemp.Row

End Function

Public Function Lastcolumn(rng As Range, Numcol As string) As Variant

Dim rngtemp As Range

If rng.Areas.Count > 1 Then MsgBox " pas possible sur zones non
contigues": Exit Function

Set rngtemp = rng.Find("*", rng.Range("A1"), xlFormulas, xlPart,
xlColumns, xlPrevious)

If Not rngtemp Is Nothing Then
If Numcol = "Yes" Then
Lastcolumn = rngtemp.Column
Else
Lastcolumn = Split(Cells(1, rngtemp.Column).Address, "$")(1)
End If
End If

End Function

A+


Bonjour,

Pour sélectionner la plage de la première
cellule non vide de la colonne A à la dernière
cellule non vide de la même colonne, on utilise
xlUp et xlDown. Il arrive cependant que ça
ne donne pas le bon résultat.
J'ai donc utilisé cette macro pour tout prévoir!
Qu'en pensez-vous et avez-vous d'autres suggestions ?

Sub Sélectionne()
Dim bas As Range, haut As Range
If Application.CountA([a:a]) = 0 Then
MsgBox "Aucune donnée dans la colonne A."
Exit Sub
End If
If [a65536] = "" Then Set bas = [a65536].End(xlUp) Else Set bas = [a65536]
If [a1] = "" Then Set haut = [a1].End(xlDown) Else Set haut = [a1]
Range(haut, bas).Select
End Sub

Serge




Avatar
perso
Merci AnonymousA de ton complément qui fonctionne parfaitement
également + un choix de fonction plutot qu'un Sub

Bien vu !...

pour Takanta, j'ai fait le test de mon code ce matin: Tout va bien

j'ai recopié dans un module le code qui est sur cette page, et il y a
juste une erreur de coupure lors du "Collage" dans le module

essaye de me dire si c'est cela le bug ou si tu as trouvé autre chose

Merci et bon Dimanche au Excellent participant de cette belle
communauté !

Pat REDNEF
2 simples 1 double HSS
Avatar
LSteph
Bonjour Serge , Patrick, & ...
;-)
toute version:

Function Bas() As Range
Set Bas = [a:a].Cells([a:a].Count)
If Bas = "" Then Set Bas = Bas.End(xlUp)
End Function

Function Haut() As Range
Set Haut = Cells(1, 1)
If Haut = "" Then Set Haut = Haut.End(xlDown)
End Function

Sub Selhautbas()
If Haut.Row > Bas.Row Then
MsgBox "Aucune plage remplie en a:a"
Else
Range(Haut, Bas).Columns(1).Select
End If
End Sub

'lSteph

Bonjour,

Pour sélectionner la plage de la première
cellule non vide de la colonne A à la dernière
cellule non vide de la même colonne, on utilise
xlUp et xlDown. Il arrive cependant que ça
ne donne pas le bon résultat.
J'ai donc utilisé cette macro pour tout prévoir!
Qu'en pensez-vous et avez-vous d'autres suggestions ?

Sub Sélectionne()
Dim bas As Range, haut As Range
If Application.CountA([a:a]) = 0 Then
MsgBox "Aucune donnée dans la colonne A."
Exit Sub
End If
If [a65536] = "" Then Set bas = [a65536].End(xlUp) Else Set bas = [a65536]
If [a1] = "" Then Set haut = [a1].End(xlDown) Else Set haut = [a1]
Range(haut, bas).Select
End Sub

Serge