1 votes

Visual Basic - Code VBA pour sauter ou ignorer la règle si la cellule contient certaine valeur

J'ai écrit le code VBA suivant pour remplir automatiquement la colonne "P" avec "En attente", "Non dû", "-" en fonction de la valeur de la colonne "O".

L'utilisateur devra entrer manuellement "Complet" dans la colonne "P" si la tâche est terminée. Ceci n'est pas automatiquement rempli.

Je dois m'assurer que la dernière règle (si la colonne O est "oui", alors entrer "En attente" dans la colonne P) est ignorée si la colonne "P" dit déjà "Complet".

Est-ce que quelqu'un peut m'aider s'il vous plaît ? Assez urgent. Merci !

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "No" Then
            ActiveSheet.Range("P" & i) = "Non dû"
        End If
    Next i
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "-" Then
            ActiveSheet.Range("P" & i) = "-"
        End If
    Next i
    **For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row
        If ActiveSheet.Cells(i, 15) = "Yes" Then
            ActiveSheet.Range("P" & i) = "En attente"
        End If**
    Next i
End Sub

2voto

LPChip Points 53736

Vous pouvez le faire en ajoutant une vérification IF supplémentaire. J'ai également optimisé le code en passant de 3 boucles à 1 boucle, donc le code est 3 fois plus rapide, et j'ai regroupé les 3 vérifications dans un seul cas select pour faciliter la lecture.

Votre code ressemblerait à ceci :

Sub info()
    Dim i As Long
    For i = 11 To ActiveSheet.Cells(Rows.Count, 11).End(xlUp).row

        Sélectionnez le cas ActiveSheet.Cells(i, 15)
            Cas est "No"
                ActiveSheet.Range("P" & i) = "Non dû"

            Cas est "-"
                ActiveSheet.Range("P" & i) = "-"

            Cas est "Oui"
                Si non ActiveSheet.Range("P" & i) = "Complet" alors
                    ActiveSheet.Range("P" & i) = "En attente"
                End if

        Fin Sélectionner

    Suivant i
End Sub

0voto

Rajesh Sinha Points 8611

Vous pouvez également essayer ce code VBA.

Private Sub CommandButton3_Click()

Dim rng As Range
Set rng = Range("P1:P3")

 For Each r In rng
   v = r.Value

     If v = "No" Then
       r.Offset(5, 1).Value = "Not Due"
     End If

     If v = "-" Then
       r.Offset(5, 1).Value = "- -"
     End If

     If v = "Yes" Then
       If r.Offset(5, 1).Value = "Complete" Then Exit Sub
       r.Offset(5, 1).Value = "Pending"

     End If

 Next r

End Sub

NB : La plage d'entrée pour No, - et Oui est P1:P3.

Le premier clic va remplir les cellules O6:O8 avec Pas dû, -- et En attente.

Dès que vous écrivez Complet dans la cellule O8, ce code sautera la cellule O8.

Notez que, vous pouvez modifier la plage d'entrée et la position du décalage de la cellule.

J'espère que cela vous aidera.

Rappelez-vous que j'ai posté cette solution après l'avoir testée. Si quelqu'un n'est pas d'accord avec cela, ÉCRIVEZ LA RAISON avant de VOTER NÉGATIVEMENT.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X