Definir la derniere ligne non vide

4 réponses
Avatar
Apitos
Bonjour =E0 tous,

J'ai une plage de cellules A1:A10 qui contiennent des formules.


Supposons que seulement les cinq premi=E8res formules qui retourneront un r=
=E9sultat non vide. les cinq derni=E8res lignes seront vides mais toujours =
avec des formules dedans.

Comment =E9viter d'avoir la 10=E8me ligne comme derni=E8re ligne au lieu de=
la 5=E8me sur cette ligne de code :

'------------
MsgBox Range("A" & Rows.Count).End(xlUp).Row
'------------

Merci.

4 réponses

Avatar
isabelle
bonjour Apitos,

voici un exemple extrait des functions de AV, que je salut au passage:

Sub Macro1()
MsgBox Fct_Eva(Range("A1:A10"))
End Sub

Function Fct_Eva(Plage As Range)
Fct_Eva = Evaluate("MAX(IF(" & [Plage].Address & "<>"""",ROW(" &
[Plage].Address & ")))")
End Function

isabelle

Le 2015-12-29 18:30, Apitos a écrit :
Bonjour à tous,

J'ai une plage de cellules A1:A10 qui contiennent des formules.


Supposons que seulement les cinq premières formules qui retourneront un
résultat non vide. les cinq dernières lignes seront vides mais toujours avec
des formules dedans.

Comment éviter d'avoir la 10ème ligne comme dernière ligne au lieu de la 5ème
sur cette ligne de code :

'------------ MsgBox Range("A" & Rows.Count).End(xlUp).Row '------------

Merci.

Avatar
MichD
Bonjour,

Une autre alternative :

2 Fonctions, l'une retourne la dernière ligne et l'autre la dernière colonne
incluant les cellules qui comportent des formules qui ne retournent rien ("")

Pour obtenir seulement la dernière ligne d'une plage de cellules limitée seulement
aux valeurs affichées par les cellules sans tenir compte des formules qui
ne retournent rien (""), il s'agit de remplacer dans chacune de ces fonctions
le paramètre "XlFormulas" de la méthode "Find" par "XlValues".

Pour appeler ces fonctions, il s'agit d'utiliser une de ces syntaxes dans une feuille de calcul.

ÞrLig("Feuil1";"A:A")

ÞrCol("Feuil1";"1:3")

On peut modifier l'écriture de ces fonctions pour les adapter à un besoin précis...

Copier les fonctions dans un module standard :

'---------------------------------------------------------------------
Function DerLig(Sh As String, Rg As String)
On Error Resume Next
With Worksheets(Sh)
DerLig = .Range(Rg).Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
On Error GoTo 0
End With
End Function
'---------------------------------------------------------------------

Function DerCol(Sh As String, Rg As String)
On Error Resume Next
With Worksheets(Sh)
DerCol = .Range(Rg).Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
End With
End Function
'---------------------------------------------------------------------




"Apitos" a écrit dans le message de groupe de discussion :


Bonjour à tous,

J'ai une plage de cellules A1:A10 qui contiennent des formules.


Supposons que seulement les cinq premières formules qui retourneront un résultat non vide. les cinq
dernières lignes seront vides mais toujours avec des formules dedans.

Comment éviter d'avoir la 10ème ligne comme dernière ligne au lieu de la 5ème sur cette ligne de
code :

'------------
MsgBox Range("A" & Rows.Count).End(xlUp).Row
'------------

Merci.
Avatar
MichD
Un petit bémol,

De la manière dont sont passés les paramètres, j'ai omis une ligne de code :
Application.Volatile en début de chaque fonction.

Afin de contourner cela, on adapte les 2 fonctions comme ceci et dans la cellule
on modifie légèrement l'appel de ces fonctions:

(On ne fait qu'enlever les parenthèses pour les plages de cellules.
ÞrLig("Feuil1";A:A)

ÞrCol("Feuil1";1:3)


'---------------------------------------------------------------------
Function DerLig(Sh As String, Rg As Range)
On Error Resume Next
With Worksheets(Sh)
DerLig = .Range(Rg.Address).Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
On Error GoTo 0
End With
End Function
'---------------------------------------------------------------------

Function DerCol(Sh As String, Rg As Range)
On Error Resume Next
With Worksheets(Sh)
DerCol = .Range(Rg.Address).Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
End With
End Function
'---------------------------------------------------------------------
Avatar
Apitos
Bonjour Isabelle, MichD,

Merci pour vos réponses :)