Message d'alerte date butoir

Résolu/Fermé
AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016 - Modifié par crapoulou le 12/04/2016 à 21:26
AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016 - 20 avril 2016 à 13:57
Bonsoir,

Je souhaite voir apparaitre un message d'alerte dans une fenêtre à l'ouverture de mon classeur excel selon que des tâches arrivent à leurs dates butoirs.

Le code est le suivant :
Private Sub Workbook_Open()

'Pour vérifier les délais

Dim Verifiation As Range
For Each Verification In ActiveSheet.Range("Verification")
Valeur = Cells(Verification.Row, 3)
    If Verification = ">7" Then
        MsgBox "La tâche" & Tâche & "se termine dans 7 jours.", vbExclamation, "Vérifier l'avancement."
    Else
    End If
    If Verification = "1" Then
        MsgBox "La tâche" & Tâche & " arrive à sa date butoir. Vérifiez la bonne éxécution.", vbCritical, "Attention !"
    Else
    End If
Next

End Sub


Il y a bien une fenêtre qui s'ouvre mais elle ne mentionne pas la dite tâche qui arrive à expiration dans ma liste. Je ne comprends pas.

Je souhaite avoir 2 types d'alertes, la 1ère arrivant à moins de 7 jours de la fin de a tâche et la deuxième arrivant à 1 jour de la fin.

Voici le fichier : https://www.cjoint.com/c/FDmtvUdZYuc

Merci d'avance pour votre aide et vos conseils.

Bonne soirée.


2 réponses

Utilisateur anonyme
12 avril 2016 à 22:58
Bonsoir AC211984,

La règle sur le forum est de se tutoyer, dans le respect et avec courtoisie. Tu peux donc me tutoyer toi aussi. Tu as écris :

Je souhaite avoir 2 types d'alertes, la 1ère arrivant à moins de 7 jours de la fin de la tâche et la deuxième arrivant à 1 jour de la fin.

Donc :

1) Pour 7 jours ou plus : aucune alerte
2) Pour moins de 7 jours : Alerte n° 1
3) Pour 1 jour : Alerte n° 2

Comme la condition "1 jour" fait partie de la condition "moins de
7 jours" (car 1 < 7), le plus simple pour dissocier cela est de commencer par tester d'abord le cas "1 jour" :

1) Pour 1 jour : Alerte n° 2 ; sinon :
2) Pour moins de 7 jours : Alerte n° 1

Cela suffit : inutile d'ajouter « sinon : » à la fin de la ligne 2
puisqu'il n'y a aucune alerte pour 7 jours ou plus.

=========================================

Pour la façon d'écrire un programme, tu verras qu'il est beaucoup plus facilement lisible si tu utilises l'indentation : c'est le fait de ne pas faire commencer toutes les lignes contre la marge gauche :

On ajoute une marge d'espaces à chaque fois qu'on descend d'un niveau logique dans le code, et on réduit cette marge d'espaces quand on revient au précédent niveau logique.

Même si ça n'est pas très clair pour le moment, tu comprendras vite juste en voyant l'indentation des autres programmes.

Et ça commence juste ci-après !  😉

=========================================

Pour la façon d'écrire un test avec If, tu connais bien sûr :

If Condition Then
   Partie1
Else
   Partie2
End If

Mais il y a aussi :

If Condition1 Then
   Partie1
ElseIf Condition2 Then
   Partie2
ElseIf Condition3 Then
   Partie3
Else
   Partie4
End If

a) Le dernier groupe Else Partie4 est facultatif.
b) Tu peux tester plus de conditions (mettre d'autres ElseIf ...).

Remarque bien que ElseIf est un seul mot-clé, donc SANS espace entre Else et If).

Mais au besoin, sur une seule ligne, il faudra écrire :

If Condition1 Then Partie1 Else If Condition2 Then Partie2

Là, il faut 2 mots-clés Else et If ; si tu mets un seul mot-clé ElseIf, ça provoquera une erreur lors de la compilation !

=========================================

Voici ton code réécrit avec indentation et correction d'erreurs :

Private Sub Workbook_Open() 

'Pour vérifier les délais 

Dim Verifiation As Range 

For Each Verification In ActiveSheet.Range("Verification") 
   Valeur = Cells(Verification.Row, 3) 
   If Verification = "1" Then 
      MsgBox "La tâche" & Tâche & " arrive à sa date butoir. Vérifiez la bonne éxécution.", vbCritical, "Attention !" 
   ElseIf Verification = "<7" Then 
      MsgBox "La tâche" & Tâche & "se termine dans moins de 7 jours.",vbExclamation, "Vérifier l'avancement." 
   End If 
Next 

