Alerte MSG selon date en VB

  • Initiateur de la discussion Initiateur de la discussion incubus20851
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

incubus20851

XLDnaute Occasionnel
Bonjour,

j'ai un tableau avec des dates de fin, et à l'ouverture j'aimerais que si la date de fin est dans 3 jour par rapport à la date du jour faire un message d'alerte jusqu'à ce qu'une cellule soit remplie.

Voici mon code :
Code:
Private Sub Workbook_Open()
Dim Cell As Range
    For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row)
        If CLng(Cell.Offset(0, 3)) - 3 > CLng(Date) Then 'là j'aimerais l'alerte à partir de 3 jours avant la date de fin
            MsgBox " L'agent : " & Cell & " finit son contrat le : " & CDate(Cell.Offset(0, 3))
        If Cell.Offset(0, 5) = "X" Then ' Quand la cellule contient le X ne pas envoyé le message et passé à la ligne suivante
        Exit Sub
            End If
        End If
    Next
End Sub

Le soucis c'est que même quand y'a le "X" le message s'affiche quand même. Et le deuxieme soucis c'est que la date de fin - 3 ne marche pas. Cela marque que si la date de fin de contrat est supérieur à la date du jour

Merci d'avance pour vos réponses
A bientôt
 
Re : Alerte MSG selon date en VB

Bonjour

essaie comme cela
1 tu testes la valeur avant le message.
2 reste en format date pour ta comparaison


Private Sub Workbook_Open()
Dim Cell As Range
If Cell.Offset(0, 5) = "X" Then ' Quand la cellule contient le X ne pas envoyé le message et passé à la ligne suivante
Exit Sub
For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row)
If Cell.Offset(0, 3) - 3 >Date Then 'là j'aimerais l'alerte à partir de 3 jours avant la date de fin
MsgBox " L'agent : " & Cell & " finit son contrat le : " & CDate(Cell.Offset(0, 3))

End If
End If
Next
End Sub
 
Re : Alerte MSG selon date en VB

Bonjour à tous,

Une "méthode" un peu différente :

Code:
Private Sub Workbook_Open()
   Dim X As Long
    For X = 2 To Sheets("BD").Range("A65536").End(xlUp).Row
        If Cells(X, 3) > Date + 3 And Cells(X, 5) <> "X" Then
            MsgBox " L'agent : " & Range("A" & X) & " finit son contrat le : " & Format(Range("C" & X), "dd/mm/yyyy")
        End If
    Next
End Sub

A+ à tous
 
Re : Alerte MSG selon date en VB

Bonjour Incubus, Sousou, bonjour le forum,

Pas compris ton code Sousou... je verrais plutôt les choses comme ça (si j'ai bien compris la question d'Incubus...) :

Code:
Private Sub Workbook_Open()
Dim Cell As Range 'déclare la variable Cell
 
For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row) 'boucle sur toutes les cellules Cell de la plage A2:A...
    If Cell.Offset(0, 5) <> "X" Then ' condition 1 : si pas de "X" en colonne F de la ligne correspondante
        If Cell.Offset(0, 3) - 3 = Date Then 'condition 2 : si la date de fin - 3 jours = la date du jour
            MsgBox " L'agent : " & Cell & " finit son contrat le : " & CDate(Cell.Offset(0, 3)) 'message
        End If 'fin de la dondition 2
    End If 'fin de la condition 1
Next 'prochaine cellule de la boucle
End Sub

Édition :

Salut JCGL on s'est croisé.
 
Re : Alerte MSG selon date en VB

Tout d'abord merci pour vos réponses :

Sousou : ton code me renvoi End If sans Bloc If, j'ai essayé plusieurs variantes rien n'y fait !

JCGL : le code ne me renvoi pas d'erreur mais ne fonctionne visiblement pas

Robert : la même chose

Donc je vous joint le fichier ce sera plus simple je pense.

J'aimerais en résumé :
Exemple :
Date de fin 06/05/10 Date du jour : 03/05/10
J'aimerais qu'à l'ouverture Excel affiche le message quand la date de fin se trouve dans 3 jours par rapport à la date d'aujourd'hui et qu'il affiche toujours ce message au delà de la date de fin jusqu'à ce que la case soit remplie par "X".

Donc le message s'ouvrira quand on sera à -2 jours de la fin mais aussi à +2 ou + 10 jours et jusqu'à ce que le "X" soit inscrit

J'espere que c'est assez clair, sinon posez moi vos questions
Merci !
 

Pièces jointes

Re : Alerte MSG selon date en VB

Bonjour le fil, bonjour le forum,

Désolé Incubus, chez moi ça marche ! Regarde ton exemple...



Édition :
J'avais pas tout relu (sur le coup de la colère sans doute...) remplace = par > et ça devrait marcher comme tu le souhaite... Tout comme la proposition de JGCL d'ailleurs.
 

Pièces jointes

Dernière édition:
Re : Alerte MSG selon date en VB

Bonjour le fil, bonjour le forum,

Heu non Sousou, mon fichier fonctionnait corectement selon les premiers critères d'Incubus, mais sa requête a changé entre temps... J'attends qu'il se décide à poser une question claire pour m'y remettre... Sinon ça sert à rien.
 
Re : Alerte MSG selon date en VB

Oui, en fait ton code marche bien !

Par contre j'ai vu qu'il fonctionne que si la date de fin est égale à la date du jour + 3. Soit date du jour 03/05/10 marche que avec 06/05/10

