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 -
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.
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:
- VBA obtenir la ligne de la dernière cellule g
- Aller à la ligne dans une cellule excel - Guide
- Partage de photos en ligne - Guide
- Supprimer dernière page word - Guide
- Dernière version chrome - Accueil - Applications & Logiciels
- Excel compter cellule couleur sans vba - Guide
6 réponses
bonjour
un exemple à adapter
bonne suite
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
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)
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
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
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)
à adapter
Michel
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
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'
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'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
@michel_m Je n'ai pas du coup cherché à utiliser votre fonction mais je vous remercie pour votre réponse.
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
et au niveau de l'appel un exemple
> michel : et ton searchdirection=xlPrevious me fait penser que j'aurais du partir du bas en remontant (la honte)
bonne fin de journée
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