End Sub

Bien sûr, les lignes 10 et 11 doivent être sur la même ligne.
De même pour les lignes 13 et 14. C'est la largeur étroite de la fenêtre de message qui empêche de mettre de longues lignes,
comme on peut le faire dans l'éditeur VBA.

C'est évident que ça nuit à l'indentation, mais le seul moyen de faire autrement serait de joindre un fichier (via Cjoint par exemple).

Par précaution, fais des essais sur une copie du fichier original ;
mais normalement, ça devrait marcher.  😊
 
0
AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016
13 avril 2016 à 15:21
Bonjour Albkan,

Merci pour toutes ces précisions. J'ai compris que mon code était un peu long et compliqué pour une chose finalement simple. Je comprends aussi très bien tes corrections, mais le code que tu m'as corrigé ne fonctionne pas. Je l'ai copié collé et vérifié, enregistré et ensuite fermé mon classeur, en mettant des dates d'essai arrivant à expiration.

Rien ne se passe quand j'ouvre mon classeur, pas une seule alerte alors que de dates se trouvent effectivement dans mes conditions d'alertes.

Ai-je loupé quelque chose ?

Merci en tout cas pour le coup de main :)
0
Utilisateur anonyme > AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016
13 avril 2016 à 18:56
Bonjour AC211894,

Tout ce que j'ai écris dans mon précédent message reste valable,
mais il manque un complément car je n'ai pas chargé ton fichier.

Je préfère éviter de le faire car j'ai Excel 2003 sur mon PC de bureau.
Le lien n'indique pas la version d'Excel, et c'est peut-être la 2007.

J'ai bien Excel 2007 sur mon PC portable, mais comme il n'est pas connecté
à Internet, il faudrait que je fasse un transfert de fichier via clé USB, ce que
je préfère éviter (sauf si c'est vraiment nécessaire).

Je pense que le complément qui te manque est fourni par ces 2 messages de JvDo (que je remercie beaucoup pour son intervention) :

Message 2 de JvDo
Message 4 de JvDo

Désolé de ne pas t'avoir donné une réponse complète dès le départ,
et que tu aies été déçu(e) que ça ne marche pas.

J'espère que le complément apporté par JvDo résoudra ce problème.
Si oui, penses à le marquer comme Résolu : je saurais ainsi que
c'est réglé.

Dans le cas contraire, je téléchargerai quand même ton fichier
pour essayer de voir si je trouve une solution.

Cordialement.  😊
0
AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016 > Utilisateur anonyme
20 avril 2016 à 13:57
Bonjour Albkan,

Merci pour tous ses conseils, je crois que je viens à bout de mon classeur :)

Les corrections de JvDo m'ont en effet apporté pas mal de solutions.

Merci encore et belle journée.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
13 avril 2016 à 06:49
Bonjour,

La variable tâche n'est pas définie.
Tu dois l'affecter en fonction du Verification.Row trouvé.

Cordialement
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
13 avril 2016 à 17:59
Bonjour,

je viens de voir qu'il y avait un fichier joint.....

effectivement, ça ne peut fonctionner :

1) ta zone nommée "Vérification" contient des nombres, pas du texte.
il faut donc faire des comparaisons
If Verification <= 1 Then
et
ElseIf Verification <= 7 Then
.

2) je te conseille d'ajouter une sélection de la ligne concernée juste avant l'affichage du message :
Verification.Offset(0, -8).Resize(1, 80).Select


3) la variable tâche n'est pas définie :
tu peux récupérer quelque chose de plus complet comme :
MsgBox "La tâche n°   [" & Verification.Offset(0, -8).Value & " ] - " _
        & Verification.Offset(0, -6).Value & ", (ligne " & _
        Verification.Row & " ) arrive à sa date butoir. Vérifiez la" _
        & " bonne éxécution.", vbCritical, "Attention !"
à adapter pour <=7

4) lignes 93 et 98, il n'y a pas de contenu à afficher !
normal que ton message n'affiche pas de tâche.

cdlt
0
AC211984 Messages postés 30 Date d'inscription mardi 2 décembre 2014 Statut Membre Dernière intervention 20 avril 2016 > JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020
20 avril 2016 à 13:56
Bonjour JvDo,

Merci beaucoup pour cette correction, cela fonctionne bien. Mais, si tu as encore un peu de temps, pourrais-tu m'expliquer en quoi consiste ça :

[" & Verification.Offset(0, -8).Value & " ] - " _
& Verification.Offset(0, -6).Value & ", (ligne " & _
Verification.Row & " )

De plus, est-il possible qu'Excel se place sur la cellule concernée par le message affiché ?

Merci beaucoup et belle journée.
0