Un seul MsgBox au lieu de X MsgBox

AreYouBush

XLDnaute Junior
Bonsoir les insomniaques,

J'ai récupéré ce code fournir par Bond sur un autre fil https://www.excel-downloads.com/threads/alerte-et-message-box-si-date-atteinte.165799/
Code:
Private Sub Workbook_Open()
Dim Cel As Range
For Each Cel In Range("b2:" & Range("B2").End(xlDown).Address)
    If Cel.Value - 10 <= Date Then
        MsgBox "Client " & Cel.Offset(0, -1) & " attention echeance de paiement dans 10 JOURS"
    End If
Next Cel
End Sub
le problème, c'est que çà crée un MsgBox pour chaque client.
Je voulais savoir si il était possible de créer un seul MsgBox avec la liste de tout les clients arrivant a échéance?

Merci de vos lumières.
Bisou <3
 

KenDev

XLDnaute Impliqué
Re : Un seul MsgBox au lieu de X MsgBox

Bonjour AreYouBush,

A tester :
Code:
Private Sub Workbook_Open()
Dim Cel As Range, s As String
s = "Attention échéance de paiement dans 10 JOURS pour les clients :"
For Each Cel In Range("b2:" & Range("B2").End(xlDown).Address)
    If Cel.Value - 10 <= Date Then
        s = s & vbCr & Cel.Offset(0, -1)
    End If
Next Cel
If Left(s, 1) <> ":" Then MsgBox s
End Sub

Cordialement

D
 

Efgé

XLDnaute Barbatruc
Re : Un seul MsgBox au lieu de X MsgBox

Bonjour serphil63, le fil
Quelques commentaires:
VB:
Private Sub Workbook_Open()
Dim Cel As Range, s As String
's est une chaine de caractères
s = "Attention échéance de paiement dans 10 JOURS pour les clients :"
'Pour chaque cellule de B2 à la fin de la colonne B
For Each Cel In Range("b2:" & Range("B2").End(xlDown).Address)
    'Si la cellule est inférieur ou égale à aujourd'hui - 10 jours
    If Cel.Value - 10 <= Date Then
        'on ajoute au texte un retour chariot et le contenu de la cellule en colonne A
        '(-1 = colonne à gauche de la cellule ou l'on se trouve)
        s = s & vbCr & Cel.Offset(0, -1)
    'Fin de la condition
    End If
'prochaine cellule
Next Cel
'Si le dernier caractère à droite du texte n'est pas le caractère ":"
'Donc si on a ajouté du texte au texte de départ,
'on affiche le texte dans la boite de message
If Left(s, 1) <> ":" Then MsgBox s
End Sub
Cordialement
 
Dernière édition:

serphil63

XLDnaute Nouveau
Re : Un seul MsgBox au lieu de X MsgBox

Rebonjour,

Merci beaucoup, Efgé, pour cette réponse rapide.

En fait, j'ai du mal à comprendre à quoi sert cette ligne.
Ce que j'ai constaté c'est qu'en son absence il ne se passe rien à l'éxécution de la macro.
Par contre, je ne comprends pas pourquoi on rajoute une condition (If Left(s, 1) <> ":")
Par souci de simplification, ne peux-ton pas simplement écrire :
...
Next Cell
MsgBox s
End Sub"

A moins que le fait qu'il y ait des dates arrivant à échéance génère du texte après le ":" de la msgbox, ce qui déclenche l'apparition de la msgbox ?
et, dans ce cas, pourquoi utilise t-on Left au lieu de Right (puisqu'on cherche à vérifier s'il y a quelque chose après le ":") ?

Désolé si mon message est un peu confus, mais le décalage entre la théorie des livres et la pratique engendre beaucoup de questions dans ma tête ! :)

Cordialement,
 

Efgé

XLDnaute Barbatruc
Re : Un seul MsgBox au lieu de X MsgBox

Re

Par souci de simplification, ne peux-ton pas simplement écrire :
...
Next Cell
MsgBox s
End Sub"

Dans ce cas la boite apparaitra même si il n'y a aucune date de trouvée

A moins que le fait qu'il y ait des dates arrivant à échéance génère du texte après le ":" de la msgbox, ce qui déclenche l'apparition de la msgbox ?

C'est exactement ça

et, dans ce cas, pourquoi utilise t-on Left au lieu de Right (puisqu'on cherche à vérifier s'il y a quelque chose après le ":") ?
Encore exacte, c'est une erreur dans le code, il faut utiliser Right

Cordialement
 

Discussions similaires

Réponses
2
Affichages
154

Statistiques des forums

Discussions
312 310
Messages
2 087 119
Membres
103 478
dernier inscrit
Frederic Lagger