2 votes

Trouver la dernière ligne correspondante et vérifier si la ligne de la colonne suivante est vide.

J'ai une feuille de calcul qui comprend un ID et un nom. J'aimerais avoir une procédure qui (lorsque l'utilisateur saisit un ID spécifique) trouve l'instance la plus récente de ce code dans la même colonne, puis vérifie la ligne de la colonne suivante si elle est vide. Par exemple :

ID       | Name
SD123456 | John
DF989899 | Alice 
SD123456 | Jason
KA452331 | Wilson
SD123456 | 
DF456790 | Jack

Comme vous pouvez le voir, l'ID 'SD123456' a un nom manquant, je voudrais donc savoir s'il est possible de rechercher l'ID 'SD123456' et obtenir la dernière ligne de cet ID et vérifier la ligne de la colonne suivante si elle est manquante. J'ai essayé d'utiliser xlDown y xlUp mais en vain.

EDIT : En résumé, le but de mon VBA est de rechercher l'ID, puis de vérifier si ce dernier ID a un nom, et si non, d'alerter l'utilisateur que l'ID a un nom manquant.

1voto

Kin Siang Points 2003

Vous pouvez essayer ceci, simple et clair :

Dim lastrow As Long, i As Long
Dim ID As String

lastrow = Sheet1.UsedRange.Rows.Count
ID = "DF989899"

For i = 2 To lastrow
    If InStr(Sheet1.Cells(i, 1).Value, ID) And IsEmpty(Sheet1.Cells(i, 2).Value) Then
      MsgBox "Missing Value for ID: " & Sheet1.Cells(i, 1).Value
    End If
Next

1voto

VBasic2008 Points 14466

Trouver la dernière occurrence d'une chaîne dans une colonne

Option Explicit

Sub CheckIDtest()
    CheckID "SD123456"
End Sub

Sub CheckID(ByVal ID As String)

    ' Create references to the ID and Name Column Ranges.
    Dim irg As Range, nrg As Range
    With Sheet1.Range("A1").CurrentRegion
        Set irg = .Columns(1)
        Set nrg = .Columns(2)
    End With

    ' Attempt to find the last occurrence of the ID.
    Dim fCell As Range
    Set fCell = irg.Find(ID, , xlFormulas, xlWhole, , xlPrevious)

    ' ID was not found.
    If fCell Is Nothing Then
        MsgBox "The ID '" & ID & "' was not found.", _
            vbCritical, "ID Not Found"
        Exit Sub
    End If

    ' Write the associated name to a variable.
    ' This complication allows for the columns not to be adjacent.
    Dim fName As String: fName = fCell.EntireRow.Columns(nrg.Column).Value
    ' If they are adjacent like in this case, you could simplify with...
    'fName = fCell.Offset(, 1).Value
    ' ... and forget about 'nrg'. 

    If Len(fName) = 0 Then
        MsgBox "The Name for the ID '" & ID & "' is missing.", _
            vbExclamation, "Missing Name"
    Else
        MsgBox "The Name for the ID '" & ID & "' is '" & fName & "'.", _
            vbInformation, "Name Found"
    End If

End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X