Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Function ValLastCelNotEmpty(Plage As Range)
'Renvoie le contenu de la dernière cellule pleine d'une colonne
'- Plage : une plage de cellules sur une même colonne (ex : A1:A20)
'Si, par exemple, la cellule A5 est vide --> la fonction renverra la valeur de la cellule A4, même si les autres cellules de la plage sont pleines
'Si, par exemple, les cellules A1:A3 sont vides, la fonction réagira comme s'il s'agissait de la plage A4:A20
If Plage.Columns.Count > 1 Or Application.CountA(Plage) = 0 Then ValLastCelNotEmpty = CVErr(xlErrRef): Exit Function
If IsEmpty(Plage(1)) Then Set Plage = Plage.End(xlDown)(1)
If Plage.Row = 65536 Then Set ValLastCelNotEmpty = Plage(1) Else If IsEmpty(Plage(2)) Then Set ValLastCelNotEmpty = Plage(1) Else Set ValLastCelNotEmpty = Plage.End(xlDown)
End Function
re @Magic_Doctor voila un exemple de ce que je disais tout a l'heure
ce type de fonction existe déjà dans le forum sous diverses forme dont la mienne et celle de @Dudu2 me semble t il
le nom de ta fonction sous entant la recherche de la derniere cellules non vide (ValLastCelNotEmpty)
hors tu dis dans ton commentaire
VB:
'Si, par exemple, la cellule A5 est vide --> la fonction renverra la valeur de la cellule A4, même si les autres cellules de la plage sont pleines
c'est pas très cohérent la dernière c'est la dernière c'est tout ou alors change le nom de la fonction
d'autant plus que tu ne prévois pas dans ta fonction les cellules ayant une formule renvoyant un vide
pardonne ma franchise mais voila pourquoi j'imposerais des limites
si tu cherche bien avec le moteur de recherche du site avec les mots cellules et valorisées tu devrait très vite retrouver cette discussion
A méditer mon cher Magic_Doctor
Bonjour à tous, Une question apparemment simple: quel est le numéro de la dernière ligne valorisée (formule ou constante) d'une colonne ? Je pense que beaucoup d'entre nous répondraient un truc du genre: DerniereLigneUtilisée = Range("X" & Rows.Count).End(xlUp).Row 'où X est la colonne donnée...
ménon, y'a pas de piège ; simplement patrick a écrit : « tiens j'ai tapé "valorisé" dans le moteur de recherche et ding dong c'est la premiere de la liste » et MVP = Most Valuable Professional ; Microsoft MVP = un expert indépendant reconnu par Microsoft dans les technologies de la société Microsoft.
y'a pas longtemps, j'ai vu une vidéo d'un MVP Microsoft à propos de Power Query.
re @Magic_Doctor voila un exemple de ce que je disais tout a l'heure
ce type de fonction existe déjà dans le forum sous diverses forme dont la mienne et celle de @Dudu2 me semble t il
le nom de ta fonction sous entant la recherche de la derniere cellules non vide (ValLastCelNotEmpty)
hors tu dis dans ton commentaire
VB:
'Si, par exemple, la cellule A5 est vide --> la fonction renverra la valeur de la cellule A4, même si les autres cellules de la plage sont pleines
c'est pas très cohérent la dernière c'est la dernière c'est tout ou alors change le nom de la fonction
d'autant plus que tu ne prévois pas dans ta fonction les cellules ayant une formule renvoyant un vide
donc a fin de compléter ta connaissance : voici la mienne
elle donne bien la lastcell not empty et avec l'argument donne la dernière cellule utilisée si formule renvoyant un vide
c'est plus cohérent avec le titre
elle renvoie 0 si colonne vide ce qui est plus cohérent que 1
VB:
Sub test()
MsgBox LatCellUsedInColumn([A1:A100])
MsgBox LatCellUsedInColumn([A1:A100], True)
End Sub
Function LatCellUsedInColumn(ByVal Colonne As Range, Optional IsValued As Boolean = False) As Long
Const ChaineMax As String = "zzzzzzzzzzzzzzzzzzzz"
Const NombreMax As Double = (2 ^ 53 - 1) * 2 ^ 971
If Not Colonne Is Nothing Then
With Application
If Not IsValued Then
LatCellUsedInColumn = .Max(.IfError(.Match(ChaineMax, Colonne.Columns(1), 1), 0), .IfError(.Match(NombreMax, Colonne.Columns(1), 1), 0))
Else
c = Colonne.Address(0, 0)
LatCellUsedInColumn = Evaluate("MAX(ROW(" & c & ")*(" & c & "<>""""))")
End If
End With
End If
End Function
pardonne ma franchise mais voila pourquoi j'imposerais des limites
si tu cherche bien avec le moteur de recherche du site avec les mots cellules et valorisées tu devrait très vite retrouver cette discussion
A méditer mon cher Magic_Doctor
Ma méditation fut courte.
Je reprends :
On propose une fonction. Elle tient la route ou pas.
Si le titre de la fonction n'est pas parfait, quelqu'un, judicieusement, propose de le modifier. En l'occurrence, je changerai donc le nom de la fonction par : ValLastCelFullBeforeFirstCelEmpty
Prévoir toutes les possibilités d'une fonction est une gageure. En revanche, quand un membre du forum a une idée pertinente, qu'il modifie alors à sa guise la fonction. C'est le but du jeu, que je sache.
Si, enfin, avant de proposer une fonction, on doit passer 2 plombes pour vérifier si ici ou ailleurs il n'y aurait pas une fonction similaire, autant dire que plus personne n'osera balancer une fonction.
Plutôt qu'un long discours, mieux vaut, laconiquement, modifier la fonction en expliquant pourquoi, et à ce moment-là on conservera la dernière modification. Et tout le monde sera content !
Donc, merci patricktoulon, tu m'auras aidé à modifier le nom de la fonction.
VB:
Function ValLastCelFullBeforeFirstCelEmpty(Plage As Range)
'Renvoie le contenu de la dernière cellule pleine d'une colonne
'- Plage : une plage de cellules sur une même colonne (ex : A1:A20)
'Si, par exemple, la cellule A5 est vide --> la fonction renverra la valeur de la cellule A4, même si les autres cellules de la plage sont pleines
'Si, par exemple, les cellules A1:A3 sont vides, la fonction réagira comme s'il s'agissait de la plage A4:A20
If Plage.Columns.Count > 1 Or Application.CountA(Plage) = 0 Then ValLastCelFullBeforeFirstCelEmpty= CVErr(xlErrRef): Exit Function
If IsEmpty(Plage(1)) Then Set Plage = Plage.End(xlDown)(1)
If Plage.Row = 65536 Then Set ValLastCelFullBeforeFirstCelEmpty= Plage(1) Else If IsEmpty(Plage(2)) Then Set ValLastCelFullBeforeFirstCelEmpty= Plage(1) Else Set ValLastCelFullBeforeFirstCelEmpty= Plage.End(xlDown)
End Function
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.