Alerte sonore Excel

7vba.xlsx (10.03 Ko)

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

Rechercher des sujets similaires à "alerte sonore"