1 pièce(s) jointe(s)
Intersect et priorisation.
Bonjour, je commence depuis peu à m'entraîner dans mon coin pour apprendre les rudiments du VBA.
Je bosse en ce moment sur un projet modeste, ce calculateur sur excel: http://www.salairebrutnet.fr/
Ce qui m'intéresse, c'est de travailler le côté réactivité de chaque cellule, par exemple, si je change le salaire net horaire, toutes les autres cellules se mettent à jour, et il va de même pour chaque cellule.
J'ai fait un "trigger" si un changement opère sur brutannuel, le mois, les charges et le nombre d'heure, jusque là pas de soucis.
Je viens donc d'attaquer une seconde cellule "Netannuel", sauf qu’évidemment mon fichier crash à chaque fois, je pense avoir saisi le problème:
- En changeant le Netannuel, le brutannuel se déclenche, déclenchant ainsi les deux cellules en boucles. J'aimerai donc apprendre à éviter que les cellules ne se mettent à jour si le déclenchement provient d'une autre condition, et je peine à trouver comment écrire tout ça.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| Private Sub Worksheet_Change(ByVal Target As Range)
'Action quand quelque chose change dans la feuille
Dim Brutannuel As Variant
Dim BrutMensuel As Variant
Dim BrutHoraire As Variant
Dim Netannuel As Variant
Dim NetMensuel As Variant
Dim NetHoraire As Variant
Dim nbheure As Variant
Dim Mois As Variant
Dim Charges As Variant
'Déclaration des variables
'Code pour éviter les Run Time errors en cas de fautes de frappes
On Error Resume Next
If Range("Brutannuel,BrutMensuel,BrutHoraire,NetAnnuel,NetMensuel,Nethoraire,nbheure,Mois,Charges") Is Nothing Then Exit Sub
On Error GoTo 0
'Détection de changement pour les cellules désignées
If Not Intersect(Target, Range("Brutannuel,nbheure,Mois,charges")) Is Nothing Then
'Si mouvement
Range("BrutMensuel").Value = Range("Brutannuel").Value / Range("Mois").Value
Range("BrutHoraire").Value = Range("Brutannuel").Value / (4.33 * Range("nbheure").Value * Range("Mois").Value)
Range("Netannuel").Value = Range("Brutannuel").Value * ((100 - Range("charges").Value) / 100)
Range("NetMensuel").Value = (Range("Brutannuel").Value * ((100 - Range("charges").Value) / 100)) / Range("mois")
Range("NetHoraire").Value = (Range("Brutannuel").Value * ((100 - Range("charges").Value) / 100)) / (4.33 * Range("nbheure") * Range("mois"))
'Réaction au mouvement:
End If
If Not Intersect(Target, Range("Netannuel")) Is Nothing Then
Range("NetMensuel").Value = Range("Netannuel").Value / Range("Mois").Value
Range("NetHoraire").Value = Range("Netannuel").Value / (4.33 * Range("nbheure").Value * Range("mois").Value)
Range("Brutannuel").Value = Range("Netannuel").Value * ((100 + Range("charges").Value) / 100)
End If |
Et voici le fichier en question, merci à ceux qui prendrons le temps de me répondre: