/ / VBA: Comment trouver la prochaine cellule de la même ligne (à l'exclusion des cellules cachées) - excel, vba, excel-vba, excel-formula

VBA: comment trouver la prochaine cellule de la même rangée (à l'exclusion des cellules cachées) - excel, vba, excel-vba, excel-formula

J’ai utilisé un Vlookup pour renvoyer des valeurs dans la colonne I,cependant, seule la moitié des cellules de cette colonne ont renvoyé une valeur (les autres sont vierges). "J'aimerais que ma macro entre" "dans toutes les cellules vlookup vides plutôt que de conserver l'équation Vlookup dans la cellule. Je souhaite archiver toutes les valeurs de la colonne, puis modifier les cellules vides en =" "

Mon but ultime est d’afficher une note sur chaque ligne.selon que la cellule I a une valeur ou un blanc. Si la cellule I pour une ligne donnée est vide, la cellule de la colonne K de cette ligne remplira automatiquement "Traitée non encore payée". S'il existe une valeur dans la cellule I, la cellule K remplira automatiquement "Paide"

Mon problème est que je ne sais pas écrire unéquation qui évite les cellules cachées (cachées du filtre) et ne change que les valeurs des cellules affichées après le filtre. Mes en-têtes de colonne sont à la ligne 4 et mon code est présenté ci-dessous:

Dim Lastrow As Long
Lastrow = Cells(Rows.Count, "C").End(xlUp).Row

Range("A4:K" & Lastrow).Select
Selection.AutoFilter
ActiveSheet.Range("$A$4:$K" & Lastrow).AutoFilter Field:=9, Criteria1:="="
Range("I4").Offset(1, 0) = " "
Selection.AutoFill Destination:=Range("Range("I4").Offset(1, 0):I" &
Lastrow)

Réponses:

2 pour la réponse № 1

Vous pouvez résoudre votre problème de plusieurs manières. Tout d'abord, vous pouvez simplement mettre une formule dans la colonne K pour vérifier si les cellules de la colonne I sont vides:

=IF(I4<>"","Paid","Processed Not Yet Paid")

Traité Pas encore payé

Ou si vous êtes vraiment recherchez une solution macro, descendez cellule par cellule et vérifiez les valeurs:

Sub WhoDidntPay()
Dim lastrow As Long, i As Long
lastrow = Cells(Rows.Count, "C").End(xlUp).Row

For i = 4 To lastrow
If ActiveSheet.Range("I" & i).Value <> "" And _
ActiveSheet.Range("G" & i).Value = <> 0 Then
ActiveSheet.Range("K" & i).Value = "Processed Not Yet Paid"
Else
ActiveSheet.Range("K" & i).Value = "Paid"
End If
Next i
End Sub

Encore une fois, je suggère d'ajouter un IFERROR à ton VLOOKUPs afin que vous puissiez renvoyer une valeur cohérente si vous obtenez des erreurs, ou s’ils renvoient réellement des blancs, vous pouvez simplement utiliser "" comme dans l'exemple ci-dessus.