Affichage multiple dans un MsgBox

Résolu/Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - Modifié par bassmart le 26/05/2015 à 18:55
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 27 mai 2015 à 18:39
Bonjour à tous!

J'ai créer un code qui fait certaine validation sur la date et me renvoie un message à chaque fois qu'il trouve une correspondance au test. J'ai réussi à faire afficher mes résultats dans un MsgBox mais il m'affiche tout le temps le premier résultats seul dans un MsgBox pour ensuite me mettre tout les résultats dans un autres MsgBox.

Voici mon code:

Private Sub Worksheet_Activate()

Dim cell As Variant
Dim Msg As String, Msg2 As String

For Each cell In Range("B10:D10")
    If cell.Value + 365 < Range("B12") Or cell.Value + 365 = Range("B12") Then
    c = cell.Column
    l = cell.Row - 6
    Msg = Msg & "Appareil à Calibrer: " & Cells(l, c).Value & Chr(10)
    cell.Interior.ColorIndex = 3
    MsgBox Msg, vbCritical, "Attention!!!"
    
    ElseIf cell.Value < Range("B12") - 305 Then
    c = cell.Column
    l = cell.Row - 6
    Msg2 = Msg2 & "Calibration de l'appareil " & Cells(l, c).Value & " à planifier prochainement!" & Chr(10)
    cell.Interior.ColorIndex = 6
    MsgBox Msg2, vbExclamation, "Calibration arrive à échéance!"

    ElseIf cell.Value > Range("B12") - 305 Then
    c = cell.Column
    l = cell.Row - 6
    cell.Interior.ColorIndex = 2
    End If
    
Next

End Sub



J'ai besoin d'un petit coup de main sur celui-là!

Merci!

1 réponse

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
26 mai 2015 à 20:07
Bonjour,

Je te recommende fortement une trace pas à pas lors de l'exécution de ta macro.
Dans la marge de gauche, tu clique pour mettre un point d'arrêt.
(préférablement sur ton premier if).
Ensuite tu lances la macro et tu fais F8 à répétition et tu regardes ce que Excel fait et comment il calcule chacune de tes conditions.

C'est peut-être moi qui est parano de nature, mais je ne fais pas confiance à Excel pour la priorité des opérateurs.
Exemple : cell.Value + 365 < Range("B12")
Il compare 365 avec B12, ou il va additionner avant ?
Je préfère mettre des parenthèses personnellement.
Encore la, si Excel ne calcule pas comme tu avais prévu, c'est avec une trace pas à pas qu'on s'en rend compte.
La trace pas à pas est ton meilleur outil de débuggage.

Selon ma compréhension, tu veux accumuler l'information dans les variable msg et msg2 et seulement à la fin, afficher deux msgbox.

Dans ton code, les msgbox sont a l'intérieur de ton For each, donc pour chaque cellule, un MSG est affiché.
Et si For Each parcours 1000 cellules, tu devrais avoir 1000 msgbox toujours de plus en plus gros car la variable msg se concatène à elle même pour chaque cellule.

Private Sub Worksheet_Activate()

Dim cell As Variant
Dim Msg As String, Msg2 As String

'Initialisation
Msg = ""
Msg2 = ""


For Each cell In Range("B10:D10")
    'Assigner les variable
    c = cell.Column
    l = cell.Row - 6

    'Validation du contenu de cell
    If ((cell.Value + 365) < Range("B12")) Or ((cell.Value + 365) = Range("B12")) Then
        Msg = Msg & "Appareil à Calibrer: " & Cells(l, c).Value & Chr(10)
        cell.Interior.ColorIndex = 3
    ElseIf (cell.Value < (Range("B12") - 305) Then
        Msg2 = Msg2 & "Calibration de l'appareil " & Cells(l, c).Value & " à planifier prochainement!" & Chr(10)
        cell.Interior.ColorIndex = 6
    ElseIf cell.Value > (Range("B12") - 305) Then
        cell.Interior.ColorIndex = 2
    End If  
Next

'Affichage des msgbox
MsgBox Msg, vbCritical, "Attention!!!"
MsgBox Msg2, vbExclamation, "Calibration arrive à échéance!"

End Sub
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
26 mai 2015 à 21:58
Bonjour PlacageGranby!

Merci pour ton aide, ton code fonctionne très bien! J'ai utilisé la trace pas à pas mais pas tout au long de mon code. Jusqu'à là, ça fonctionnais bien , je commence à me débrouiller un peu en vba, mais encore beaucoup de croûte à manger!

Merci pour les conseils!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
27 mai 2015 à 18:39
Bonjour à tous!

J'ai apporté une petite amélioration à mon code. Lorsqu'il n'y avais aucunes données qui correspondaient à mes 2 premières conditions, les MsgBox s'affichaient quand même.

J'ai donc ajouté, une fonction "if". Voici:

Private Sub Worksheet_Activate()

Dim cell As Variant
Dim Msg As String, Msg2 As String

'Initialisation
Msg = ""
Msg2 = ""


For Each cell In Range("B10:D10")
    'Assigner les variable
    c = cell.Column
    l = cell.Row - 6

    'Validation du contenu de cell
    If ((cell.Value + 365) < Range("B12")) Or ((cell.Value + 365) = Range("B12")) Then
        Msg = Msg & "Appareil à Calibrer: " & Cells(l, c).Value & Chr(10)
        cell.Interior.ColorIndex = 3
    ElseIf (cell.Value < (Range("B12") - 305)) Then
        Msg2 = Msg2 & "Calibration de l'appareil " & Cells(l, c).Value & " à planifier prochainement!" & Chr(10)
        cell.Interior.ColorIndex = 6
    ElseIf cell.Value > (Range("B12") - 305) Then
        cell.Interior.ColorIndex = 2
    End If
Next

'Affichage des msgbox
If Msg <> "" Then
MsgBox Msg, vbCritical, "Attention!!!"
End If
If Msg2 <> "" Then
MsgBox Msg2, vbExclamation, "Calibration arrive à échéance!"
End If
End Sub
0