VBA obtenir la ligne de la dernière cellule g

Résolu
sishley Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en VBA, et je ne suis pas informaticienne. Je vous demande votre aide car après plusieurs jours de recherche infructueuse, je ne trouve pas la solution à mon problème. J'ai des cellules grises, des cellules blanches et des cellules vides qui se sucèdent dans une colonne. J'ai besoin detrouver la dernière cellule grisée pour pouvoir ensuite comparer toutes mes cellules grises à mes cellules blanches. La longeur du tableau varie ce sont des données qui changent toutes les semaines. Voila ce que j'ai fait :

"Sub select_cell()
'
Workbooks("Classeur1.xlsm").Sheets("RECAPT6B").Activate
Range("C6653").End(xlUp).Select
If (Selection.ColorIndex <> 16) Then ActiveCell.Offset(-1, 0).Select
Do Until Selection.ColorIndex = 16
Loop

End Sub "
"

Je voudrais ensuite déclarer ce numero de ligne comme un nombre afin de comparer l'intégralité de mes cellules blanches à mes cellules grises. Je vous remercie pour votre aide.
A voir également:

6 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
bonjour
un exemple à adapter
' pour test colonne 1 
lifin = Cells(Rows.Count, 1).End(xlUp).Row 
ligrise = 0 
For li = 1 To lifin 
  If Cells(li, 1).Interior.ColorIndex = 16 Then ligrise = li 
Next li 
MsgBox ("derniere ligne grise : " & ligrise)

bonne suite
1
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
bonjour
ta procedure étant certainement lancée à partir d'un module général ou d'un module d'une autre feuille, il manque aux cells(li,co) la référence à la feuille cible
la constante nomF(est à adapter à ton cas)

Const nomF = "Feuil2"    

Public Sub DerLigneGrise()    
' pour test colonne C    
With ActiveWorkbook.Sheets(nomF)    
  lifin = .Range("C" & Rows.Count).End(xlUp).Row    
  ligrise = 0    
  For li = 1 To lifin    
    If .Range("C" & li).Interior.ColorIndex = 16 Then ligrise = li    
  Next li    
  MsgBox ("derniere ligne grise : " & ligrise)    
End With    
End Sub

RQ. de plus, ton code ne peut pas fonctionner
1. For li = Lifin To 1
1.1. ici, lifin n'est pas connu
1.2. ta boucle est sensée décrémentér li à chaque tour donc il manque(rait) step -1
lifin = Cells(Rows.Count, 3).End(xlUp).Row
2. ligrise = 0
ligrise ne doit pas être mis à 0 à chaque tour (si on ne trouve pas d'autre ligne grise, tu vas perdre la dernière trouvée)

bonne suite
1
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

tiré de mon grenier, ce code te donne la ligne de la dernière cellule rouge d'une feuille ( les couleurs sont saisies manuellement et vides)

Application.FindFormat.Clear  
    Application.FindFormat.Interior.ColorIndex = 3  
    ligne_dercellrouge = Cells.Find(What:="", after:=Range("A" & Rows.Count), SearchFormat:=True, searchdirection:=xlPrevious).Row


à adapter
Michel
1
sishley Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci pour votre réponse.

J'ai bien essayé votre méthode. J'ai adapté à mon code et après j'ai voulu tester qu'elle marchait bien en afichant le compte tenu de la dernière cellule grise dans l'autre case mais ça marquait erreur 1004 defini par l'objet ou l'application.

Sub select_cell()
'
' select_cell Macro
'
'Dim ne As Range
Workbooks("Classeur1.xlsm").Sheets("RECAPT6B").Activate
Lifin = Range("C6653").Row
For li = Lifin To 1
ligrise = 0
If Cells(li, 3).Interior.ColorIndex = 16 Then ligrise = li
Next li
Workbooks("Classeur1.xlsm").Sheets("Delai").Activate
Cells(49, 3) = Cells(ligrise, 3).Value

End Sub

J'ai aussi essayer directement avec

select_cell Macro
'
Workbooks("Classeur1.xlsm").Sheets("RECAPT6B").Activate
For li = Lifin To 1
lifin = Cells(Rows.Count, 3).End(xlUp).Row
ligrise = 0
If Cells(li, 3).Interior.ColorIndex = 16 Then ligrise = li
Next li
Workbooks("Classeur1.xlsm").Sheets("Delai").Activate
Cells(49, 3) = Cells(ligrise, 3).Value

End Sub'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sishley Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour vos deux réponses. J'ai testé la solution de ccm81 et elle marche c'est l'indice couleur qui était faux ( c'est 15 ) en réalité. Merci encore

@michel_m Je n'ai pas du coup cherché à utiliser votre fonction mais je vous remercie pour votre réponse.
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
re

Adaptation du code (poussiéreux peut être, mais efficace) de Michel (cordiales salutations à toi)
Une fonction qui renvoie la dernière cellule de couleur coul, de la colonne col, de la feuille nomF

Public Function DerLiCoulDansCol(coul As Long, nomF As String, col As String)   
  Application.FindFormat.Clear   
  Application.FindFormat.Interior.ColorIndex = coul   
  With ActiveWorkbook.Sheets(nomF)   
    DerLiCoulDansCol = .Cells.Find(What:="", after:=Range(col & Rows.Count), SearchFormat:=True, searchdirection:=xlPrevious).Row   
  End With   
End Function

et au niveau de l'appel un exemple
Dim DerLiGrise As Long   
DerLiGrise = DerLiCoulDansCol(16, "Feuil2", "C")

> michel : et ton searchdirection=xlPrevious me fait penser que j'aurais du partir du bas en remontant (la honte)

bonne fin de journée
0