D'ordinaire, j'arrive à maîtriser la ligne de commande : Columns.Count).End(xlToLeft).Value
Celle-ci me renvoie bien la valeur de la dernière cellule remplie d'une ligne; cette ligne est remplie manuellement par mes soins et ne comporte pas de formule.
Cependant, lorsque j'essaie de procéder de la même manière sur une ligne qui possède des formules dans chaque cellule, cette commande ne me renvoie rien.
Est-ce à cause des formules reprises dans ces cellules?
Si oui, y a t'il une solution à ce problème?
Sub test()
With ActiveSheet
m = "Colonne: " & .Cells(1, .Columns.Count).End(xlToLeft).Column & Chr(13)
m = m & "Adresse cellule: " & .Cells(1, .Columns.Count).End(xlToLeft).Address(0, 0)
End With
MsgBox m, vbInformation, "Test"
End Sub
Voyez le fichier joint, la macro repère la dernière cellule ne contenant pas le texte vide "" :
VB:
Sub DerCol()
Dim i As Integer
With Feuil1.UsedRange.Rows(1)
For i = .Columns.Count To 1 Step -1
If .Cells(i) <> "" Then
MsgBox "Dernière valeur non vide : " & .Cells(i) & " dans " & .Cells(i).Address(0, 0)
Exit Sub
End If
Next
End With
MsgBox "Toutes les cellules sont vides ou contiennent le texte vide """"..."
End Sub
Address(0,0) permet d'afficher l'adresse d'une cellule sans les $
Ci-dessous un petit test "explicatif"
VB:
Sub test_2()
MsgBox Range("A1").Address(RowAbsolute = 1, columnAbsolute = 1, xlA1), vbExclamation
'qui peut se résumer en:
MsgBox Range("A1").Address(0, 0, xlA1), vbInformation
'ou encore en
MsgBox [A1].Address(0, 0), vbMsgBoxRight
End Sub
On peut éviter la boucle For en évaluant une formule Excel (matricielle) :
VB:
Sub DerCol()
Dim i As Integer
With Feuil1.UsedRange.Rows(1)
i = Evaluate("MAX((" & .Address & "<>"""")*COLUMN(" & .Address & "))")
If i Then MsgBox "Dernière valeur non vide : " & .Cells(i) & " dans " & .Cells(i).Address(0, 0) _
Else MsgBox "Toutes les cellules sont vides ou contiennent le texte vide """"..."
End With
End Sub