Sélection première cellule non vide -> dernière non vide
35 réponses
Tatanka
Salutatous et toutes,
Je veux pourtant faire quelque chose de tout simple :
À partir d'une cellule active quelconque, sélectionner par macro la plage
s'étendant de la première cellule non vide de la colonne contenant la cellule active
à la dernière cellule non vide de ladite colonne. En prévoyant tous les cas de figure!
Peux pas croire qu'il n'y a pas quelque chose de moins tordu que ça :
Sub Première_Dernière()
Dim L1 As Long, L2 As Long, NL As Long
Dim c As Range
Dim a As Range
Set a = ActiveCell
Set c = Columns(a.Column)
If Application.CountA(c) = 0 Then
MsgBox "Aucune valeur dans cette colonne."
Exit Sub
End If
NL = c.Rows.Count
col = a.Column
If Not IsEmpty(c.Rows(1)) Then
L1 = 1
Else
L1 = c.Rows(1).End(xlDown).Row
End If
If Not IsEmpty(c.Rows(NL)) Then
L2 = NL
Else
L2 = c.Rows(NL).End(xlUp).Row
End If
Range(Cells(L1, col), Cells(L2, col)).Select
End Sub
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel et la tienne sélectionnent la même plage : http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes le même résultat ?
Serge
"michdenis" a écrit dans le message de news: idts2m$2cd$
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i)) < n(1) Then x = CDbl(n(i)) If CDbl(n(i)) > n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel
et la tienne sélectionnent la même plage :
http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes
le même résultat ?
Serge
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news: idts2m$2cd$1@speranza.aioe.org...
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-))
essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$1@speranza.aioe.org...
à force de ...
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), " "),
":", ",")
n = Split(a, ",")
For i = 0 To UBound(n)
If CDbl(n(i)) < n(1) Then x = CDbl(n(i))
If CDbl(n(i)) > n(1) Then y = CDbl(n(i))
Next i
Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"")
et entre les deux, des cellules contenant des constantes...
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel et la tienne sélectionnent la même plage : http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes le même résultat ?
Serge
"michdenis" a écrit dans le message de news: idts2m$2cd$
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i)) < n(1) Then x = CDbl(n(i)) If CDbl(n(i)) > n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande, c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i))< n(1) Then x = CDbl(n(i)) If CDbl(n(i))> n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande,
c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-))
essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$1@speranza.aioe.org...
à force de ...
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), " "),
":", ",")
n = Split(a, ",")
For i = 0 To UBound(n)
If CDbl(n(i))< n(1) Then x = CDbl(n(i))
If CDbl(n(i))> n(1) Then y = CDbl(n(i))
Next i
Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"")
et entre les deux, des cellules contenant des constantes...
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande, c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i))< n(1) Then x = CDbl(n(i)) If CDbl(n(i))> n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
Ca passe pour moi, mais ça prend 5 mn (colonne compplètement remplie). Daniel
michdenis
Non, la méthode que tu utilises a une limite...et je crois qu'elle est surtout basée sur le nombre de plages discontinues qu'il y a dans la plage...Mais je ne connais pas cette limite de façon opérationnelle si ce n'est qu'il faut s'en méfier sur des plages plus étendues !
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idttaf$4ur$
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande, c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i))< n(1) Then x = CDbl(n(i)) If CDbl(n(i))> n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
Non, la méthode que tu utilises a une limite...et je crois qu'elle est
surtout basée sur le nombre de plages discontinues qu'il y a dans la
plage...Mais je ne connais pas cette limite de façon opérationnelle
si ce n'est qu'il faut s'en méfier sur des plages plus étendues !
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idttaf$4ur$1@speranza.aioe.org...
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande,
c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-))
essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$1@speranza.aioe.org...
à force de ...
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), "
"),
":", ",")
n = Split(a, ",")
For i = 0 To UBound(n)
If CDbl(n(i))< n(1) Then x = CDbl(n(i))
If CDbl(n(i))> n(1) Then y = CDbl(n(i))
Next i
Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"")
et entre les deux, des cellules contenant des constantes...
Non, la méthode que tu utilises a une limite...et je crois qu'elle est surtout basée sur le nombre de plages discontinues qu'il y a dans la plage...Mais je ne connais pas cette limite de façon opérationnelle si ce n'est qu'il faut s'en méfier sur des plages plus étendues !
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idttaf$4ur$
j'ai un message pour "xlCellTypeConstants" comme quoi la sélection est trop grande, c'est mon pc qui n'est pas assez puissant ?
isabelle
Le 2010-12-10 13:36, michdenis a écrit :
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address& ","& plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i))< n(1) Then x = CDbl(n(i)) If CDbl(n(i))> n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
Finalement, après simplifications, ma macro n'est pas si tordue que ça :
Sub Serge() Dim L1&, L2&, NL& Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne." Exit Sub End If NL = c.Rows.Count col = ActiveCell.Column L1 = IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1) L2 = IIf(IsEmpty(c.Rows(NL)), c.Rows(NL).End(xlUp).Row, NL) Range(Cells(L1, col), Cells(L2, col)).Select MsgBox Selection.Address, vbCritical, "Plage sélectionnée" End Sub
et semble donner les mêmes résultats que celle-ci :
Sub Daniel_Avec_Ajout() Dim col As Range, Cellsup As Range, Cellinf As Range Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select MsgBox Selection.Address, vbCritical, "Plage sélectionnée" End Sub
Mais là je m'inquiète :-) Denis va peut-être trouver un cas ou ces macros ne remplissent pas leur mission !
Serge
Finalement, après simplifications, ma macro n'est pas si tordue que ça :
Sub Serge()
Dim L1&, L2&, NL&
Dim c As Range
Set c = Columns(ActiveCell.Column)
If Application.CountA(c) = 0 Then
MsgBox "Aucune valeur dans cette colonne."
Exit Sub
End If
NL = c.Rows.Count
col = ActiveCell.Column
L1 = IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1)
L2 = IIf(IsEmpty(c.Rows(NL)), c.Rows(NL).End(xlUp).Row, NL)
Range(Cells(L1, col), Cells(L2, col)).Select
MsgBox Selection.Address, vbCritical, "Plage sélectionnée"
End Sub
et semble donner les mêmes résultats que celle-ci :
Sub Daniel_Avec_Ajout()
Dim col As Range, Cellsup As Range, Cellinf As Range
Set col = ActiveCell.EntireColumn
If Application.CountA(col) = 0 Then
MsgBox "Colonne vide."
Exit Sub
End If
Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext)
Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious)
Range(Cellsup, Cellinf).Select
MsgBox Selection.Address, vbCritical, "Plage sélectionnée"
End Sub
Mais là je m'inquiète :-) Denis va peut-être trouver un cas ou ces macros
ne remplissent pas leur mission !
Finalement, après simplifications, ma macro n'est pas si tordue que ça :
Sub Serge() Dim L1&, L2&, NL& Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne." Exit Sub End If NL = c.Rows.Count col = ActiveCell.Column L1 = IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1) L2 = IIf(IsEmpty(c.Rows(NL)), c.Rows(NL).End(xlUp).Row, NL) Range(Cells(L1, col), Cells(L2, col)).Select MsgBox Selection.Address, vbCritical, "Plage sélectionnée" End Sub
et semble donner les mêmes résultats que celle-ci :
Sub Daniel_Avec_Ajout() Dim col As Range, Cellsup As Range, Cellinf As Range Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select MsgBox Selection.Address, vbCritical, "Plage sélectionnée" End Sub
Mais là je m'inquiète :-) Denis va peut-être trouver un cas ou ces macros ne remplissent pas leur mission !
Les explications ont été données sur les autres messages de ce fil.
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtt5u$4tg$
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel et la tienne sélectionnent la même plage : http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes le même résultat ?
Serge
"michdenis" a écrit dans le message de news: idts2m$2cd$
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i)) < n(1) Then x = CDbl(n(i)) If CDbl(n(i)) > n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
Les explications ont été données sur les autres messages de ce fil.
MichD
--------------------------------------------
"Tatanka" a écrit dans le message de groupe de discussion : idtt5u$4tg$1@speranza.aioe.org...
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel
et la tienne sélectionnent la même plage :
http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes
le même résultat ?
Serge
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news: idts2m$2cd$1@speranza.aioe.org...
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-))
essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$1@speranza.aioe.org...
à force de ...
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), "
"),
":", ",")
n = Split(a, ",")
For i = 0 To UBound(n)
If CDbl(n(i)) < n(1) Then x = CDbl(n(i))
If CDbl(n(i)) > n(1) Then y = CDbl(n(i))
Next i
Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"")
et entre les deux, des cellules contenant des constantes...
Les explications ont été données sur les autres messages de ce fil.
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtt5u$4tg$
En tous cas, en reprenant ton exemple; ma macro, celle de Daniel et la tienne sélectionnent la même plage : http://www.cijoint.fr/cjlink.php?file=cj201012/cijaK91wkg.xls
Peux-tu me trouver un cas où les macros ne donneraient pas toutes le même résultat ?
Serge
"michdenis" a écrit dans le message de news: idts2m$2cd$
C'est mieux, mais tu ne crois sûrement pas que tu vas t'en tirer aussi facilement ;-)) essaie d'appliquer ta méthode à la colonne 1 du fichier que je te propose !
http://cjoint.com/?0mktIKBMUn7
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtqui$vfv$
à force de ...
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = Application.Substitute(Application.Substitute(plg1.Address & "," & plg2.Address, Left(ActiveCell.Address, 3), " "), ":", ",") n = Split(a, ",") For i = 0 To UBound(n) If CDbl(n(i)) < n(1) Then x = CDbl(n(i)) If CDbl(n(i)) > n(1) Then y = CDbl(n(i)) Next i Range(Cells(x, ActiveCell.Column), Cells(y, ActiveCell.Column)).Select
isabelle
Le 2010-12-10 10:53, michdenis a écrit :
Je crois que tu tentes de nous en passer une vite...;-))
Je n'obtiens pas le résultat espéré !
Ma plage débute et se terminer par une cellule contenant ce genre de formule : =SI(B3="";"") et entre les deux, des cellules contenant des constantes...
Sub Première_Dernière2() Dim L1 As Long, L2 As Long, Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement() Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select End Sub
me semble parfaite.
Serge
et la tienne également, là v'la un peu condensé,
Sub Première_Dernière2()
Dim L1 As Long, L2 As Long, Dim c As Range
Set c = Columns(ActiveCell.Column)
If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub
If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row
If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row
Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select
End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement()
Set col = ActiveCell.EntireColumn
If Application.CountA(col) = 0 Then
MsgBox "Colonne vide."
Exit Sub
End If
Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext)
Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious)
Range(Cellsup, Cellinf).Select
End Sub
Sub Première_Dernière2() Dim L1 As Long, L2 As Long, Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement() Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select End Sub
me semble parfaite.
Serge
Tatanka
Bonne fin de semaine Isabelle et essaie de ne pas congeler si tu mets le bout du nez dehors. Et pour rigoler :
Sub Tellement_Simple() Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub Range(Cells(IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1), c.Column), _ Cells(IIf(IsEmpty(c.Rows(c.Rows.Count)), c.Rows(c.Rows.Count).End(xlUp).Row, _ c.Rows.Count), c.Column)).Select End Sub
Serge
"isabelle" a écrit dans le message de news: idu0pv$dq7$
et la tienne également, là v'la un peu condensé,
Sub Première_Dernière2() Dim L1 As Long, L2 As Long, Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement() Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select End Sub
me semble parfaite.
Serge
Bonne fin de semaine Isabelle et essaie de ne pas congeler si
tu mets le bout du nez dehors. Et pour rigoler :
Sub Tellement_Simple()
Dim c As Range
Set c = Columns(ActiveCell.Column)
If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub
Range(Cells(IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1), c.Column), _
Cells(IIf(IsEmpty(c.Rows(c.Rows.Count)), c.Rows(c.Rows.Count).End(xlUp).Row, _
c.Rows.Count), c.Column)).Select
End Sub
Serge
"isabelle" <i@v.org> a écrit dans le message de news: idu0pv$dq7$1@speranza.aioe.org...
et la tienne également, là v'la un peu condensé,
Sub Première_Dernière2()
Dim L1 As Long, L2 As Long, Dim c As Range
Set c = Columns(ActiveCell.Column)
If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub
If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row
If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row
Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select
End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement()
Set col = ActiveCell.EntireColumn
If Application.CountA(col) = 0 Then
MsgBox "Colonne vide."
Exit Sub
End If
Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext)
Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious)
Range(Cellsup, Cellinf).Select
End Sub
Bonne fin de semaine Isabelle et essaie de ne pas congeler si tu mets le bout du nez dehors. Et pour rigoler :
Sub Tellement_Simple() Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub Range(Cells(IIf(IsEmpty(c.Rows(1)), c.Rows(1).End(xlDown).Row, 1), c.Column), _ Cells(IIf(IsEmpty(c.Rows(c.Rows.Count)), c.Rows(c.Rows.Count).End(xlUp).Row, _ c.Rows.Count), c.Column)).Select End Sub
Serge
"isabelle" a écrit dans le message de news: idu0pv$dq7$
et la tienne également, là v'la un peu condensé,
Sub Première_Dernière2() Dim L1 As Long, L2 As Long, Dim c As Range Set c = Columns(ActiveCell.Column) If Application.CountA(c) = 0 Then MsgBox "Aucune valeur dans cette colonne.": Exit Sub If Not IsEmpty(c.Rows(1)) Then L1 = 1 Else L1 = c.Rows(1).End(xlDown).Row If Not IsEmpty(c.Rows(c.Rows.Count)) Then L2 = c.Rows.Count Else L2 = c.Rows(c.Rows.Count).End(xlUp).Row Range(Cells(L1, c.Column), Cells(L2, c.Column)).Select End Sub
isabelle
Le 2010-12-10 08:38, Tatanka a écrit :
Merci Daniel et Denis,
Sub Et_Finalement() Set col = ActiveCell.EntireColumn If Application.CountA(col) = 0 Then MsgBox "Colonne vide." Exit Sub End If Set Cellsup = col.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set Cellinf = col.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(Cellsup, Cellinf).Select End Sub