Comment trouver la dernière cellule ? Pièges avec les formules

philest

XLDnaute Nouveau
Bonjour à tous,

Je sèche depuis un bon moment. Je sais utiliser du VBA pour trouver la dernière cellule d'une colonne A par exemple : MsgBox [CountA(A1:A65536)] ou Application.WorksheetFunction.CountA(Range("A:A")) ou DerniereLigne = Range("A1").End(xlDown).Address etc...

Le piège c'est lorsque les cellules vides d'une colonne (sans texte, ni nombres) ont toutes une formule incluse . Le résultat est faussé car les 3 méthodes citées plus haut vont données : j'ai trouvé la dernière cellule avec une formule incluse. Or je veux trouver la dernière cellule qui contient du texte ou des nombres. Suis-je clair ? un exemple concret. j'ai une colonne A . Depuis A1 jusqu'à A10 j'insère à chaque cellule la formule "=SI(ESTVIDE(B1).....etc" j'ai écrit du texte depuis A1 jusqu'a A7. si en VBA je lui demande de me trouver la dernière cellule, je devrais m'attendre au résultat A7. Or il va me donner A10 qui est une cellule vide. Comment faire pour trouver la dernière cellule malgré cette contrainte ?

merci
 

philest

XLDnaute Nouveau
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Eric S

Eric S
tu n'as pas compris. En fait je veux simplement repérer sur la colonne A contenant des milliers d'enregistrement la dernière cellule contenant du texte pour ensuite me positionner sur la dernière cellule vide. Or les cellules vides suivantes contiennent des formules du style RechercheV et le code VBA que j'ai écrit plus haut pour rechercher la dernière cellule contenant du texte, va prendre en compte toutes les cellules vierges qui contiennent chacune une formule. Or je veux simplement m'arrêter sur la dernière cellule "écrite".
 

ERIC S

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Re

j'avais compris mais dans ton explication tu parlais de texte ou nombre.....
dans ton explication tu prenais comme exemple si B est vide...

d'où mes questions

rechercher le dernier texte dans une colonne cela se fait par recherchev ("ZZZZZZZZZ";...)
rechercher le dernier nombre dans une colonne cela se fait par recherchev 9^9;...;1)

localiser la ligne se fait par equiv(recherchev();A:A;0)

tu devrais pouvoir résoudre en regardant du côté de worksheetfunction, mais là je dois y aller (RV pour déjeuner). Si pas de réponse je regarderai à mon retour
 

wilfried_42

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonjour philest, eric, le forum

un essais avec une formule matricielle

s'il y a des vides
Code:
=MAX(NON(ESTVIDE(A1:A1000))*LIGNE(A1:A1000))

S'il il y a des valeurs ""
Code:
=MAX(((A1:A1000)<>"")*LIGNE(A1:A1000))

Modif : je n'ai pas du comprendre la question
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonjour le fil :),
En considérant avoir trouvé ton DerLigne avant
Code:
For I = DerLigne To 1 Step -1
If Cells(I, 1).Text <> "" Then Exit For
Next I
DerLigne = I
Bonne journée :cool:
 

Aitona

XLDnaute Nouveau
Re : Comment trouver la dernière cellule ? Pièges avec les formules

test = left( la_cellule.formula, 1)
if test = "=" then blobbit

blobbit demarre si il y a une formule, ou bien un texte commencant par = dans la_cellule. On peut tout mettre sur une seule ligne de code.
 

Fo_rum

XLDnaute Accro
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonsoir,

si tu n'as pas trouvé, un autre exemple (à simplifier en supprimant la présentation) :
Code:
Private Sub CommandButton1_Click()
  Dim C As Range, n As Long, Li As Long, Dli As Long, Txte As String
  Dli = Cells(Rows.Count, 1).End(xlUp).Row
  For Each C In Range("A1:A" & Dli)
    n = n + 1
    If Left(C, 1) <> "=" And C <> "" Then Li = n
  Next
  Txte = Li & "    " & Cells(Li, 1) & Chr(10) & Dli & "    " & Cells(Dli, 1).Formula
  MsgBox Txte, vbExclamation, "dernières lignes de A"
End Sub
 

Pièces jointes

  • DerLigneAvecFormule(VBA).xls
    24 KB · Affichages: 114

ROGER2327

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonsoir à tous
Pour sélectionner la dernière ligne écrite de la colonne A, essayez ceci :
Code:
Sub toto()
Dim c%, x&
  c = 1 'colonne A
  With Sheets("Feuil1")
    x = .Cells(.Rows.Count, c).End(xlUp).Row
    ThisWorkbook.Names.Add Name:="plage", RefersToR1C1:= _
      "=OFFSET(Feuil1!R1C" & c & ",,,MAX((Feuil1!R1C" & c & ":R" & x & "C" & c & "<>"""")*ROW(Feuil1!R1C" & c & ":R" & x & "C" & c & ")),)"
    .Activate: .Cells(Range("plage").Rows.Count, Range("plage").Column).Select
  End With
End Sub
ROGER2327
#4792


Dimanche 22 Sable 138 (César-Antechrist, SPs)
2 Nivôse An CCXIX
2010-W51-3T22:09:53Z
 

CBernardT

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonjour,

Dernière ligne contenant une valeur définie en deux temps :

1- pour définir la dernière cellule contenant quelque chose, en l'occurence une formule.
2- A partir de celle-ci, chercher la dernière cellule avec une valeur.

Sub DerLigCol()
Dim Derlig As Integer, i As Integer
With Sheets("Feuil1")
Derlig = .Range("A65536").End(xlUp).Row
For i = Derlig To 1 Step -1
If .Cells(i, 1) <> "" Then Exit For
Next i
Derlig = i
'........
'........
End With
End Sub
 

MJ13

XLDnaute Barbatruc
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Bonjour à tous

A tester:

Code:
Sub Trouve_Last_Val_Text()
'MJ
colonne = 1
For n = Cells(65536, colonne).End(xlUp).Row To 1 Step -1
If Cells(n, colonne).Text <> "" And Cells(n, colonne).HasFormula = False Then MsgBox "Ligne " & n: End
Next
End Sub
 

Fo_rum

XLDnaute Accro
Re : Comment trouver la dernière cellule ? Pièges avec les formules

Salut

Aitona, tu n’as certainement pas fait tourner les différentes macros proposées dans des conditions analogues.

Pour ma part je préfère comparer ce qui est comparable :
- moins de lignes avec déclaration des variables manquantes, ne me satisfait pas
- résultats différents, non plus

Après quelques tests, les macros de Jean-Marcel et MJ13 conduisent aux mêmes résultats mais ce ne sont pas toujours ceux des autres macros proposées.
 

Discussions similaires