Macro événementielle

  • Initiateur de la discussion C@thy
  • Date de début
C

C@thy

Guest
bonjour (re!)

j'ouvre un nouveau fil car le sujet est différent de la validation.
j'ai 3 chiffres, en C1, C2, C3.

Je voudrais que lorsque je saisis un chiifre en C3 un libellé d'erreur apparaisse en D1 si le total de C1 à C3 est différent du montant en C4; voici un fichier joint en explication.

Merci pour votre aide. ;)

C@thy
BipBip.gif
 
C

C@thy

Guest
bon, j'arrive pas à joindre (11k seulement zippé, pourtant!), alors j'explique :

Je n'arrive pas à afficher un message d'erreur en D1 lorsque le total de C1 à C3 est différent du montant en C4.
MERCI à vous.
voici mon code (pas optimisé!!! ne riez pas!!!)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Range('D1') = ''
If Not Intersect(Target, Range('C3')) Is Nothing Then
    If Range('C4') <> Range('C1') + Range('C2') + Range('C3') Then
       MsgBox ('ERREUR SUR TOTAL DES 3 CELLULES')
       With Worksheets('Feuil1').Range('D1')
         .Font.ColorIndex = 3
         .Font.Bold = True
         .Font.Name = 'Arial'
         .Font.Size = 14
         .Font.ColorIndex = 3
       End With
 Range('D1').Value = 'ERREUR DE SAISIE'
   End If
End If
End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour Cathy

Ton code ne fonctionne que sur changement de ta cellule C3 donc si tu as une modif dans les cellules C1 C2 C4 tu ne testes rien

donc il vaudrait mieux en première ligne

If Not Intersect(Target, Range('C1:C4')) Is Nothing Then

tu as 2 fois font.colorindex=3

Bon courage
 
C

C@thy

Guest
Merci Pascal,

c'est normal, il faut saisir 3 chiffres, et ce n'est que lorsque le 3ème est saisi que je vérifie le total, sinon je vais avoir une erreur à chaque saisie du premier et 2ème, ce qui est enquiquinant.
Il n'affiche pas ERREUR DE SAISIE en D1, j'ai essayé avec

With Worksheets('Feuil1').Range('D1')
.Value = 'ERREUR DE SAISIE'

a marche pô non pu!!!, pourtant il formate bien la cellule en gras, couleur, police et taille.
J'y comprends rien!!!

Merci à toi.



C@thy
BipBip.gif
 

Minick

XLDnaute Impliqué
Salut C@thy, Pascal,

Un autre truc à prendre en compte.

C'est l'evenementielle WorkSheet_Change

Comme tu modifies la cellule D1 tu retournes dans l'evenementielle
donc au 2eme passage tu efface ton message.
2 solution:
Tu inhibes les evenements comme cela:
Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Range('D1') = ''

If Not Intersect(Target, Range('C3')) Is Nothing Then
    If Range('C4') <> Range('C1') + Range('C2') + Range('C3') Then
       MsgBox ('ERREUR SUR TOTAL DES 3 CELLULES')
       With Worksheets('Feuil1').Range('D1')
         .Font.ColorIndex = 3
         .Font.Bold = True
         .Font.Name = 'Arial'
         .Font.Size = 14
         .Font.ColorIndex = 3
       End With
 Range('D1').Value = 'ERREUR DE SAISIE'
   End If
End If
Application.EnableEvents = True
End Sub

ou alors tu changes D1 comme cela:
Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range('C3')) Is Nothing Then
    If Range('C4') <> Range('C1') + Range('C2') + Range('C3') Then
       MsgBox ('ERREUR SUR TOTAL DES 3 CELLULES')
       With Worksheets('Feuil1').Range('D1')
         .Font.ColorIndex = 3
         .Font.Bold = True
         .Font.Name = 'Arial'
         .Font.Size = 14
         .Font.ColorIndex = 3
       End With
         Range('D1').Value = 'ERREUR DE SAISIE'
   Else
    Range('D1') = ''
   End If
End If
End Sub


Voila à toi de choisir

@+
 
C

C@thy

Guest
Ah ben voilà l'explication!
Tu as tout à fait raison, je retourne donc j'efface!!!

