Vous avez un petit problème et vous avez besoin de votre aide pour mettre à jour mon code VBA.VBA Comment utiliser les événements sur le changement de feuille de calcul interconnectés entre deux colonnes
J'ai deux colonnes, la première colonne affichant% de la 2e et la 2e colonne étant un nombre. Les cellules doivent être recalculées en fonction des entrées de l'utilisateur, c'est pourquoi j'ai utilisé un événement sur la feuille de calcul (code ci-dessous). Ce que j'ai réussi à faire est d'avoir la 2ème colonne modifiée chaque fois que vous changez le% dans le 1er.
Maintenant je voudrais savoir comment je pourrais (si possible donné le cas), le modifier de sorte que si l'utilisateur change le% dans la 1ère colonne il recalcule le 2ème (que j'ai) OU si l'utilisateur change la 2ème colonne il recalculerait le% dans le 1er, tout le temps sans se redéclencher encore et encore.
C'est ce que j'ai. Toute aide appréciée.
Colonne 1 étant "P" et la colonne 2 étant "Q"
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationAutomatic
Dim WsCY As Worksheet, WsM As Worksheet
Dim CVal As String
Dim Found As Range
'Sheets I'm working with
Set WsCY = ThisWorkbook.Worksheets("Current Year Data")
Set WsM = ThisWorkbook.Worksheets("Main")
'Value used to search for the base value on which the % from 1st column is applied
CVal = WsM.Range("C10")
Set Found = WsCY.Columns("B").Find(what:=CVal, LookIn:=xlValues, lookat:=xlWhole)
If Target.Address = WsM.Range("P13").Address Then
WsM.Range("Q13").Value = WsM.Range("P13").Value * WsCY.Range("AB" & Found.Row) + WsCY.Range("G" & Found.Row)
ElseIf Target.Address = WsM.Range("P15").Address Then
WsM.Range("Q15").Value = WsM.Range("P15").Value * WsCY.Range("AC" & Found.Row) + WsCY.Range("H" & Found.Row)
ElseIf Target.Address = WsM.Range("P17").Address Then
WsM.Range("Q17").Value = WsM.Range("P17").Value * WsCY.Range("AD" & Found.Row) + WsCY.Range("I" & Found.Row)
ElseIf Target.Address = WsM.Range("P21").Address Then
WsM.Range("Q21").Value = WsM.Range("P21").Value * WsCY.Range("AE" & Found.Row) + WsCY.Range("J" & Found.Row)
ElseIf Target.Address = WsM.Range("P23").Address Then
WsM.Range("Q23").Value = WsM.Range("P23").Value * WsCY.Range("AF" & Found.Row) + WsCY.Range("K" & Found.Row)
ElseIf Target.Address = WsM.Range("P25").Address Then
WsM.Range("Q25").Value = WsM.Range("P25").Value * WsCY.Range("AG" & Found.Row) + WsCY.Range("L" & Found.Row)
Else
End If
End Sub
2ème exemple de ce que je avais besoin:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = False
If Target.Address = WsM.Range("P1").Address Then
WsM.Range("Q1").Value = WsM.Range("P1").Value * 100
ElseIf Target.Address = WsM.Range("Q1").Address Then
WsM.Range("P1").Value = WsM.Range("Q1").Value/100 - 1
Else
End If
Application.EnableEvents = True
End Sub
Vous ne savez pas exactement ce que vous vouliez dire par là. J'ai inventé un deuxième exemple et l'ai essayé mais je ne fais rien. Comment est-ce que j'utiliserais le Application.EnableEvents pour l'arrêter fondamentalement une fois qu'un changement est fait? –