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
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
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
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
Tatanka
Bonsoir Isabelle,
Pas très chaud à Québec aujourd'hui :-) Ta macro ne tient pas compte de tous les cas possibles mais elle m'inspire.
Bonne nuit, « Si je devais recommencer ma vie, je ferais les mêmes erreurs... mais plus tôt ». G.M.
Serge
"isabelle" a écrit dans le message de news: idsb1n$km2$
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
Bonsoir Isabelle,
Pas très chaud à Québec aujourd'hui :-)
Ta macro ne tient pas compte de tous les cas possibles mais elle m'inspire.
Bonne nuit,
« Si je devais recommencer ma vie, je ferais les mêmes erreurs... mais plus tôt ».
G.M.
Serge
"isabelle" <i@v.org> a écrit dans le message de news: idsb1n$km2$1@speranza.aioe.org...
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
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
DanielCo
Bonjour. Peut-être : Sub test() Set CellSup = ActiveCell.EntireColumn.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set CellInf = ActiveCell.EntireColumn.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(CellSup, CellInf).Select End Sub Cordialement. Daniel
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
Qu'en pensez-vous ?
A+ Serge
Bonjour.
Peut-être :
Sub test()
Set CellSup = ActiveCell.EntireColumn.Find("*", Cells(Rows.Count,
ActiveCell.Column), , , , xlNext)
Set CellInf = ActiveCell.EntireColumn.Find("*", Cells(1,
ActiveCell.Column), , , , xlPrevious)
Range(CellSup, CellInf).Select
End Sub
Cordialement.
Daniel
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
Bonjour. Peut-être : Sub test() Set CellSup = ActiveCell.EntireColumn.Find("*", Cells(Rows.Count, ActiveCell.Column), , , , xlNext) Set CellInf = ActiveCell.EntireColumn.Find("*", Cells(1, ActiveCell.Column), , , , xlPrevious) Range(CellSup, CellInf).Select End Sub Cordialement. Daniel
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
Qu'en pensez-vous ?
A+ Serge
michdenis
Bonjour,
Pour tous les cas de figure, je te propose ceci :
'----------------------------------- Sub Sélection_dans_Colonne() Dim LastLine As Long, FirstLine As Long On Error Resume Next With ActiveCell With .EntireColumn LastLine = .Cells.Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row FirstLine = .Cells.Find(What:="*", _ After:Îlls(LastLine, .Column), _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext).Row End With Range(Cells(FirstLine, .Column), Cells(LastLine, .Column)).Select End With If Err <> 0 Then Err = 0 MsgBox "la colonne est entirement vide" End If End Sub '-----------------------------------
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : ids510$7kj$
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
Qu'en pensez-vous ?
A+ Serge
Bonjour,
Pour tous les cas de figure, je te propose ceci :
'-----------------------------------
Sub Sélection_dans_Colonne()
Dim LastLine As Long, FirstLine As Long
On Error Resume Next
With ActiveCell
With .EntireColumn
LastLine = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
FirstLine = .Cells.Find(What:="*", _
After:Îlls(LastLine, .Column), _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext).Row
End With
Range(Cells(FirstLine, .Column), Cells(LastLine, .Column)).Select
End With
If Err <> 0 Then
Err = 0
MsgBox "la colonne est entirement vide"
End If
End Sub
'-----------------------------------
MichD
--------------------------------------------
"Tatanka" a écrit dans le message de groupe de discussion : ids510$7kj$1@speranza.aioe.org...
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
'----------------------------------- Sub Sélection_dans_Colonne() Dim LastLine As Long, FirstLine As Long On Error Resume Next With ActiveCell With .EntireColumn LastLine = .Cells.Find(What:="*", _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row FirstLine = .Cells.Find(What:="*", _ After:Îlls(LastLine, .Column), _ LookIn:=xlFormulas, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext).Row End With Range(Cells(FirstLine, .Column), Cells(LastLine, .Column)).Select End With If Err <> 0 Then Err = 0 MsgBox "la colonne est entirement vide" End If End Sub '-----------------------------------
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : ids510$7kj$
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
Qu'en pensez-vous ?
A+ Serge
Tatanka
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
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 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
michdenis
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres
dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches.
Au même titre que tu dois te rappeler que la méthode find retient pour certains
de ses paramètres la valeur donnée lors du dernier usage de la méthode Find
qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même
session de travail. Pour plus de détails, voir la note en bas de page de l'aide
d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD
--------------------------------------------
"Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$1@speranza.aioe.org...
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
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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
Ave Denis,
Beau sujet de réflexion. J'ai sauté trop vite aux conclusions ( pas la première fois ).
Bonne journée Serge
"michdenis" a écrit dans le message de news: idtb6f$poe$
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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
Ave Denis,
Beau sujet de réflexion.
J'ai sauté trop vite aux conclusions ( pas la première fois ).
Bonne journée
Serge
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news: idtb6f$poe$1@speranza.aioe.org...
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres
dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches.
Au même titre que tu dois te rappeler que la méthode find retient pour certains
de ses paramètres la valeur donnée lors du dernier usage de la méthode Find
qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même
session de travail. Pour plus de détails, voir la note en bas de page de l'aide
d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD
--------------------------------------------
"Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$1@speranza.aioe.org...
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
Beau sujet de réflexion. J'ai sauté trop vite aux conclusions ( pas la première fois ).
Bonne journée Serge
"michdenis" a écrit dans le message de news: idtb6f$poe$
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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
DanielCo
Bonjour Denis, Je ne pense pas que le paramètre "LookIn" joue quand tu cherches "*", mais si c'est le cas, pour ma gouverne, donne-moi un exemple. Daniel
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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
Bonjour Denis,
Je ne pense pas que le paramètre "LookIn" joue quand tu cherches "*",
mais si c'est le cas, pour ma gouverne, donne-moi un exemple.
Daniel
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains
paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu
recherches. Au même titre que tu dois te rappeler que la méthode find retient
pour certains de ses paramètres la valeur donnée lors du dernier usage de la
méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à
l'intérieur d'une même session de travail. Pour plus de détails, voir la note
en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD
--------------------------------------------
"Tatanka" a écrit dans le message de groupe de discussion :
idtaen$nq4$1@speranza.aioe.org...
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
Bonjour Denis, Je ne pense pas que le paramètre "LookIn" joue quand tu cherches "*", mais si c'est le cas, pour ma gouverne, donne-moi un exemple. Daniel
Sauf si tu as des formules dans la plage qui retourne "" par exemple.
La méthode Find est alambiquée... il faut faire attention à certains paramètres dont : LookIn:=xlFormulas OU LookIn:=xlValues selon ce que tu recherches. Au même titre que tu dois te rappeler que la méthode find retient pour certains de ses paramètres la valeur donnée lors du dernier usage de la méthode Find qu'elle soit appelée en VBA ou par l'interface de calcul à l'intérieur d'une même session de travail. Pour plus de détails, voir la note en bas de page de l'aide d'Excel sur la méthode Find
Selon moi, ton approche n'est pas valide en "TOUTES" circonstances !
MichD -------------------------------------------- "Tatanka" a écrit dans le message de groupe de discussion : idtaen$nq4$
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è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
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
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
DanielCo
Bonjour Isabelle. Sauf que si la première ou la dernière cellule contient une formule, elle n'est pas prise en compte. Cordialement. Daniel
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
Bonjour Isabelle.
Sauf que si la première ou la dernière cellule contient une formule,
elle n'est pas prise en compte.
Cordialement.
Daniel
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
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