Bug liste déroulante déclenchement macro
Bonjour à tous,
J'ai débuté le VBA il y a peu et je poste mon premier sujet puisque je rencontre un soucis avec une macro déclenchée par une liste déroulante. Je m'explique :
J'ai fait un premier essai avec le fichier "test liste VBA", qui déclenche des macros on ne peut plus simples à partir d'une liste déroulante en A2 (a,b,c,d,e ou f) et qui affiche le numéro de la lettre choisie (1,2,3,4,5 ou 6) en A5. Ça fonctionne bien, avec un code dans l'objet de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(2, 1) = "a" Then Call macroA
If Cells(2, 1) = "b" Then Call macroB
If Cells(2, 1) = "c" Then Call macroC
If Cells(2, 1) = "d" Then Call macroD
If Cells(2, 1) = "e" Then Call macroE
If Cells(2, 1) = "f" Then Call macroF
End SubQui appelle les macros désignées :
Sub macroA()
Range("a5") = 1
End Sub
Sub macroB()
Range("a5") = 2
End Sub
Sub macroC()
Range("a5") = 3
End Sub
Sub macroD()
Range("a5") = 4
End Sub
Sub macroE()
Range("a5") = 5
End Sub
Sub macroF()
Range("a5") = 6
End SubMon but étant que dans la fiche de paie du fichier "Matrice paie VBA", la liste déroulante liée à la position du salarié (non cadre, cadre ou dirigeant) n'affiche que les cotisations voulues et neutralise les autres.
J'ai fait une première macro pour le non cadre :
Sub non_cadre()
'tout afficher
Cells.Select
Selection.EntireRow.Hidden = False
'insérer bases utiles
Range("F42").Select
ActiveCell.FormulaR1C1 = "=M_TA+M_TB"
Range("F43").Select
ActiveCell.FormulaR1C1 = "=M_TA+M_TB"
Range("F46").Select
ActiveCell.FormulaR1C1 = "=M_TA"
Range("F47").Select
ActiveCell.FormulaR1C1 = "=M_T2"
Range("F48").Select
ActiveCell.FormulaR1C1 = "=M_TA"
Range("F49").Select
ActiveCell.FormulaR1C1 = "=M_T2"
'effacer bases inutiles
Range("f50:f60,f62").Select
Selection.ClearContents
'masquer lignes inutiles
Rows("50:60").Select
Selection.EntireRow.Hidden = True
Rows("38:38").Select
Selection.EntireRow.Hidden = True
Rows("44").Select
Selection.EntireRow.Hidden = True
Rows("62").Select
Selection.EntireRow.Hidden = True
End Subqui fonctionne très bien avec le bouton "non cadre" en haut à droite.
L'étape suivante est de lier cette macro à la liste déroulante à côté de la position, j'ai donc inséré un code dans l'objet de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(5, 9) = "Non cadre" Then Call non_cadre
If Cells(5, 9) = "Cadre" Then Call cadre
If Cells(5, 9) = "Dirigeant" Then Call dirigeant
End SubSauf que quand je sélectionne la position "non cadre", excel bug dans une espèce de boucle infinie où je ne voit que 3 des bases qui se répètent sans cesse... J'espère que j'ai été assez clair, une (ou plusieurs) âme(s) charitable(s) aurai(en)t-elle la bonté de me venir en aide svp ?
Bonjour,
correction. tu dois désactiver la gestion des événements. en effet chaque fois que tu changes une cellule de la feuille ta procédure est déclenchée (tu changes le contenu d'une cellule en mettant tes formules).
ajoute une instruction application.enableevents = false puis true en début et fin de procédure
Sub non_cadre()
Application.EnableEvents = False
'tout afficher
Cells.Select
Selection.EntireRow.Hidden = False
'insérer bases
Range("F42").Select
ActiveCell.FormulaR1C1 = "=M_TA+M_TB"
Range("F43").Select
ActiveCell.FormulaR1C1 = "=M_TA+M_TB"
Range("F46").Select
ActiveCell.FormulaR1C1 = "=M_TA"
Range("F47").Select
ActiveCell.FormulaR1C1 = "=M_T2"
Range("F48").Select
ActiveCell.FormulaR1C1 = "=M_TA"
Range("F49").Select
ActiveCell.FormulaR1C1 = "=M_T2"
'effacer bases inutiles
Range("f50:f60,f62").Select
Selection.ClearContents
'masquer lignes inutiles
Rows("50:60").Select
Selection.EntireRow.Hidden = True
Rows("38:38").Select
Selection.EntireRow.Hidden = True
Rows("44").Select
Selection.EntireRow.Hidden = True
Rows("62").Select
Selection.EntireRow.Hidden = True
Application.EnableEvents = True
End SubBonjour, merci h2so4 pour cette réponse très rapide !
Je teste lundi et si ça marche, je penserai bien à cliquer sur la coche verte !
Bon week-end et à bientôt.
Bonjour,
Je viens d'essayer ce matin et ta solution fonctionne très bien h2so4, je te remercie, ça me prenait vraiment la tête !
A bientôt sur le forum.
MAGENSTRIA