executer une macro sur un click [vba excel] - VB/VBA/VBS - Programmation
Marsh Posté le 06-09-2006 à 18:03:56
Bonsoir,
tu peux mettre par exemple :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$5" and target = "NON" Then
Beep
End if
End Sub
Au niveau de feuill1
$A$5 est supposé être la cellule ou tu frappes NON
le beep correspond à l'endroit où tu peux faire quelque chose
Cordialement
Marsh Posté le 06-09-2006 à 18:08:31
Bonjour,
Dans, l'éditeur vbe, dans l'arborescence Microsoft Excel Objets, sélectionner la feuille ou doit être active la macro par un double clic.
Dans la zone réservée au code, sélectionner dans la liste déroulant de gauche Worksheet, puis dans la liste déroulante de droite Change, cela créera la première et dernière ligne du code s'exécutant lors d'un changement dans la feuille, il faut alors y insérer le code adapté.
ici affichage d'une boite de message vide:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Value = "NON" Then
MsgBox toto
End If
End Sub
Cordialement
Pifa
Marsh Posté le 07-09-2006 à 11:37:00
Bonjour,
Merci pour vos réponses.
J'ai fait ce que vous m'avez suggéré, en copiant le code de ma macro entre le if et le end if. Mais lorsque je veux tester, je change une valeur dans mon fichier et là, il me rebalance sur l'éditeur VB, en surlignant ma première ligne de code.
Quand j'essaie de débugger, il m'ouvre une fenêtre de liste des macros ?!!
Je ne comprends pas...
A tout hasard, je vous mets le code que j'obtiens, peut-être que ça vient d'une erreur dans le code et que le debugger n'est pas explicite :
Private Sub Worksheet_Change(ByVal Target As Range)
If Range(Target.Address) = 4 And Target = "NON" Then
Rows(Selection.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Else
Rows(Selection.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlNone
End With
End If
End Sub
Merci d'avance
Marsh Posté le 07-09-2006 à 12:22:55
Bonjour,
qu'est-ce qui est "visé" par :If Range(Target.Address) = 4 ?
si c'est la colonne 4, mettre if target.column = 4
pas d'erreur de compile, le "surlignant" c'est en jaune?
si oui y a-t-il un rond marron à gauche ?
si non, y a-t-il un message d'erreur qui s'affiche avant de revenir sur VB? lequel
Cordialement
Marsh Posté le 07-09-2006 à 12:29:09
Si j'ai bien compris ce que tu veux faire, il faut remplacer "Selection" par "Target"
If Range(Target.Address) = 4 And Target = "NON" Then
Rows(Target.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Else
Rows(Target.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlNone
End With
End If
Ensuite, effectivement, normalement Range(Target.Address) == Target lorsque tu modifies une cell. J'imagine qu'en fait, ce que tu voulais, c'étais tester si la cell contient "NON", et vérifier qu'elle se situe sur la 4eme colonne ?
Dans ce cas, ce serait If Target.Column = 4 And Target = "NON" Then
Sinon, pour le "surlignage", c'est que tu dois avoir un stop code sur la ligne (un petit disque marron à gauche de la ligne de code) dans ton éditeur VBA. Clique sur le petit disque pour supprimer le marqueur.
Marsh Posté le 07-09-2006 à 12:53:47
nb : Tel que, ton code va supprimer le grisage de la ligne à chaque fois que tu modifieras une valeur du tableau...
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 4) = "NON" Then
Rows(Target.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Else
Rows(Target.Row).Select
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
.PatternColorIndex = xlNone
End With
End If
End Sub
C'est bourrin, mais c'est efficace :-)
Marsh Posté le 07-09-2006 à 14:21:19
Merci !
Ca marche très bien. C'est parfait !
Merci à tous ceux qui m'ont répondu : j'ai appris plein de chose en VB aujourd'hui (je crois que j'ai quand même un peu de marge avant l'expertise !
Marsh Posté le 06-09-2006 à 17:20:56
Bonjour,
Super débutante en VB. J'ai développé une macro qui permet de griser les lignes de mon tableau excel si la valeur d'une cellule est égale à "NON".
Mais je suis obligée de lancer manuellement l'éxecution de la macro pour que ça le fasse, alors que je voudrais que la macro se déclenche dès que la cellule reçoit (en création ou en modification) la valeur "NON".
Je ne sais pas comment lier l'éxecution de la macro à un évènement, que ce soit ouverture du fichier ou modif de la cellule ou click...
Merci d'avance pour votre aide.