XL 2016 Mise à jour colonne EXCEL et MSGBOX

YOUYOU25

XLDnaute Junior
Bonjour à tous ,

Je viens de créer un fichier client en VBA avec MSGBOX pour m'indiquer le nom et le nombre de jours restant pour régler les factures non traitées en colonne L . Je dispose d'un bouton pour appeler la macro à chaque fois que je modifie mon tableau EXCEL, mais chaque fois que je modifie la date en colonne D et que j'appelle la macro, toutes les cellules évoluent sauf celles des jours restants par rapport à aujourd'hui en colonne K et la MSGBOX ne prend pas en compte. Si j'appelle de nouveau la macro par le bouton la cellule de la colonne K, la modification dans le tableau est effectuée et la MSGBOX est également modifiée. Est ce qu'une âme charitable pourrait me proposer une modification dans ma fonction pour tout fonctionne avec un seul appel de macro.

Merci à tous

Bonne soirée à vs
 

Pièces jointes

  • CLASSEUR REGLEMENT PAULINE.xlsm
    78.8 KB · Affichages: 8

Eric KERGRESSE

XLDnaute Occasionnel
Bonjour,

Il vous faut réaliser une première passe pour mettre à jour vos données et une deuxième pour remplir votre variable message :

VB:
Sub RelanceFactures()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim currentDate As Date
    Dim i As Long
    Dim message As String ' Variable pour stocker les messages
    Dim nonRegleCount As Long ' Variable pour compter les factures non réglées
    Dim daysRemaining As Long
  
    ' Spécifiez le nom de la feuille de calcul
    Set ws = ThisWorkbook.Sheets("Feuil1")
    
    ' Obtenez la date d'aujourd'hui
    currentDate = Date
    
    ' Trouvez la dernière ligne de données dans la colonne A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Parcourez les lignes à partir de la ligne 2
    For i = 2 To lastRow
        If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
            ' Calculer les jours restants
            daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
            ' Afficher les jours restants en colonne K
            ws.Cells(i, "K").Value = daysRemaining
            
            ' Mettre à jour la colonne J en fonction de la colonne C
            Select Case ws.Cells(i, "C").Value
                Case "FACTURE"
                    ws.Cells(i, "J").Value = "A RELANCER"
                Case "LETTREE"
                    ws.Cells(i, "J").Value = "REGLER"
                Case "A FACTURER"
                    ws.Cells(i, "J").Value = "A FACTURER"
                Case Else
                    ws.Cells(i, "J").Value = "NON TRAITE"
            End Select

            ' Mettre à jour la colonne L en fonction de la colonne J
            Select Case ws.Cells(i, "J").Value
                Case "A RELANCER", "A FACTURER"
                    ' "A RELANCER" ou "A FACTURER" en police blanche avec un remplissage en rouge
                    ws.Cells(i, "L").Value = "NON TRAITE"
                    ws.Cells(i, "L").Font.Color = RGB(255, 255, 255) ' Police blanche
                    ws.Cells(i, "L").Interior.Color = RGB(255, 0, 0) ' Fond rouge
                    ws.Cells(i, "L").Font.Bold = True ' Gras
                Case "REGLER"
                    ' "REGLER" en police noire avec un remplissage en vert
                    ws.Cells(i, "L").Value = "TRAITE"
                    ws.Cells(i, "L").Font.Color = RGB(0, 0, 0) ' Police noire
                    ws.Cells(i, "L").Interior.Color = RGB(0, 255, 0) ' Fond vert
                    ws.Cells(i, "L").Font.Bold = True ' Gras
            End Select

            ' Mettre à jour la colonne E en fonction de la colonne L
            If ws.Cells(i, "L").Value = "TRAITE" Then
                ' Afficher le mois et l'année dans la colonne E
                ws.Cells(i, "E").Value = Format(currentDate, "mmmm yyyy")
            Else
                ' Réinitialiser la colonne E si ce n'est pas "TRAITE"
                ws.Cells(i, "E").Value = ""
            End If

            ' Calculer le montant multiplié par 3 % dans la colonne G
            ws.Cells(i, "G").Value = ws.Cells(i, "B").Value * 0.03 & " €"

            ' Calculer la nouvelle date en colonne I en ajoutant la date en colonne D avec le nombre en colonne H
            ws.Cells(i, "I").Value = ws.Cells(i, "D").Value + ws.Cells(i, "H").Value
        End If
    Next i
    
    For i = 2 To lastRow
        If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
            ' Calculer les jours restants
            daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
            ' Afficher les jours restants en colonne K
            ws.Cells(i, "K").Value = daysRemaining
            ' Ajouter les détails à la variable de message uniquement si la colonne L n'est pas "TRAITE"
            If ws.Cells(i, "L").Value <> "TRAITE" Then
                message = message & "FACTURE NON REGLEE - " & ws.Cells(i, "A").Value & vbCrLf & "Jours restants : " & daysRemaining & " jours" & vbCrLf
                nonRegleCount = nonRegleCount + 1 ' Incrémenter le compteur
            End If
        End If
    Next i
    
    
    ' Afficher toutes les informations en une seule MsgBox avec le nombre de factures non réglées dans l'en-tête
    MsgBox "Nombre de factures non réglées : " & nonRegleCount & vbCrLf & vbCrLf & message, vbCritical, "Relance"
End Sub
 

sousou

XLDnaute Barbatruc
Bonjour,
Tu calcules date d'écheance après le nombre de jour alors!!!!
Déplace ton calcul d'échéance

