Macro qui se relance à chaque action

Fermé
aanallein Messages postés 2 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 26 mars 2013 - 25 mars 2013 à 17:47
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 26 mars 2013 à 11:56
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?

A voir également:

2 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
25 mars 2013 à 17:58
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
1
aanallein Messages postés 2 Date d'inscription lundi 25 mars 2013 Statut Membre Dernière intervention 26 mars 2013
26 mars 2013 à 10:10
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?
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
26 mars 2013 à 11:56
Par contre pour le "If target.count>1 then exit sub" je ne comprends pas comment l'utiliser.
Tu mets juste ça en 1ère ligne.

Est-ce donc vraiment nécessaire de rajouter cette condition?
Sélectionne une plage et fais Suppr, tu auras ta réponse.

eric
0