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

la dernière vraie valeur

41 réponses
Avatar
Misange
Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une formule
qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage qui
contient une valeur (non vide). Je ne trouve que des trucs hyper
compliqués. Qu'est ce qui vous semble le plus simple ?
marchi
--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

10 réponses

1 2 3 4 5
Avatar
isabelle
pour faire plus court,

If Not IsError([k]) Then Names("k").Delete
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58))),MAX(IF(Feuil2!$D$9:$Z$58<>"""",COLUMN(Feuil2!$D$9:$Z$58))))"
MsgBox [k]


isabelle


au plaisir flo,
je trouve cette méthode bien pratique pour récupérer en vba les formules
matricielle concocées par nos chigouristes (frère v et cie)
alors au passage merci également à eux,

isabelle


YESSS !
bravo Isabelle t'es la meilleure :-)
mille mercis
trouver cette adresse sur une feuille ne comportant rien d'autre
c'était OK mais j'arrivais vraiment pas à le restreindre à une plage
donnée

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour l'adresse complete,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
If Not IsError([y]) Then Names("y").Delete
Names.Add Name:="y",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",Column(Feuil2!$D$9:$Z$58)))"
MsgBox Cells([z], [y]).Address


isabelle


Bonjour Mon ange
héhé ! intéressante soluce. mais la même à l'intersection de la
dernière ligne et de la dernière colonne ?
Une tite question et plein de répondeurs avec des soluces
différentes, y'a pas c'est sympa le MPFe ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


salut Misange,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
MsgBox [z]


isabelle


Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une
formule qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage
qui contient une valeur (non vide). Je ne trouve que des trucs
hyper compliqués. Qu'est ce qui vous semble le plus simple ?
marchi












Avatar
Misange
et voili voilà tout ça est en ligne sur excelabo ;-)
merci à votre active collaboration à tous
bisous
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

pour faire plus court,

If Not IsError([k]) Then Names("k").Delete
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58))),MAX(IF(Feuil2!$D$9:$Z$58<>"""",COLUMN(Feuil2!$D$9:$Z$58))))"

MsgBox [k]


isabelle


au plaisir flo,
je trouve cette méthode bien pratique pour récupérer en vba les
formules matricielle concocées par nos chigouristes (frère v et cie)
alors au passage merci également à eux,

isabelle


YESSS !
bravo Isabelle t'es la meilleure :-)
mille mercis
trouver cette adresse sur une feuille ne comportant rien d'autre
c'était OK mais j'arrivais vraiment pas à le restreindre à une plage
donnée

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour l'adresse complete,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
If Not IsError([y]) Then Names("y").Delete
Names.Add Name:="y",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",Column(Feuil2!$D$9:$Z$58)))"
MsgBox Cells([z], [y]).Address


isabelle


Bonjour Mon ange
héhé ! intéressante soluce. mais la même à l'intersection de la
dernière ligne et de la dernière colonne ?
Une tite question et plein de répondeurs avec des soluces
différentes, y'a pas c'est sympa le MPFe ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


salut Misange,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
MsgBox [z]


isabelle


Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une
formule qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage
qui contient une valeur (non vide). Je ne trouve que des trucs
hyper compliqués. Qu'est ce qui vous semble le plus simple ?
marchi














Avatar
isabelle
merci à toi flo,

j'ai une petite correction à te demander,

il faut toujours mettre des adresses absolue lorsque l'on crée un nom car celles ci peuvent se modifier à l'usage.

isabelle


et voili voilà tout ça est en ligne sur excelabo ;-)
merci à votre active collaboration à tous
bisous
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour faire plus court,

If Not IsError([k]) Then Names("k").Delete
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58))),MAX(IF(Feuil2!$D$9:$Z$58<>"""",COLUMN(Feuil2!$D$9:$Z$58))))"

MsgBox [k]


isabelle


au plaisir flo,
je trouve cette méthode bien pratique pour récupérer en vba les
formules matricielle concocées par nos chigouristes (frère v et cie)
alors au passage merci également à eux,

isabelle


YESSS !
bravo Isabelle t'es la meilleure :-)
mille mercis
trouver cette adresse sur une feuille ne comportant rien d'autre
c'était OK mais j'arrivais vraiment pas à le restreindre à une plage
donnée

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour l'adresse complete,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
If Not IsError([y]) Then Names("y").Delete
Names.Add Name:="y",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",Column(Feuil2!$D$9:$Z$58)))"

MsgBox Cells([z], [y]).Address


isabelle


Bonjour Mon ange
héhé ! intéressante soluce. mais la même à l'intersection de la
dernière ligne et de la dernière colonne ?
Une tite question et plein de répondeurs avec des soluces
différentes, y'a pas c'est sympa le MPFe ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


salut Misange,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
MsgBox [z]


isabelle


Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une
formule qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage
qui contient une valeur (non vide). Je ne trouve que des trucs
hyper compliqués. Qu'est ce qui vous semble le plus simple ?
marchi
















Avatar
MichDenis
Bonjour Isabelle,

à partir de ta formule
Pour les fins de la discussion,
If Not IsError([k]) Then Names("k").Delete
la ligne de code précédente n'est pas nécessaire ...
si oui, je ne sais pas pourquoi .... ça commence bien ! ;-))

Si la plage est grande, l'usage de cette formule augmente grandement
le temps de traitement de la procédure...

Au lieu de faire appel à un "Nom" pour contenir la formule
pourquoi ne pas utiliser la méthode "Evaluate()"

Ta formule transcrite de cette manière me semble-t-il la rend
plus accessible aux modifications possibles de la dimension
de la plage de cellules.

Et ça va faire tellement plaisir à AV ;-))))

'---------------------
Sub test()
Dim Adr As String, X As String
With Worksheets("Feuil2")
Adr = .Name & "!" & .Range("D9:Z58").Address
X = Evaluate("ADDRESS(MAX(IF(" & Adr & "<>"""",ROW(" & Adr & _
"))),MAX(IF(" & Adr & "<>"""",COLUMN(" & Adr & "))))")
End With
MsgBox X
End Sub
'-----------------------




"isabelle" a écrit dans le message de news:
pour faire plus court,

If Not IsError([k]) Then Names("k").Delete
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58))),MAX(IF(Feuil2!$D$9:$Z$58<>"""",COLUMN(Feuil2!$D$9:$Z$58))))"
MsgBox [k]


isabelle


au plaisir flo,
je trouve cette méthode bien pratique pour récupérer en vba les formules
matricielle concocées par nos chigouristes (frère v et cie)
alors au passage merci également à eux,

isabelle


YESSS !
bravo Isabelle t'es la meilleure :-)
mille mercis
trouver cette adresse sur une feuille ne comportant rien d'autre
c'était OK mais j'arrivais vraiment pas à le restreindre à une plage
donnée

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour l'adresse complete,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
If Not IsError([y]) Then Names("y").Delete
Names.Add Name:="y",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",Column(Feuil2!$D$9:$Z$58)))"
MsgBox Cells([z], [y]).Address


isabelle


Bonjour Mon ange
héhé ! intéressante soluce. mais la même à l'intersection de la
dernière ligne et de la dernière colonne ?
Une tite question et plein de répondeurs avec des soluces
différentes, y'a pas c'est sympa le MPFe ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


salut Misange,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
MsgBox [z]


isabelle


Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une
formule qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage
qui contient une valeur (non vide). Je ne trouve que des trucs
hyper compliqués. Qu'est ce qui vous semble le plus simple ?
marchi












Avatar
Misange
Salut Isabelle et Denis

Bon j'attends encore pour faire les corrections ;-)
ici c'est férié aujourd'hui, je suppose qu'AV est absent. On verra aussi
la couleur de son grain de sel !
Finalement j'ai bien fait de poser cette question, ça met de
l'excellente animation :-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour Isabelle,

à partir de ta formule
Pour les fins de la discussion,
If Not IsError([k]) Then Names("k").Delete
la ligne de code précédente n'est pas nécessaire ...
si oui, je ne sais pas pourquoi .... ça commence bien ! ;-))