Alors que j'aimerais qu'il s'affiche à partir de date du jour -3 jusqu'à date du jour + infini jusqu'à ce qu'il y ait "X" de renseigné

Y'a surement une modif a faire dans le code mais j'vois pas trop 🙁

Merci !!

Si c'est pas clair, j'essaierai de reformuler, désolé si je suis pas clair, c'est pas toujours évident d'expliquer ce genre de truc. 🙂
 
Dernière édition:
Re : Alerte MSG selon date en VB

Tout marche nickel, désolé de t'avoir enervé Robert !

Merci en tout cas à tous pour votre aide !
C'est Top !!

Voici le code si jamais ça peut aider quelqu'un :

Code:
Private Sub Workbook_Open()
Dim Cell As Range 'déclare la variable Cell

For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row) 'boucle sur toutes les cellules Cell de la plage A2:A...
    If Cell.Offset(0, 5) <> "X" Then ' condition 1 : si pas de "X" en colonne F de la ligne correspondante
        If Cell.Offset(0, 3) > Date - 3 Then ''condition 2 : si la date de fin - 3 jours = la date du jour
            MsgBox " L'agent : " & Cell & " finit son contrat le : " & CDate(Cell.Offset(0, 3)) 'message
        End If 'fin de la dondition 2
    End If 'fin de la condition 1
Next 'prochaine cellule de la boucle
End Sub
 
Re : Alerte MSG selon date en VB

Re-bonjour,

J'ai un petit soucis avec mon code

Code:
Private Sub Workbook_Open()
Dim Cell As Range 'déclare la variable Cell

For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row) 'boucle sur toutes les cellules Cell de la plage A2:A...
    If Cell.Offset(0, 6) <> Date Then ' condition 1 : si pas de "OK" en colonne F de la ligne correspondante
        If Cell.Offset(0, 3) >= Date - 3 Then ''condition 2 : si la date de fin - 3 jours = la date du jour
            MsgBox "L'agent : " & Cell & " " & Cell.Offset(0, 1) & " finit son contrat le : " & CDate(Cell.Offset(0, 3)) & Chr(13) & vbTab & "Envoyer la situation CA au CIGAP" 'message
        End If 'fin de la dondition 2
    End If 'fin de la condition 1
Next
'prochaine cellule de la boucle
End Sub

Jusqu'ici ce code fonctionne bien, mais quand je veux rajouter ce code :
Code:
    If Cell.Offset(0, 3) > Date Then
Exit Sub
End If

Le code ne fonctionne plus correctement,

En fait à la base le code cherche si y'a une date dans une colonne, si y'a pas de date alors il cherche les contrats qui se finissent à date du jour -3.

Et j'aimerais lui dire que si la date de fin de contrat est supérieur à la date du jour alors qu'il n'affiche pas de message pour les contrats concernées.

Vous savez où je pourrais intégrer ce code ?

Quand je ne met pas ce code, il me met un message pour tout les contrats qui sont pas encore fini.


Merci d'avance !!
 
Re : Alerte MSG selon date en VB

Ok j'ai trouvé une soluce avec ça :

Code:
Private Sub Workbook_Open()
For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row) 'boucle sur toutes les cellules Cell de la plage A2:A...
    If Cell.Offset(0, 3) <= Date Then
    If Cell.Offset(0, 9) <> Date Then
    MsgBox "L'agent : " & Cell & " " & Cell.Offset(0, 1) & " finit son contrat le : " & CDate(Cell.Offset(0, 3)) & Chr(13) & vbTab & "Envoyer la situation CA au CIGAP" 'message
    Else
    If Cell.Offset(0, 3) > Date Then
    Exit Sub
    End If
    End If
    End If
     'fin de la condition 1
Next
'prochaine cellule de la boucle
End Sub

Merci quand même et si ça peut aider tant mieux !
Je début en VB, y'a peut etre surement mieux
 
Re : Alerte MSG selon date en VB

Bonjour à toutes et à tous,

Je souhaiterais appliquer une couleur sur toute la ligne quand le msgbox s'affiche.

Le probleme c'est que j'ai déjà 3 MFC d'enregistrer donc je souhaiterais le mettre dans mon code vba suivant mais je ne sais pas où et quoi :


Code:
Option Explicit
Private Sub Workbook_Open()
With Sheets("BD")
    .EnableOutlining = True
    .Protect "BD", , , , True
End With
Dim Cell As Range 'déclare la variable Cell
For Each Cell In Sheets("BD").Range("A2" & ":A" & Range("A65536").End(xlUp).Row) 'boucle sur toutes les cellules Cell de la plage A2:A...
    If Cell.Offset(0, 3) - 2 <= Date Then
    If Cell.Offset(0, 8) <> "AVENANT" Then
    If Cell.Offset(0, 9) = "" Then
    MsgBox "L'agent : " & Cell & " " & Cell.Offset(0, 1) & " finit son contrat le : " & CDate(Cell.Offset(0, 3)) & Chr(13) & vbTab & "test" 'message
    Else
    If Cell.Offset(0, 3) - 2 > Date Then
    Exit Sub
    End If
    End If
    End If
    End If
     'fin de la condition 1
Next
'prochaine cellule de la boucle
End Sub

Mon autre question : Quand ma ligne sera colorié par le code vba mes 3 MFC seront inopérantes sur ces lignes ?

Merci d'avance pour vos reponses !
A bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
270
Réponses
5
Affichages
716
Réponses
41
Affichages
895
Réponses
2
Affichages
334
Retour