Macro qui se relance à chaque action
aanallein
Messages postés
2
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
C'est mon premier message sur ce forum et j'espère que vous pourrez répondre à mon petit problème.
Je suis en train de monter un fichier pour mon boulot, et j'ai essayer de créer une petite macro pour faire apparaitre ou disparaitre des lignes et des Checks Box.
L'activation de cette macro se fait en choisissant une valeur dans une liste sur une première cellule, et le reste des cellules doit se remplir ensuite, sans que cette macro affecte ces nouvelles cellules.
Mais le soucis que je rencontre réside dans le fait que cette macro s'active et se lance peu importe ce que je fais. Lorsque je rentre une valeur dans une cellule, ou lorsque je choisis une valeur d'une liste pré défini par exemple.
Je vous met la macro:
"Private Sub Worksheet_Change(ByVal Target As Range)
'Shéma classique
If Range("C2") = "Classique" Then
Rows("29:35").EntireRow.Hidden = True
End If
'afficher les lignes du schéma saisonnier
If Range("C2") = "Saisonnier" Then
Rows("33:35").EntireRow.Hidden = False
Rows("36").EntireRow.Hidden = True
Rows("46").EntireRow.Hidden = False
Else
Rows("33:35").EntireRow.Hidden = True
Rows("36").EntireRow.Hidden = False
Rows("46").EntireRow.Hidden = True
End If
If Range("C2") = "Saisonnier" Then
ActiveSheet.CheckBoxes.Add(605, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$23"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(663.75, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$24"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(717, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$25"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(799, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$26"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(862.5, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$27"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(943, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$28"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(605, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$29"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(663.75, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$30"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(717, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$31"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(799, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$32"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(862.5, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$33"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(943, 466.75, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$34"
.Display3DShading = False
End With
End If
' afficher les lignes du schéma comprenant des premiers loyers majorés
If Range("C2") = "Loyers majorés / minorés" Then
Rows("29:31").EntireRow.Hidden = False
Rows("45").EntireRow.Hidden = False
Else
Rows("29:31").EntireRow.Hidden = True
Rows("45").EntireRow.Hidden = True
End If
End Sub"
Pourriez-vous m'éclairer svp?
C'est mon premier message sur ce forum et j'espère que vous pourrez répondre à mon petit problème.
Je suis en train de monter un fichier pour mon boulot, et j'ai essayer de créer une petite macro pour faire apparaitre ou disparaitre des lignes et des Checks Box.
L'activation de cette macro se fait en choisissant une valeur dans une liste sur une première cellule, et le reste des cellules doit se remplir ensuite, sans que cette macro affecte ces nouvelles cellules.
Mais le soucis que je rencontre réside dans le fait que cette macro s'active et se lance peu importe ce que je fais. Lorsque je rentre une valeur dans une cellule, ou lorsque je choisis une valeur d'une liste pré défini par exemple.
Je vous met la macro:
"Private Sub Worksheet_Change(ByVal Target As Range)
'Shéma classique
If Range("C2") = "Classique" Then
Rows("29:35").EntireRow.Hidden = True
End If
'afficher les lignes du schéma saisonnier
If Range("C2") = "Saisonnier" Then
Rows("33:35").EntireRow.Hidden = False
Rows("36").EntireRow.Hidden = True
Rows("46").EntireRow.Hidden = False
Else
Rows("33:35").EntireRow.Hidden = True
Rows("36").EntireRow.Hidden = False
Rows("46").EntireRow.Hidden = True
End If
If Range("C2") = "Saisonnier" Then
ActiveSheet.CheckBoxes.Add(605, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$23"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(663.75, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$24"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(717, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$25"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(799, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$26"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(862.5, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$27"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(943, 451, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$28"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(605, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$29"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(663.75, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$30"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(717, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$31"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(799, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$32"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(862.5, 467.5, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$33"
.Display3DShading = False
End With
ActiveSheet.CheckBoxes.Add(943, 466.75, 24, 17.25).Select
Selection.Characters.Text = ""
With Selection
.Value = xlOff
.LinkedCell = "$N$34"
.Display3DShading = False
End With
End If
' afficher les lignes du schéma comprenant des premiers loyers majorés
If Range("C2") = "Loyers majorés / minorés" Then
Rows("29:31").EntireRow.Hidden = False
Rows("45").EntireRow.Hidden = False
Else
Rows("29:31").EntireRow.Hidden = True
Rows("45").EntireRow.Hidden = True
End If
End Sub"
Pourriez-vous m'éclairer svp?
A voir également:
- Macro qui se relance à chaque action
- Télécharger film d'action gratuitement et rapidement - Télécharger - TV & Vidéo
- Concurrent action - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Vous devez disposer d'une autorisation pour effectuer cette action - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
2 réponses
Bonjour,
Worksheet_Change(ByVal Target As Range) se lance à chaque saisie sur la feuille.
Tout au début il faut que tu testes la cellule ayant appelé l'évènement (Target, passée en paramètre)
Private Sub Worksheet_Change(ByVal Target As Range)
'
if not intersect(Target,[B3:B5]) is nothing then
' si l'intersection de Target et B3:B5 n'est pas vide alors
....
endif
La macro ne sera exécutée que si modif en B3:B5
Et si tu ne traites qu'une seule cellule ajoutze tout au début :
if target.count >1 then exit sub
Sinon ça plantera si par exemple qcq'un efface une plage.
eric
Worksheet_Change(ByVal Target As Range) se lance à chaque saisie sur la feuille.
Tout au début il faut que tu testes la cellule ayant appelé l'évènement (Target, passée en paramètre)
Private Sub Worksheet_Change(ByVal Target As Range)
'
if not intersect(Target,[B3:B5]) is nothing then
' si l'intersection de Target et B3:B5 n'est pas vide alors
....
endif
La macro ne sera exécutée que si modif en B3:B5
Et si tu ne traites qu'une seule cellule ajoutze tout au début :
if target.count >1 then exit sub
Sinon ça plantera si par exemple qcq'un efface une plage.
eric
Bonjour Eric,
Merci infiniment de ta réponse.
Bon je t'avouerais que je n'ai pas tout compris.
Mais avec le début de ta réponse et le "If not intersect(Target...)" ma macro ne s'active seulement lorsque je change la valeur de la première cellule.
Par contre pour le "If target.count>1 then exit sub" je ne comprends pas comment l'utiliser.
Mon fichier est un formulaire à remplir. La première cellule conditionne le reste du formulaire à remplir.
Est-ce donc vraiment nécessaire de rajouter cette condition?
Merci infiniment de ta réponse.
Bon je t'avouerais que je n'ai pas tout compris.
Mais avec le début de ta réponse et le "If not intersect(Target...)" ma macro ne s'active seulement lorsque je change la valeur de la première cellule.
Par contre pour le "If target.count>1 then exit sub" je ne comprends pas comment l'utiliser.
Mon fichier est un formulaire à remplir. La première cellule conditionne le reste du formulaire à remplir.
Est-ce donc vraiment nécessaire de rajouter cette condition?