Si la plage est grande, l'usage de cette formule augmente grandement
le temps de traitement de la procédure...

Au lieu de faire appel à un "Nom" pour contenir la formule
pourquoi ne pas utiliser la méthode "Evaluate()"

Ta formule transcrite de cette manière me semble-t-il la rend
plus accessible aux modifications possibles de la dimension
de la plage de cellules.

Et ça va faire tellement plaisir à AV ;-))))

'---------------------
Sub test()
Dim Adr As String, X As String
With Worksheets("Feuil2")
Adr = .Name & "!" & .Range("D9:Z58").Address
X = Evaluate("ADDRESS(MAX(IF(" & Adr & "<>"""",ROW(" & Adr & _
"))),MAX(IF(" & Adr & "<>"""",COLUMN(" & Adr & "))))")
End With
MsgBox X
End Sub
'-----------------------




"isabelle" a écrit dans le message de news:
pour faire plus court,

If Not IsError([k]) Then Names("k").Delete
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58))),MAX(IF(Feuil2!$D$9:$Z$58<>"""",COLUMN(Feuil2!$D$9:$Z$58))))"
MsgBox [k]


isabelle


au plaisir flo,
je trouve cette méthode bien pratique pour récupérer en vba les formules
matricielle concocées par nos chigouristes (frère v et cie)
alors au passage merci également à eux,

isabelle


YESSS !
bravo Isabelle t'es la meilleure :-)
mille mercis
trouver cette adresse sur une feuille ne comportant rien d'autre
c'était OK mais j'arrivais vraiment pas à le restreindre à une plage
donnée

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


pour l'adresse complete,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
If Not IsError([y]) Then Names("y").Delete
Names.Add Name:="y",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",Column(Feuil2!$D$9:$Z$58)))"
MsgBox Cells([z], [y]).Address


isabelle


Bonjour Mon ange
héhé ! intéressante soluce. mais la même à l'intersection de la
dernière ligne et de la dernière colonne ?
Une tite question et plein de répondeurs avec des soluces
différentes, y'a pas c'est sympa le MPFe ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


salut Misange,

If Not IsError([z]) Then Names("z").Delete
Names.Add Name:="z",
RefersTo:="=MAX(IF(Feuil2!$D$9:$Z$58<>"""",ROW(Feuil2!$D$9:$Z$58)))"
MsgBox [z]


isabelle


Coucou,
j'ai une plage de données, D9:Z58. Chaque cellule contient une
formule qui renvoie soit une valeur soit "".
Je cherche *en VBA* l'adresse de la dernière cellule de la plage
qui contient une valeur (non vide). Je ne trouve que des trucs
hyper compliqués. Qu'est ce qui vous semble le plus simple ?
marchi
















Avatar
isabelle
salut Denis,


Bonjour Isabelle,
à partir de ta formule
Pour les fins de la discussion,
If Not IsError([k]) Then Names("k").Delete
la ligne de code précédente n'est pas nécessaire ...
si oui, je ne sais pas pourquoi .... ça commence bien ! ;-))


