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
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
A voir également:
- Vba msgbox choix multiple
- Excel cellule choix multiple - Guide
- Ecran multiple pc - Guide
- Msgbox vba variable ✓ - Forum VB / VBA
- Presse papier multiple - Guide
- Paris multiple 2/6 explication - Forum Loisirs / Divertissements
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
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.
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
26 mai 2015 à 21:58
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!
27 mai 2015 à 18:39
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: