Formule si/et/ou en VBA

Elle doit faire exactement la même chose, sauf qu'elle doit pas écraser les données déjà inscrit en colonne M. Donc le problème est exposé ici, je vois pas comment faire... Pour cela que je te demande comment il serait possible, de lui dire que pour "Decompte à émettre" il le met que si Met N sont vides du coup ...

Écris les étapes en texte !

D'abord on vérifie qu'il n'y a rien en cellules M et N,

Si c'est le cas, alors on fait ...gnagnagna... sinon on fait ...blablabla

Tu as voulu fourrer toutes tes conditions dans une seule instruction, avec ce petit travail tu verras facilement que ce n'était pas un bon choix, car ton travail se déroule en plusieurs étapes...

Concrètement, c'est très simple et on à fait le plus gros travail avec cette macro, c'est juste un petit détaille à rajouter je pense :

Si ColM est vide et ColN est vide et ColQ n'est pas une date et ColS < 15000 et (ColH = "002160" ou ColH = "001170" ou ColH = "001121") alors ColM="PAS DE DECOMPTE" Sinon ColM="DECOMPTE A EMETTRE" si et seulement si ColM et ColN sont vides

Yes, enfin je crois j'ai trouvé Pédro, ça a l'air de marché

Merci de confirmer si ma logique et mon codage et bon :

Sub Decompte()

Dim j As Integer

With Sheets("SUIVTRANS EN COURS")
    Derligne = .Range("A" & Rows.Count).End(xlUp).Row

    For j = 3 To Derligne
        If .Range("M" & j) = "" And .Range("N" & j) = "" And Not IsDate(.Range("Q" & j)) And .Range("S" & j) < 15000 And (.Range("H" & j) = "002160" Or .Range("H" & j) = "001170" Or .Range("H" & j) = "001121") Then
            .Range("M" & j) = "PAS DE DECOMPTE"
      Else
        If .Range("M" & j) = "" And .Range("N" & j) = "" Then
            .Range("M" & j) = "DECOMPTE A EMETTRE"
        End If
        End If
    Next j
End With

End Sub

Yes, enfin je crois j'ai trouvé Pédro, ça a l'air de marché

Merci de confirmer si ma logique et mon codage et bon :

Sub Decompte()

Dim j As Integer

With Sheets("SUIVTRANS EN COURS")
    Derligne = .Range("A" & Rows.Count).End(xlUp).Row

    For j = 3 To Derligne
        If .Range("M" & j) = "" And .Range("N" & j) = "" And Not IsDate(.Range("Q" & j)) And .Range("S" & j) < 15000 And (.Range("H" & j) = "002160" Or .Range("H" & j) = "001170" Or .Range("H" & j) = "001121") Then
            .Range("M" & j) = "PAS DE DECOMPTE"
      Else
        If .Range("M" & j) = "" And .Range("N" & j) = "" Then
            .Range("M" & j) = "DECOMPTE A EMETTRE"
        End If
        End If
    Next j
End With

End Sub

Enfin tu commences à faire évoluer par toi-même ton code... Oui on s'approche de la solution, mais je ne vois pas l'intérêt de contrôler 2 fois que M et N sont vides ! Tu gagnerais en clarté à ne le faire qu'une fois, avant toute autre chose...

Rechercher des sujets similaires à "formule vba"