For i = 2 To lastRow
If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
' Calculer les jours restants
Dim daysRemaining As Long
ws.Cells(i, "I").Value = ws.Cells(i, "D").Value + ws.Cells(i, "H").Value
daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
' Afficher les jours restants en colonne K
 

YOUYOU25

XLDnaute Junior
Bonjour,

Il vous faut réaliser une première passe pour mettre à jour vos données et une deuxième pour remplir votre variable message :

VB:
Sub RelanceFactures()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim currentDate As Date
    Dim i As Long
    Dim message As String ' Variable pour stocker les messages
    Dim nonRegleCount As Long ' Variable pour compter les factures non réglées
    Dim daysRemaining As Long
 
    ' Spécifiez le nom de la feuille de calcul
    Set ws = ThisWorkbook.Sheets("Feuil1")
   
    ' Obtenez la date d'aujourd'hui
    currentDate = Date
   
    ' Trouvez la dernière ligne de données dans la colonne A
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
   
    ' Parcourez les lignes à partir de la ligne 2
    For i = 2 To lastRow
        If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
            ' Calculer les jours restants
            daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
            ' Afficher les jours restants en colonne K
            ws.Cells(i, "K").Value = daysRemaining
           
            ' Mettre à jour la colonne J en fonction de la colonne C
            Select Case ws.Cells(i, "C").Value
                Case "FACTURE"
                    ws.Cells(i, "J").Value = "A RELANCER"
                Case "LETTREE"
                    ws.Cells(i, "J").Value = "REGLER"
                Case "A FACTURER"
                    ws.Cells(i, "J").Value = "A FACTURER"
                Case Else
                    ws.Cells(i, "J").Value = "NON TRAITE"
            End Select

            ' Mettre à jour la colonne L en fonction de la colonne J
            Select Case ws.Cells(i, "J").Value
                Case "A RELANCER", "A FACTURER"
                    ' "A RELANCER" ou "A FACTURER" en police blanche avec un remplissage en rouge
                    ws.Cells(i, "L").Value = "NON TRAITE"
                    ws.Cells(i, "L").Font.Color = RGB(255, 255, 255) ' Police blanche
                    ws.Cells(i, "L").Interior.Color = RGB(255, 0, 0) ' Fond rouge
                    ws.Cells(i, "L").Font.Bold = True ' Gras
                Case "REGLER"
                    ' "REGLER" en police noire avec un remplissage en vert
                    ws.Cells(i, "L").Value = "TRAITE"
                    ws.Cells(i, "L").Font.Color = RGB(0, 0, 0) ' Police noire
                    ws.Cells(i, "L").Interior.Color = RGB(0, 255, 0) ' Fond vert
                    ws.Cells(i, "L").Font.Bold = True ' Gras
            End Select

            ' Mettre à jour la colonne E en fonction de la colonne L
            If ws.Cells(i, "L").Value = "TRAITE" Then
                ' Afficher le mois et l'année dans la colonne E
                ws.Cells(i, "E").Value = Format(currentDate, "mmmm yyyy")
            Else
                ' Réinitialiser la colonne E si ce n'est pas "TRAITE"
                ws.Cells(i, "E").Value = ""
            End If

            ' Calculer le montant multiplié par 3 % dans la colonne G
            ws.Cells(i, "G").Value = ws.Cells(i, "B").Value * 0.03 & " €"

            ' Calculer la nouvelle date en colonne I en ajoutant la date en colonne D avec le nombre en colonne H
            ws.Cells(i, "I").Value = ws.Cells(i, "D").Value + ws.Cells(i, "H").Value
        End If
    Next i
   
    For i = 2 To lastRow
        If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
            ' Calculer les jours restants
            daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
            ' Afficher les jours restants en colonne K
            ws.Cells(i, "K").Value = daysRemaining
            ' Ajouter les détails à la variable de message uniquement si la colonne L n'est pas "TRAITE"
            If ws.Cells(i, "L").Value <> "TRAITE" Then
                message = message & "FACTURE NON REGLEE - " & ws.Cells(i, "A").Value & vbCrLf & "Jours restants : " & daysRemaining & " jours" & vbCrLf
                nonRegleCount = nonRegleCount + 1 ' Incrémenter le compteur
            End If
        End If
    Next i
   
   
    ' Afficher toutes les informations en une seule MsgBox avec le nombre de factures non réglées dans l'en-tête
    MsgBox "Nombre de factures non réglées : " & nonRegleCount & vbCrLf & vbCrLf & message, vbCritical, "Relance"
End Sub
Bonsoir Eric,

Un grand merci à vous, tout nickel super.

Bonne soirée à vous
 

YOUYOU25

XLDnaute Junior
Bonjour,
Tu calcules date d'écheance après le nombre de jour alors!!!!
Déplace ton calcul d'échéance

For i = 2 To lastRow
If ws.Cells(i, "D").Value <= currentDate And IsNumeric(ws.Cells(i, "H").Value) Then
' Calculer les jours restants
Dim daysRemaining As Long
ws.Cells(i, "I").Value = ws.Cells(i, "D").Value + ws.Cells(i, "H").Value
daysRemaining = DateDiff("d", currentDate, ws.Cells(i, "I").Value)
' Afficher les jours restants en colonne K
Bonsoir Sousou,

Merci pour votre aide à ts les 2.

Trés bonne soirée à vs
 

Discussions similaires

Réponses
21
Affichages
289
Réponses
46
Affichages
856

Statistiques des forums

Discussions
312 207
Messages
2 086 252
Membres
103 166
dernier inscrit
ZAHRAA