Alerte sonore Excel
Bonjour à tous,
je suis nouveau sur le forum et je ne connais rien en Macro et VBA.
Je souhaiterais un fichier excel, qui m'ouvre des MSg Box lorsque les dates à J-40 , J- 15, J-10 et J-8 par rapport à mes débuts de chantier, sont dépassées (je suis un peu tête en l'air et un tel fichier pourrait réellement m'aider).
J'ai consulté de nombreux sites et forum mais je n'arrive pas à me faire à VBA
Merci d'avance pour vos réponses
Bonjour,
Dans ton vrai fichier, les données sont réparties comme dans celui que tu nous passe?
A savoir les dates concernées seront bien en colonnes C, E, G, I?
Si oui, ce code est à insérer dans le module ThisWorkbook.
Option Explicit
Private Sub Workbook_Open()
Dim i As Long, LigneDebut As Integer, Msg40 As String, Msg15 As String, Msg10 As String, Msg8 As String
With Worksheets("Feuil1") ' A ADAPTER : nom de la feuille concernée
LigneDebut = 5 ' A ADAPTER : numéro de la première ligne à traiter
For i = LigneDebut To .Range("A" & Rows.Count).End(xlUp).Row
If DateDepassee(.Cells(i, 3).Value, 40) Then ' A ADAPTER : 3 = colonne C date dépassée de 40
Msg40 = Msg40 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
End If
If DateDepassee(.Cells(i, 5).Value, 15) Then ' A ADAPTER : 5 = colonne E date dépassée de 15
Msg15 = Msg15 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
End If
If DateDepassee(.Cells(i, 7).Value, 10) Then ' A ADAPTER : 7 = colonne G date dépassée de 10
Msg10 = Msg10 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
End If
If DateDepassee(.Cells(i, 9).Value, 8) Then ' A ADAPTER : 9 = colonne I date dépassée de 8
Msg8 = Msg8 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
End If
Next i
End With
If Msg40 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 40 : " & vbCrLf & Msg40
If Msg15 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 15 : " & vbCrLf & Msg15
If Msg10 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 10 : " & vbCrLf & Msg10
If Msg8 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 8 : " & vbCrLf & Msg8
End Sub
Private Function DateDepassee(D As Date, NbJours As Integer) As Boolean
DateDepassee = Date - D < NbJours
End Function
Bonsoir,
Merci pour votre contribution, j'essaie au plus vite et vous tiens au courant.
Dans l'idéal oui, les dates concernées seront bien dans les colonnes C,E,G et I
Merci
Bonne soirée
Bonsoir,
ne faut-il pas faire les tests dans l'autre sens ? car si c'est inférieur à 40, c'est vrai aussi pour 15, 10 et 8, non ?
Ou bien c'est moi qui comprend le problème à l'envers... Désolé.
@ bientôt
LouReeD
Bonjour,
Et pour l'alerte sonore, il suffit de saisir à l'endroit voulu l'instruction :
Beep
Bonsoir,
ne faut-il pas faire les tests dans l'autre sens ? car si c'est inférieur à 40, c'est vrai aussi pour 15, 10 et 8, non ?
Bonjour
On peut le comprendre également comme cela.
Mais, ici, s'agissant de chantiers, j'ai cru comprendre qu'il voulait avoir des alertes simultanées pour les 4...
A voir, selon la réponse du demandeur...
Bonjour,
C'est plus que le test -40 , -15, -10 et -8 sont fait dans la même boucle avec ajout de texte à chaque fois que la condition est vrai, donc si le chantier est à -5 alors il sera annoncé comme étant à 40, puis -15 puis -10 puis -8... Ne devrait-il pas être annoncé qu'à moins -8 ?
@ bientôt
LouReeD
En reprenant votre code cela donnerait ceci :
Option Explicit
Private Sub Workbook_Open()
Dim i As Long, LigneDebut As Integer, Msg40 As String, Msg15 As String, Msg10 As String, Msg8 As String
With Worksheets("Feuil1") ' A ADAPTER : nom de la feuille concernée
LigneDebut = 5 ' A ADAPTER : numéro de la première ligne à traiter
For i = LigneDebut To .Range("A" & Rows.Count).End(xlUp).Row
If DateDepassee(.Cells(i, 9).Value, 8) Then ' A ADAPTER : 9 = colonne I date dépassée de 8
Msg8 = Msg8 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
ElseIf DateDepassee(.Cells(i, 7).Value, 10) Then ' A ADAPTER : 7 = colonne G date dépassée de 10
Msg10 = Msg10 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
ElseIf DateDepassee(.Cells(i, 5).Value, 15) Then ' A ADAPTER : 5 = colonne E date dépassée de 15
Msg15 = Msg15 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
ElseIf DateDepassee(.Cells(i, 3).Value, 40) Then ' A ADAPTER : 3 = colonne C date dépassée de 40
Msg40 = Msg40 & vbCrLf & "Chantier : " & .Cells(i, 1).Value & " (" & .Cells(i, 2).Value & ")"
End If
Next i
End With
If Msg40 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 40 : " & vbCrLf & Msg40
If Msg15 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 15 : " & vbCrLf & Msg15
If Msg10 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 10 : " & vbCrLf & Msg10
If Msg8 <> vbNullString Then MsgBox "Les chantiers suivants sont à - 8 : " & vbCrLf & Msg8
End Sub
Private Function DateDepassee(D As Date, NbJours As Integer) As Boolean
DateDepassee = D - Date < NbJours
End Function
du coup le chantier 2 n'est annoncé qu'une fois à -8, au lieu des 4 messages allant de -40 à -8.
Mais il est vrai que j'ai changé aussi le sens de la soustraction de la fonction... Donc plus que le sens ce sont les ElseIF qui font qu'il n'y a pas de répétition du chantier dans chaque message.
@ bientôt
LouReeD