Merci beaucoup, tu me retires une fière chandelle du pied!!!Lol!!!

Tu sais comment je pourrais écrire avec <>SUM('C1:C3') au lieu de faire 3 +???

j'ai oublié de dire : C4 est protégé, on ne peut pas écrire dessus, c'est une valeur récupérée dans un autre tableau.

Merci pour tout.

C@thy
BipBip.gif
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour C@thy, Minick, le Forum

Juste et surtout pour faire un coucou à C@thy que je n'ai pas eu l'occasion de trop croiser depuis mes wouacances...

Et aussi pour confirmer à Minick

Et aussi Just For the Fun !

Code:
Sub BloodyAdditionThroughVBA()
Dim ThePlageTab As Variant
Dim TheSumTab As Double
Dim ThePlageFor As Range
Dim TheSumFor As Double
Dim i As Byte

ThePlageTab = Range('A1:A3').Value
Set ThePlageFor = Range('A1:A3')

For i = 1 To 3
    TheSumTab = TheSumTab + ThePlageTab(i, 1)
Next

TheSumFor = WorksheetFunction.Sum(ThePlageFor)

MsgBox TheSumFor & ' = ' & TheSumTab, , 'Bingo !!! lol'
End Sub

Bon Aprèm
@+Thierry
 
C

C@thy

Guest
Coucou!

Y'a qu'un fil macro événementielle, la validation c'est autre chose car c'est sans macro c'est pourquoi j'ai voulu séparer les 1 sujets bien qu'ils soient proches paeceque rendant le même service.

J'ai avancé sur ma procédure, grâce aux conseils avisés de mes bienfaiteurs ici présents,
j'ai pris en compte la saisie de 4 cellules cette-fois-ci, mais je dois avoir le même problème:
je retourne dedans donc j'efface, voici mon code car je n'arrive pas à joindre de fichiers.
Le problème c'est que quand je saisis un nombre correct, c'est à dire non décimal,
et qu'en plus cette saisie me donne bien l'égalité avec le montant en E21,
il me sort un msgbox d'erreur et affiche 'ERREUR DE SAISIE' quand même,
alors que j'ai mis un ELSE avec ce qu'il faut faire si c'est bon

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim maSomme As Integer
maSomme = Application.WorksheetFunction.Sum(Range('$E$17:$E$20'))
If Not Intersect(Target, Range('$E$17:$E$20')) Is Nothing Then
   If maSomme <> Range('$E$21') Then
       MsgBox ('ERREUR SUR TOTAL DES 4 CELLULES')
       With Worksheets('Feuil1').Range('$J$17')
         .Font.Bold = True
         .Font.Size = 14
         .Font.ColorIndex = 3
       End With
         Range('$J$17').Value = 'ERREUR DE SAISIE'
   Else
      Range('$J$17') = ''
        With Worksheets('Feuil1').Range('$J$17')
           .Font.Bold = False
           .Font.Size = 10
           .Font.ColorIndex = 0
       End With
   End If
End If
End Sub

MERCI BEAUCOUP pour votre aide, j'en ai vraiment besoin.

Pendant que j'y suis j'ai un souci à propos du forum, je n'arrive pas à être avertie par mail si j'ai des réponses à ce fil, je dois aller voir systématiquement. On fait comment pour être averti? Et pis j'arrive pas à joindre un fichier zippé de 11k alors que je clique sur parcourir, et j'indique bien le chemin dans la zone Selection du fichier à attacher... j'ai des misères!!!

Merci à vous tous.

C@thy
BipBip.gif
 

ChTi160

XLDnaute Barbatruc
Salut 'C@thy'
bonjour le 'FORUM'
C@thy pour moi lorsque la saisie est bonne je n'ai pas de message ou alors je n'ai pas compri le problème
je modifie les valeurs en E17 E20 et celon j'ai bien l'affichage ou l'éffacement du message en J17 et ou non le MSGBOX
bonne journée
 

Discussions similaires

Réponses
8
Affichages
426
  • Question
Microsoft 365 Macro VBA
Réponses
2
Affichages
430

Statistiques des forums

Discussions
312 510
Messages
2 089 149
Membres
104 051
dernier inscrit
jjouneau