J'ai besoin d'aide pour essayer de faire fonctionner cette macro VBA, je semble me tromper avec la possibilité d'ignorer la formule de la cellule renvoyant une valeur 0 et passant à la prochaine cellule disponible. Dans l'exemple d'image, B1:B5 est bon, mais une fois qu'il atteint B7 et B8, j'aimerais qu'il renvoie la valeur suivante dans B9. Le domaine que j'ai cité est le domaine avec lequel je rencontre des problèmes.

    Sub AssignStow()
    Dim Worksheet As Worksheet
    Dim badgeID As String
    Dim cell As Integer
    Dim assignment As String
    Dim aname As String
    
    cell = 1
    
    Set Worksheet = ThisWorkbook.Worksheets("Check In")
    badgeID = Worksheet.Range("scan")
    
    Set Worksheet = ThisWorkbook.Worksheets("Stow")
    
    recheck:
    If IsEmpty(Worksheet.Cells(cell, 1)) = False Then
        cell = cell + 1
        GoTo recheck:
    End If
    
    If IsEmpty(Worksheet.Cells(cell, 1)) = True Then
        Worksheet.Cells(cell, 1).Value = badgeID

    For i = 1 To 75
        Do
            If assignment = "0" Then
                Worksheet.Cells(cell, 2).Value
                cell = cell + 1
            Else
                assignment = Worksheet.Cells(cell, 2).Value
                aname = Worksheet.Cells(cell, 3).Value
    
                GoTo display:
            End If
    Next i

    
    display:
    Set Worksheet = ThisWorkbook.Worksheets("Check In")
    Worksheet.Range("scan").Value = ""
    If aname = "x" Then
        Worksheet.Range("badgeID").Value = badgeID
    Else
        Worksheet.Range("badgeID").Value = aname
    End If
    Worksheet.Cells(40, 1).Value = assignment
    
End Sub

Image de la feuille excel

0
aManGringo 8 oct. 2020 à 05:22

1 réponse

Meilleure réponse

Si je comprends bien, vous essayez d'empêcher la saisie d'un badgeID à côté d'une cellule dont la valeur est "0". Essayez comme ceci :

Sub AssignStow()
    Dim Worksheet As Worksheet
    Dim badgeID As String
    Dim cell As Integer
    Dim assignment As String
    Dim aname As String
    
    cell = 1
    
    Set Worksheet = ThisWorkbook.Worksheets("Check In")
    badgeID = Worksheet.Range("scan")
    
    Set Worksheet = ThisWorkbook.Worksheets("Stow")
    
recheck:
    If IsEmpty(Worksheet.Cells(cell, 1)) = False Or Worksheet.Cells(cell, 2).Value = "0" Then
        cell = cell + 1
        GoTo recheck:
    End If
    
    If IsEmpty(Worksheet.Cells(cell, 1)) = True Then
        Worksheet.Cells(cell, 1).Value = badgeID
    End If

    If assignment = "0" Then
        cell = cell + 1
    Else
        assignment = Worksheet.Cells(cell, 2).Value
        aname = Worksheet.Cells(cell, 3).Value
        GoTo display
    End If
    
display:
    Set Worksheet = ThisWorkbook.Worksheets("Check In")
    Worksheet.Range("scan").Value = ""
    If aname = "x" Then
        Worksheet.Range("badgeID").Value = badgeID
    Else
        Worksheet.Range("badgeID").Value = aname
    End If
    Worksheet.Cells(40, 1).Value = assignment
    
End Sub

Pour résoudre ce problème, il doit y avoir une condition en haut de recheck qui passe à la ligne suivante (incrémente la valeur de cell) si la valeur de la cellule actuelle dans la colonne B est "0" . C'est la même chose que lorsque vous vérifiez si la cellule de la colonne A est vide, elle y a donc été ajoutée.

La boucle For et l'instruction Do ont été supprimées car elles semblaient ne rien faire.

0
sbgib 8 oct. 2020 à 08:28