XL 2013 Message d'alerte à l'ouverture d'Excel

Krisanto

XLDnaute Nouveau
Bonjour je voudrais créer un message d'alerte à l'ouverture d'excel pour signaler 3 jours à l'avance qu'une date arrive à échéance.
Merci de m'aider.
 

Pièces jointes

  • Forum-Excel.xlsx
    9.1 KB · Affichages: 14

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour krisanto, shnozak,le forum

@shinozak , même si ton code fonctionne, il contient deux bugs sous jacents
commencer ta recherche de dernière ligne en A4 bouclera sur 1048575 lignes inutilement si la dernière donnée est en A3
également, comme tu utilises xldown, toute cellule vide en colonne A limitera la boucle à la ligne précédente
(peut être pas gênant dans ce tableau spécifique mais ce n'est pas la meilleure méthode à utiliser de façon générique et re utilisable) pour éviter cela on utilise toujours xlup en partant de la dernière cellule de la feuille.

pour la suite, plutôt des optimisations
il est toujours mieux de déclarer ses variables
utiliser x pour le msgbox ne sert à rien dans ce code puisqu'il n'y a pas besoin de récupérer une réponse utilisateur
instancier ta valeur de ligne max sera toujours plus rapide que de l'évaluer à chaque instance de la boucle
un with/end with sur la feuille sera plus pratique et plus lisible.

Bien cordialement, @+

VB:
Private Sub Workbook_Open()
Dim x&, k&
With Sheets("Feuil1")
    x = .Range("A" & .Rows.Count).End(xlUp).Row
    For k = 2 To x
        If .Range("B" & k) - 3 = Date Then MsgBox "Attention il vous reste jusqu'au " & Format(.Range("B" & k), "dddd dd mmmm yyyy") & " pour faire " & .Range("A" & k), vbOKOnly + vbInformation
    Next
End With
End Sub

sur un grand nombre de données, il sera plus rapide d'utiliser un tableau VB que d'évaluer chaque cellule.
VB:
Private Sub Workbook_Open()
Dim x&, k&, Range_Ref
With Sheets("Feuil1")
    Range_Ref = .Range("A2:B" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
x = UBound(Range_Ref, 1)
For k = 2 To x
    If Range_Ref(k, 2) - 3 = Date Then MsgBox "Attention il vous reste jusqu'au " & Format(Range_Ref(k, 2), "dddd dd mmmm yyyy") & " pour faire " & Range_Ref(k, 1), vbOKOnly + vbInformation
Next
Range_Ref = Null
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 080
Messages
2 085 153
Membres
102 797
dernier inscrit
RIM CHTIOUI