parce que sur mon poste, si le nom exist déjà, j'obtient un erreur

Si la plage est grande, l'usage de cette formule augmente grandement
le temps de traitement de la procédure...


tu es certain que cela s'applique à un "Nom" défini, ?
j'vois pas de différence, c'est vrai que j'ai une super bécanne à double processeur + coprocesseur math
c'est peut être là la différence,

Au lieu de faire appel à un "Nom" pour contenir la formule
pourquoi ne pas utiliser la méthode "Evaluate()"


ha on sait bien que notre homme aime bien évaluer la chose ;-)

Ta formule transcrite de cette manière me semble-t-il la rend
plus accessible aux modifications possibles de la dimension
de la plage de cellules.


mais dans les 2 cas on peut utiliser les variables pour rendre la chose plus facile d'utilisation,

Sub test2()
If Not IsError([k]) Then Names("k").Delete
Dim Adr As String
Adr = Worksheets("Feuil2").Name & "!" & Range("$D$9:$Z$58").Address
ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
"­DRESS(MAX(IF(" & Adr & "<>"""",ROW(" & Adr & "))),MAX(IF(" & Adr & "<>"""",COLUMN(" & Adr & "))))"
MsgBox [k]
End Sub

isabelle

Avatar
MichDenis
Bonjour Isabelle,
à partir de ta formule
Pour les fins de la discussion,
If Not IsError([k]) Then Names("k").Delete
la ligne de code précédente n'est pas nécessaire ...
si oui, je ne sais pas pourquoi .... ça commence bien ! ;-))


| parce que sur mon poste, si le nom exist déjà, j'obtient un erreur
*** fait le test suivante
range("A1:A5").Name = "Toto"
Range("B10:B15").Name = "Toto"
Le nom "Toto" refers à la dernière plage désignée et cela ne
provoque aucune erreur sur Excel 2003


Si la plage est grande, l'usage de cette formule augmente grandement
le temps de traitement de la procédure...


