web-dev-qa-db-fra.com

Code VBA pour afficher la fenêtre contextuelle de la boîte de message si la formule dans la cellule cible dépasse une certaine valeur

J'essaie d'écrire une macro simple pour afficher une fenêtre contextuelle (vbOKOnly) si la valeur dans une cellule dépasse une certaine valeur.

J'ai essentiellement une feuille de travail avec des produits et des remises. J'ai une formule dans une cellule, disons A1, qui montre la remise en pourcentage (50% ou 0,5) de remise effective de toutes les entrées.

Ce que je recherche, c'est du code pour afficher une boîte de message si la valeur de la cellule A1 dépasse 50%, car l'entrée d'une autre cellule a poussé la remise à plus de 50%.

Merci!

9
Hatt

Vous pouvez ajouter le code VBA suivant à votre feuille:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") > 0.5 Then
        MsgBox "Discount too high"
    End If
End Sub

Chaque fois qu'une cellule est modifiée sur la feuille, elle vérifie la valeur de la cellule A1.

Remarques:

  • si A1 dépend également de données situées dans d'autres feuilles de calcul, la macro ne sera pas appelée si vous modifiez ces données.
  • la macro sera appelée sera appelée chaque fois que quelque chose change sur votre feuille. S'il a beaucoup de formule (comme dans les 1000), cela pourrait être lent.

Widor utilise une approche différente (Worksheet_Calculate au lieu de Worksheet_Change):

  • Avantages: sa méthode fonctionnera si la valeur de A1 est liée aux cellules situées dans d'autres feuilles.
  • Inconvénients: si vous avez de nombreux liens sur votre feuille qui font référence à d'autres feuilles, sa méthode fonctionnera un peu plus lentement.

Conclusion : utilisez Worksheet_Change si A1 ne dépend que des données situées sur la même feuille, utilisez Worksheet_Calculate si non.

17
assylias

Essentiellement, vous souhaitez ajouter du code à l'événement Calculate de la feuille de calcul appropriée.

Dans la fenêtre Projet de l'éditeur VBA, double-cliquez sur la feuille à laquelle vous souhaitez ajouter du code dans les listes déroulantes en haut de la fenêtre de l'éditeur, choisissez respectivement `` Feuille de calcul '' et `` Calculer '' à gauche et à droite.

Vous pouvez également copier le code ci-dessous dans l'éditeur de la feuille que vous souhaitez utiliser:

Private Sub Worksheet_Calculate()

If Sheets("MySheet").Range("A1").Value > 0.5 Then
    MsgBox "Over 50%!", vbOKOnly
End If

End Sub

De cette façon, chaque fois que la feuille de calcul recalcule, elle vérifie si la valeur est> 0,5 ou 50%.

2
Widor

Je ne pense pas qu'une boîte de message soit la meilleure façon de procéder, car vous auriez besoin du code VB exécuté en boucle pour vérifier le contenu de la cellule, ou à moins que vous ne prévoyiez d'exécuter la macro Dans ce cas, je pense qu'il serait préférable d'ajouter une mise en forme conditionnelle à la cellule pour changer l'arrière-plan en rouge (par exemple) si la valeur dépasse la limite supérieure.

1
Matt Donnan