Microsoft 365 Conditions si date dépassée ou qui arrive à échéance

ExcLnoob

XLDnaute Occasionnel
Bonsoir le forum,
Je me retrouve face à un os...

J'ai un tableau avec en colonne J des dates. J'ai voulu implémenter un code qui me renvoi une MsgbBox quand les dates sont dépassées et une autre MsgBox quand les dates arrivent à échéance (pour l'exemple 5 jours). Tout fonctionne à partir du moment où il y a bien une date dépassée, les 2 MsgBox s'affichent consécutivement.
Cependant, lorsqu'aucune de mes dates n'est dépassées, la deuxième MsgBox ne s'affiche plus. Je pense que j'ai lié la remontée de la deuxième MsgBox à la première mais je ne trouve pas la solution pour que les deux puissent être indépendante.
De plus, lorsque qu'aucune de mes dates n'arrivent à échéance la deuxième MsgBox s'affiche vide alors que je souhaiterai que celle-ci n'apparaissent que s'il y a une information à donner...

Je joue l'apprenti sorcier et me suis tordu le cerveau dans tous les sens mais malgré tous mes efforts je ne trouve pas d'issue.

Je vous remercie par avance pour votre aide précieuse.

Je vous joins le code en question :

Private Sub Worksheet_Activate()
Dim c As Range
With Sheets("Feuil1")
For Each c In Range(.[P3], [P65536].End(xlUp))
If c <> "" Then
On Error Resume Next
If c.Value < Date Then
If txt = "" Then txt = "xxxxxxxx" & vbCrLf & vbCrLf
txt = txt & c.Offset(, -14) & " xxxxxx " & c.Offset(, 0) & vbCrLf
If c.Value < Date + 5 Then
txt1 = c.Offset(, -14) & " xxxxx " & c.Offset(, 0) & vbCrLf
End If
End If
End If
Next c
If txt <> "" Then MsgBox txt, vbCritical, "xxxxx"
If txt <> "" Then MsgBox txt1, vbInformation, "xxxxx"
End With
End Sub

Merci
 
Solution
Bonjour ExcLnoob.

Contrairement a ce qui est marque dans ton texte, les dates semblent etre en colonne P.
Voici une proposition a tester :
VB:
Private Sub Worksheet_Activate()
    Dim c As Range
    txt = ""
    txt1 = ""
    With Sheets("Feuil1")
        For Each c In Range(.[P3], [P65536].End(xlUp))
            If c <> "" Then
                On Error Resume Next
                If c.Value < Date Then
                    If txt = "" Then txt = "xxxxxxxx" & vbCrLf & vbCrLf
                    txt = txt & c.Offset(, -14) & " xxxxxx " & c.Offset(, 0) & vbCrLf
                ElseIf c.Value < Date + 5 Then
                    If txt1 = "" Then txtl = "xxxxxxxx" & vbCrLf & vbCrLf
                    txt1 = txt1 & c.Offset(, -14) & " xxxxx " &...

Fred0o

XLDnaute Barbatruc
Bonjour ExcLnoob.

Contrairement a ce qui est marque dans ton texte, les dates semblent etre en colonne P.
Voici une proposition a tester :
VB:
Private Sub Worksheet_Activate()
    Dim c As Range
    txt = ""
    txt1 = ""
    With Sheets("Feuil1")
        For Each c In Range(.[P3], [P65536].End(xlUp))
            If c <> "" Then
                On Error Resume Next
                If c.Value < Date Then
                    If txt = "" Then txt = "xxxxxxxx" & vbCrLf & vbCrLf
                    txt = txt & c.Offset(, -14) & " xxxxxx " & c.Offset(, 0) & vbCrLf
                ElseIf c.Value < Date + 5 Then
                    If txt1 = "" Then txtl = "xxxxxxxx" & vbCrLf & vbCrLf
                    txt1 = txt1 & c.Offset(, -14) & " xxxxx " & c.Offset(, 0) & vbCrLf
                End If
            End If
        Next c
        If txt <> "" Then MsgBox txt, vbCritical, "xxxxx"
        If txt1 <> "" Then MsgBox txt1, vbInformation, "xxxxx"
    End With
End Sub
 
Dernière édition:

jmfmarques

XLDnaute Accro
Bonjour à tous les deux
Je n'ai pas l'intention de commenter le mécanisme lui-même, qui me semble à la portée de tout débutant, ni sa "philosophie".
Je vais me contenter d'appeler votre attention (à tous les deux, puisque vous faites tous les deux la même erreur) sur le fait qu'étant dans une boucle, votre variable (tant txt que txt1) garde sa dernière valeur, sauf à la réinitialiser à "" (ce qui est bien évidemment indispensable).
PS : et pouvez-vous (tant l'un que l'autre) me dire à quoi peut bien servir ici ce "on error resume next" ?
Allons allons. Je veux croire que ces deux remarques vous permettront de retrouver le chemin du réveil. ;)
 

Fred0o

XLDnaute Barbatruc
Bonjour jmfmarques

Merci pour tes commentaires.
Cependant, a mon tour d'attirer ton attention sur le fait qu'en début de macro, j'initialise les 2 variables txt et txt1 a "".
Cette macro rajoute a chaque occurrence, une ligne avec le nom et la date remplissant les critères.
Poue ce qui est de On Error Resume Next, je n'y ai pas touche, ne m'y suis pas interessé, puisque hors d la question. Je laisse le soin a ExLnoob d'y répondre.
Peut-être te faudrait-il aussi bire un café pour etre bien reveillé ?
Quant a moi, il est déjà 13h19 ici, je suis réveillé depuis belle lurette...
:)
 

ExcLnoob

XLDnaute Occasionnel
Bonjour à tous deux,

Surtout, merci pour vos réponses (qui ont déclenché quelques passions à ce que je lis ;)...)
Fred0o, ta réponse fonctionne parfaitement, Merci beaucoup!
Qu'ai-je loupé ?? Uniquement les 2 variables txt et txt1 ?
Quel âne...

S'agissant du "On Resume Next", effectivement il ne sert à rien. Je voulais une prise en compte des cellules fusionnées et vides mais a force de modifer je ne l'ai pas supprimé... C'est chose faite.

Merci beaucoup à tous les 2!!
 

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 422
Membres
102 886
dernier inscrit
eurlece