| tu es certain que cela s'applique à un "Nom" défini, ?
**** Pas particulièrement à un nom défini mais à une formule matricielle
et la formule que tu proposes est une formule matricielle ...
J'ai essayé une plage : "B5:Z50000" et ma bécane a senti toute
la différence : P2-400 il n'y a pas plus vieux saus ton ange JPS ;-))


| mais dans les 2 cas on peut utiliser les variables pour rendre la chose plus facile
d'utilisation,
**** Comme c'est la même chose, pourquoi crée un "Nom" puisque le résultat
doit être disponible en VBA

Ah, je vois ta syntaxe est très similaire à la mienne ! ;-)))

| Sub test2()

| If Not IsError([k]) Then Names("k").Delete
| Dim Adr As String
| Adr = Worksheets("Feuil2").Name & "!" & Range("$D$9:$Z$58").Address
| ActiveWorkbook.Names.Add Name:="k", RefersTo:= _
| "­DRESS(MAX(IF(" & Adr & "<>"""",ROW(" & Adr & "))),MAX(IF(" & Adr & "<>"""",COLUMN(" & Adr &
"))))"
| MsgBox [k]
| End Sub

isabelle

Avatar
isabelle

Bonjour Isabelle,
*** fait le test suivante

range("A1:A5").Name = "Toto"
Range("B10:B15").Name = "Toto"
Le nom "Toto" refers à la dernière plage désignée et cela ne
provoque aucune erreur sur Excel 2003


ce n'est pas le même résultat avec la méthode Names.Add, l'erreur est bien présente sur xl2002

**** Pas particulièrement à un nom défini mais à une formule matricielle
et la formule que tu proposes est une formule matricielle ...
J'ai essayé une plage : "B5:Z50000" et ma bécane a senti toute
la différence : P2-400 il n'y a pas plus vieux saus ton ange JPS ;-))


tu attire les foudres ;-)
mais je ne suis pas sur si c'est percu par comme étant une formule matricielle
ou tout simplement Évaluate puisque nul par dans la commande il est précisé comme étant une
matricielle


Ah, je vois ta syntaxe est très similaire à la mienne ! ;-)))


elle sont identique :-), c'est pour ça que je pense quelle est évaluer,

pour ma part, lorsqu'il s'agit d'intersection, j'aime mieux la méthode
: deux nom de coordonnées (x,y) comme ça je peut les utiliser aussi bien en vba que sur la feuille.
c'est là l'aventage,

isabelle


Avatar
MichDenis
| ce n'est pas le même résultat avec la méthode Names.Add, l'erreur est bien présente sur xl2002
*** il doit te manquer une mise à jour ;-))



**** Pas particulièrement à un nom défini mais à une formule matricielle
et la formule que tu proposes est une formule matricielle ...
J'ai essayé une plage : "B5:Z50000" et ma bécane a senti toute
la différence : P2-400 il n'y a pas plus vieux saus ton ange JPS ;-))


| tu attire les foudres ;-)
*** Est-ce pire que de la neige en cette période de l'année ?


| mais je ne suis pas sur si c'est percu par comme étant une formule matricielle
| ou tout simplement Évaluate puisque nul par dans la commande il est précisé comme étant une
| matricielle
*** AV ne sera pas content... tu n'as pas suivi sa leçon...


Ah, je vois ta syntaxe est très similaire à la mienne ! ;-)))


| elle sont identique :-), c'est pour ça que je pense quelle est évaluer,
| pour ma part, lorsqu'il s'agit d'intersection, j'aime mieux la méthode
| : deux nom de coordonnées (x,y) comme ça je peut les utiliser aussi bien en vba que sur la
feuille.
| c'est là l'aventage,
**** Comme la fonction personnalisée que j'ai soumise à l'intention du forum ...
;-))


Salutations.

Avatar
AV
ici c'est férié aujourd'hui, je suppose qu'AV est absent. On verra aussi la
couleur de son grain de sel !


Voilà mon grain :
Pfff......et rePffff.....
Il y a des lustres que sont parues en ce lieu les solutions pour trouver la
dernière cellule renseignée (avec une fonction perso et la méthode "find" ou par
formule) ainsi que les inconvénients de SpecialCells(xlCellTypeLastCell) ou de
la propriété UsedRange
Faudrait voir à suivre un peu hein !
Je vais de ce pas faire mon rapport "à qui tu sais" !

AV

1 2 3 4 5