Evènement suite au changement de valeur dans une cellule
Bonjour,
Je tente de m'entraîner aux évènements et j'avoue que je galère pas mal.
C'est fou le temps qu'on peut passer sur un "problème" que certains résoudraient en 10 mn.
J'ai juste envie de mettre mon clavier par terre et de sauter dessus à 2 pieds joints !
J'ai créé un fichier dans lequel il y a une table de multiplication et je n'ai pas mis les résultats.
Le but est que l'utilisateur saisisse le résultat directement dans une cellule:
L'idée est qu'à l'issue de la saisie, la macro teste si le résultat est correct (surlignage en vert) ou faux (surlignage en rouge).
Ça va faire 3 heures que je tente plusieurs types d'évènements et que j'écume la toile pour trouver comment faire.
- Lorsque j'utilise Worksheet_Calculate(), je clique dans la cellule pour me positionner sur le résultat à saisir mais l'évènement se déclenche avant même que j'ai eu le temps de saisir le résultat.
- Lorsque j'utilise Worksheet_Change(ByVal Target As Range ), je clique dans la cellule, je saisis le résultat mais si je quitte la cellule en utilisant la touche "ENTER" ou une des 4 flèches du pavé numérique, l'évènement se déclenche seulement sur la cellule qui suit l'action du "ENTER" ou de la flèche appuyée et non celle où le résultat a été saisi.
C'est à devenir fou !
Soit ça se déclenche avant et je n'ai pas le temps de saisir le résultat, soit ça se déclenche après sur une cellule différente de celle où j'ai saisi le résultat !
Bien sûr le but c'est ne pas de faire des double-clics dans la cellule pour saisir le résultat, sinon c'est trop pénible: comme c'est un peu un jue, il faut que ce soit facile de saisir le résultat:
Je me positionne dans la cellule voulue (celle que je veux) et je saisis et je quitte avec "ENTER" ou les flèches.
J'ai essayé aussi "Worksheet_SelectionChange" mais sans succès.
Bref, je suis une bille et je me demande comment c'est possible de batailler autant pour si peu...
Merci d'avance pour votre aide et désolé de vous imposer mon humeur quelque peu maussade.
Bonne journée.
Bonjour
Mettre ce code dans un module et cliquer sur le bouton GO CONTROLE.
Cliquer sur EFFACER pour recommencer une série.
Cdt
Papy Henri
Sub Controle()
Dim col%, i%
With Sheets("Feuil1")
For col = 5 To 48 Step 6
For i = 2 To 11
If .Cells(i, col) = .Cells(i, col - 4) * .Cells(i, col - 2) Then
.Cells(i, col).Interior.Color = vbGreen
Else
.Cells(i, col).Interior.Color = vbRed
End If
Next i
Next col
End With
End Sub
Sub Efface()
Dim col%, i%
With Sheets("Feuil1")
For col = 5 To 48 Step 6
For i = 2 To 11
.Cells(i, col).ClearContents
.Cells(i, col).Interior.Color = xlNone
Next i
Next col
End With
End
Bonjour,
Autre possibilité :
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Interior.Color = IIf(Target = Target.Offset(, -4) * Target.Offset(, -2), vbGreen, vbRed)
End SubMébon... Pas besoin de macro : Une simple mise en forme conditionnelle suffit !
A+
Merci pour vos contributions.
Je me doutais bien qu'il y avait moyen de faire plus simple mais en fait je n'ai pas appris à me servir d'EXCEL en utilisant toute la panoplie de fonctionnalités natives embarquées.
J'ai appris (j'apprends) le VBA en autodidacte et du coup, tout ce qui nécessite une automatisation ou des choses qui peuvent être faite avec les fonctions, je le code en VBA parce que c'est ce que je sais "mieux" faire.
Je me doute bien qu'il me faudrait des formations et me rompre au VBA pour "pisser de la ligne" mais comme beaucoup, c'est le boulot qui a fait naître ce besoin avec une utilité ponctuelle qui impose ce manque de régularité et donc une vraie capitalisation des méthodes, fonctions VBA etc..
Je ne sais toujours pas pourquoi il y a worksheets et worksheet et le fait de me tromper me prouve que j'ai toujours du mal à la notion de langage objet même si je l'ai lu 20 fois.
Rien que là, je viens d'apprendre la fonction "IIf"...
Pourtant, j'en ai fait pas mal des macros mais peut-être trop basiques ou utilisant des fonctions, méthodes toujours similaires, m'empêchant par là-même de vraiment évoluer.
Au moindre écueil, je passe 3 h00 sur internet et sur le code à faire des essais.
Je comprends bien la notion de classes, d'instances mais dès qu'il faut appliquer...
En tout cas, l'exercice ici était bien d'utiliser les évènements.
Merci encore.