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...