Exécution automatique d'une macro
Bonjour,
Je suis sur Excel 2016.
Est-il possible d’exécuter une macro dès que l'on modifie la valeur d'une cellule ?
Plus précisément, j'ai une macro qui me permet de faire une mise en forme conditionnelle mais j'aimerai que cette macro s’exécute automatiquement, par exemple dès que l'on modifie une valeur d'une cellule.
Voici ma macro :
Sub EGT() 'Macro de mise en forme conditionnelle de l'EGt en fonction des limites operationnelles
Dim j As Integer 'déclaration de la variable correspondant à la colonne
For j = 6 To 100 'initialisation de la boucle
If Cells(17, j) >= -1 And Cells(17, j) <= 27 And Cells(8, j) <> 0 And Cells(8, j) < 418 Or Cells(8, j) > 649 Then 'si l'OAT est entre -1°C et 27°C et que l'EGT est inférieur à 418°C ou supérieur à 649°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
ElseIf Cells(17, j) < -1 And Cells(8, j) <> 0 And Cells(8, j) < 365 Or Cells(8, j) > 632 Then 'si l'OAT est inférieur à -1°C et que l'EGT est inférieur à 365°C ou supérieur à 632°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
ElseIf Cells(17, j) > 27 And Cells(8, j) <> 0 And Cells(8, j) < 520 Or Cells(8, j) > 655 Then 'si l'OAT est supérieur à 27°C et que l'EGT est inférieur à 520°C ou supérieur à 655°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
End If
Next
End Sub
Merci d'avance.
Bonne journée.
Bonjour,
oui c'est possible, il faut mettre le code dans le module de la feuille voulue.
Private Sub Worksheet_Change(ByVal Target As Range)
'ton code
End Subtu peux aussi rajouter pour que la macro ne se lance qu'a la modification de la cellule ou plage à la place du "B2" comme suit :
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
'ton code
End ifA plus
Merci pour cette réponse.
J'ai fais la modification mais j'ai une erreur car "end sub" ne peut pas être suivi de "end sub".
Voici le code modifié :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("8:8")) Is Nothing Then
Sub EGT() 'Macro de mise en forme conditionnelle de l'EGt en fonction des limites operationnelles
Dim j As Integer 'déclaration de la variable correspondant à la colonne
For j = 6 To 100 'initialisation de la boucle
If Cells(17, j) >= -1 And Cells(17, j) <= 27 And Cells(8, j) <> 0 And Cells(8, j) < 418 Or Cells(8, j) > 649 Then 'si l'OAT est entre -1°C et 27°C et que l'EGT est inférieur à 418°C ou supérieur à 649°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
ElseIf Cells(17, j) < -1 And Cells(8, j) <> 0 And Cells(8, j) < 365 Or Cells(8, j) > 632 Then 'si l'OAT est inférieur à -1°C et que l'EGT est inférieur à 365°C ou supérieur à 632°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
ElseIf Cells(17, j) > 27 And Cells(8, j) <> 0 And Cells(8, j) < 520 Or Cells(8, j) > 655 Then 'si l'OAT est supérieur à 27°C et que l'EGT est inférieur à 520°C ou supérieur à 655°C
Cells(8, j).Interior.ColorIndex = 3 'alors colorier le fond de la cellule en rouge
Cells(8, j).Font.ColorIndex = 1 'et changer la couleur de la police en rouge
End If
Next
End Sub
End If
End Sub
Il faut que tu enlèves la ligne Sub EGT() et la ligne End sub situé entre Next et End if pour que cela fonctionne !
Merci mais la macro ne se lance pas.
Très dur de se lancer dans vba lorsque l'on ne connait même pas le commande Range() ... Peut etre qu'un petit tour du côté des cours VBA de ce site ne feront pas de mal.
Qu'est ce que tu entends par :
Range("8:8")?
si c'est la ligne 8 alors mets Rows(8), si c'est la colonne 8 alors préfère Columns(8) ou bien Range("H:H") !
A plus
J'ai eu des cours de VBA lorsque je faisais mes études. Mais j'avoue que j'ai oublié pas mal de choses...
C'est en regardant le cours sur les sélections de ligne que j'ai trouvé cette commande. Je pensais qu'il fallait forcement mettre un intervalle.
Merci pour l'info !