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
Suppose que tu as comme contenu dans la dernière cellule de ta colonne une formule compliquée du genre : =Si(A1="";"") qui n'affiche aucun contenu.
Si tu utilises le paramètre LookIn:=xlFormulas la dernière cellule de la colonne trouvée sera celle ayant cette formule.
Si tu utilises le paramètre LookIn:=XlValues la dernière cellule trouvée de la colonne sera celle affichant un contenu quelconque.
Quand tu ouvres Excel, ce paramètre est à XlFormulas par défaut mais comme Excel retient la valeur de ce paramètre lors de la dernière recherche qu'il a effectuée, il y a bien des chances que la procédure retourne des faussetés selon ce que l'usager cherche et la valeur du paramètre...Et il risque de chercher longtemps la source de son erreur... !
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : idtbtd$rcr$
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 Daniel,
Suppose que tu as comme contenu dans la dernière cellule de ta colonne
une formule compliquée du genre : =Si(A1="";"") qui n'affiche aucun
contenu.
Si tu utilises le paramètre LookIn:=xlFormulas
la dernière cellule de la colonne trouvée sera celle
ayant cette formule.
Si tu utilises le paramètre LookIn:=XlValues
la dernière cellule trouvée de la colonne sera celle
affichant un contenu quelconque.
Quand tu ouvres Excel, ce paramètre est à XlFormulas par défaut
mais comme Excel retient la valeur de ce paramètre lors de la
dernière recherche qu'il a effectuée, il y a bien des chances que la
procédure retourne des faussetés selon ce que l'usager cherche et
la valeur du paramètre...Et il risque de chercher longtemps la source
de son erreur... !
MichD
--------------------------------------------
"DanielCo" a écrit dans le message de groupe de discussion : idtbtd$rcr$1@speranza.aioe.org...
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
Suppose que tu as comme contenu dans la dernière cellule de ta colonne une formule compliquée du genre : =Si(A1="";"") qui n'affiche aucun contenu.
Si tu utilises le paramètre LookIn:=xlFormulas la dernière cellule de la colonne trouvée sera celle ayant cette formule.
Si tu utilises le paramètre LookIn:=XlValues la dernière cellule trouvée de la colonne sera celle affichant un contenu quelconque.
Quand tu ouvres Excel, ce paramètre est à XlFormulas par défaut mais comme Excel retient la valeur de ce paramètre lors de la dernière recherche qu'il a effectuée, il y a bien des chances que la procédure retourne des faussetés selon ce que l'usager cherche et la valeur du paramètre...Et il risque de chercher longtemps la source de son erreur... !
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : idtbtd$rcr$
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
michdenis
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$
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,
Que fais-tu si la colonne contient des formules ?
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$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
isabelle
vous avez tout à fait raison Daniel et Denis, ça rallonge un peut l'affaire,
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = plg1.Address b = plg2.Address c = a & b x = Split(c, ",") Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$
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
vous avez tout à fait raison Daniel et Denis,
ça rallonge un peut l'affaire,
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = plg1.Address
b = plg2.Address
c = a & b
x = Split(c, ",")
Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$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
vous avez tout à fait raison Daniel et Denis, ça rallonge un peut l'affaire,
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = plg1.Address b = plg2.Address c = a & b x = Split(c, ",") Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$
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
news.free.fr
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne
sont pas des formules.
Daniel
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
michdenis
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...
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtg94$598$
vous avez tout à fait raison Daniel et Denis, ça rallonge un peut l'affaire,
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = plg1.Address b = plg2.Address c = a & b x = Split(c, ",") Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$
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
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...
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtg94$598$1@speranza.aioe.org...
vous avez tout à fait raison Daniel et Denis,
ça rallonge un peut l'affaire,
On Error Resume Next
Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23)
Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23)
a = plg1.Address
b = plg2.Address
c = a & b
x = Split(c, ",")
Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD
--------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$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
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...
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtg94$598$
vous avez tout à fait raison Daniel et Denis, ça rallonge un peut l'affaire,
On Error Resume Next Set plg1 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeConstants, 23) Set plg2 = Columns(ActiveCell.Column).SpecialCells(xlCellTypeFormulas, 23) a = plg1.Address b = plg2.Address c = a & b x = Split(c, ",") Range(x(0) & ":" & x(UBound(x))).Select
isabelle
.
Le 2010-12-10 09:32, michdenis a écrit :
Bonjour Isabelle,
Que fais-tu si la colonne contient des formules ?
MichD -------------------------------------------- "isabelle" a écrit dans le message de groupe de discussion : idtcid$sqf$
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
michdenis
Je ne comprends pas le sens de ton commentaire...
La question, celle que j'ai comprise demandait de sélectionner la première et la dernière cellule occupée, sans faire la discrimination entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la méthode Find avec LookIn:=xlformulas et lookin:=xlvalues tu vas te rendre compte que la plage de cellules sélectionnées est très différente. Comme ce paramètre retient la valeur de la dernière recherche effectuée, durant une session, il devient impératif de définir ce paramètre afin d'obtenir le résultat escompté.
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : 4d024501$0$5044$
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
Je ne comprends pas le sens de ton commentaire...
La question, celle que j'ai comprise demandait de sélectionner
la première et la dernière cellule occupée, sans faire la discrimination
entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une
formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre
ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la
méthode Find avec LookIn:=xlformulas et lookin:=xlvalues
tu vas te rendre compte que la plage de cellules sélectionnées est très
différente.
Comme ce paramètre retient la valeur de la dernière recherche effectuée,
durant une session, il devient impératif de définir ce paramètre afin d'obtenir
le résultat escompté.
MichD
--------------------------------------------
"DanielCo" a écrit dans le message de groupe de discussion : 4d024501$0$5044$426a74cc@news.free.fr...
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne
sont pas des formules.
Daniel
La question, celle que j'ai comprise demandait de sélectionner la première et la dernière cellule occupée, sans faire la discrimination entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la méthode Find avec LookIn:=xlformulas et lookin:=xlvalues tu vas te rendre compte que la plage de cellules sélectionnées est très différente. Comme ce paramètre retient la valeur de la dernière recherche effectuée, durant une session, il devient impératif de définir ce paramètre afin d'obtenir le résultat escompté.
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : 4d024501$0$5044$
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
Daniel.C
Je me suis mal exprimé; je voulais simplement dire qu'avec "xlformulas", on récupérais la bonne cellule,, qu'il y ait dedans une formule ou une constante. Mais il faut spécifier "xlformulas" pour être bordé. Daniel
Je ne comprends pas le sens de ton commentaire...
La question, celle que j'ai comprise demandait de sélectionner la première et la dernière cellule occupée, sans faire la discrimination entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la méthode Find avec LookIn:=xlformulas et lookin:=xlvalues tu vas te rendre compte que la plage de cellules sélectionnées est très différente. Comme ce paramètre retient la valeur de la dernière recherche effectuée, durant une session, il devient impératif de définir ce paramètre afin d'obtenir le résultat escompté.
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : 4d024501$0$5044$
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
Je me suis mal exprimé; je voulais simplement dire qu'avec
"xlformulas", on récupérais la bonne cellule,, qu'il y ait dedans une
formule ou une constante. Mais il faut spécifier "xlformulas" pour être
bordé.
Daniel
Je ne comprends pas le sens de ton commentaire...
La question, celle que j'ai comprise demandait de sélectionner
la première et la dernière cellule occupée, sans faire la discrimination
entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une
formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre
ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la
méthode Find avec LookIn:=xlformulas et lookin:=xlvalues
tu vas te rendre compte que la plage de cellules sélectionnées est très
différente.
Comme ce paramètre retient la valeur de la dernière recherche effectuée,
durant une session, il devient impératif de définir ce paramètre afin
d'obtenir le résultat escompté.
MichD
--------------------------------------------
"DanielCo" a écrit dans le message de groupe de discussion :
4d024501$0$5044$426a74cc@news.free.fr...
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne
sont pas des formules.
Daniel
Je me suis mal exprimé; je voulais simplement dire qu'avec "xlformulas", on récupérais la bonne cellule,, qu'il y ait dedans une formule ou une constante. Mais il faut spécifier "xlformulas" pour être bordé. Daniel
Je ne comprends pas le sens de ton commentaire...
La question, celle que j'ai comprise demandait de sélectionner la première et la dernière cellule occupée, sans faire la discrimination entre les valeurs ou les éventuelles formules contenues dans la colonne.
Si tu entres comme première et dernière cellule de la colonne une formule qui retourne "" ((si(A1="";"") par exemple) et des valeurs entre ces 2 cellules, utilise à tour de rôle la procédure avec le paramètre de la méthode Find avec LookIn:=xlformulas et lookin:=xlvalues tu vas te rendre compte que la plage de cellules sélectionnées est très différente. Comme ce paramètre retient la valeur de la dernière recherche effectuée, durant une session, il devient impératif de définir ce paramètre afin d'obtenir le résultat escompté.
MichD -------------------------------------------- "DanielCo" a écrit dans le message de groupe de discussion : 4d024501$0$5044$
Oui, mais si on met xlformulas, Find trouve aussi les valeurs qui ne sont pas des formules. Daniel
isabelle
à 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...
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...
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...
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...
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...
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...