VBA en panne - Passer des valeurs de cellules à d'autres
Bonjour,
Je viens à vous car je vois que mon VBA est en panne et j'ai réellement besoin de le corriger afin que tout revienne à la normale.
Je travaille sur un fichier budget. Lorsque je veux passer des valeurs des colonnes :
C - E - G - I vers Q - S - U - Y et
C - E - G - I vers BC - BE - BG - BK tout fonctionne très bien.
Par contre, si à l'inverse, je veux passer des valeurs à partir des colonnes :
BC - BE - BG - BI vers C - E - G - K et
BC - BE - BG - BI vers Q - S - U - Y
alors là, il y a un problème. Ça ne fonctionne plus.
Je poste le VBA pour que vous puissiez voir :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chqLR As Long, visLR As Long, pesLR As Long, savLR As Long
If Target.Row < 9 Or Target.Row > 105 Then Exit Sub
chqLR = Range("C" & 105).End(xlUp).Row
visLR = Range("Q" & 105).End(xlUp).Row
pesLR = Range("AG" & 105).End(xlUp).Row
savLR = Range("BC" & 105).End(xlUp).Row
If Target.Column = 5 Or Target.Column = 7 Or Target.Column = 9 Then
If Range("I" & Target.Row) = "" Then Exit Sub
If UCase(Range("E" & Target.Row)) = UCase("Visa - Paiement") Then
Range("Q" & visLR + 1) = Range("C" & Target.Row)
Range("S" & visLR + 1) = Range("E" & Target.Row)
Range("U" & visLR + 1) = Range("G" & Target.Row)
Range("Y" & visLR + 1) = Range("I" & Target.Row)
ElseIf UCase(Range("E" & Target.Row)) = UCase("Rembour. WU") Then
Range("Q" & visLR + 1) = Range("C" & Target.Row)
Range("S" & visLR + 1) = Range("E" & Target.Row)
Range("U" & visLR + 1) = Range("G" & Target.Row)
Range("Y" & visLR + 1) = Range("I" & Target.Row)
ElseIf UCase(Range("E" & Target.Row)) = UCase("Vir. Forfait => Épargne") Then
Range("BC" & savLR + 1) = Range("C" & Target.Row)
Range("BE" & savLR + 1) = Range("E" & Target.Row)
Range("BG" & savLR + 1) = Range("G" & Target.Row)
Range("BK" & savLR + 1) = Range("I" & Target.Row)
End If
ElseIf Target.Column = 19 Or Target.Column = 21 Or Target.Column = 23 Then
If Range("W" & Target.Row) = "" Then Exit Sub
If UCase(Range("S" & Target.Row)) = UCase("Virement pesos") Then
Range("AG" & pesLR + 1) = Range("Q" & Target.Row)
Range("AI" & pesLR + 1) = Range("S" & Target.Row)
Range("AK" & pesLR + 1) = Range("U" & Target.Row)
Range("BS" & pesLR + 1) = Range("W" & Target.Row)
End If
ElseIf Target.Column = 57 Or Target.Column = 59 Or Target.Column = 61 Then
If Range("BI" & Target.Row) = "" Then Exit Sub
If UCase(Range("BE" & Target.Row)) = UCase("Vir. Épargne => Forfait") Then
Range("C" & chqLR + 1) = Range("BC" & Target.Row)
Range("E" & chqLR + 1) = Range("BE" & Target.Row)
Range("G" & chqLR + 1) = Range("BG" & Target.Row)
Range("K" & chqLR + 1) = Range("BI" & Target.Row)
End If
If UCase(Range("BE" & Target.Row)) = UCase("Vir. Épargne => Visa") Then
Range("Q" & visLR + 1) = Range("BC" & Target.Row)
Range("S" & visLR + 1) = Range("BE" & Target.Row)
Range("U" & visLR + 1) = Range("BG" & Target.Row)
Range("Y" & visLR + 1) = Range("BI" & Target.Row)
End If
End If
End Sub
et voici le fichier sur lequel je travaille.
Merci à l'avance pour votre aide,
Camaalot
Bonjour,
Dans une ligne comme celle-ci:
Range("BC" & savLR + 1) = Range("C" & Target.Row)
il faut l"crire comme cela:
Range("BC" & savLR + 1).Value = Range("C" & Target.Row).Value
*******************************************************************************************************
il faut aussi empêcher que la macro se relance à suite à chaque écriture dans une des cellule de destination, avec:
Application.EnableEvents = False
qu'il ne faut pas oublier de remettre à True à la fin:
Application.EnableEvents = True
*******************************************************************************************************
Votre code corrigé:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chqLR As Long, visLR As Long, pesLR As Long, savLR As Long
On Error GoTo Sortie
Application.ScreenUpdating = False
Application.EnableEvents = False
If Target.Row < 9 Or Target.Row > 105 Then Exit Sub
chqLR = Range("C" & 105).End(xlUp).Row
visLR = Range("Q" & 105).End(xlUp).Row
pesLR = Range("AG" & 105).End(xlUp).Row
savLR = Range("BC" & 105).End(xlUp).Row
If Target.Column = 5 Or Target.Column = 7 Or Target.Column = 9 Then
If Range("I" & Target.Row).Value = "" Then Exit Sub
If UCase(Range("E" & Target.Row) = UCase("Visa - Paiement")) Then
Range("Q" & visLR + 1).Value = Range("C" & Target.Row).Value
Range("S" & visLR + 1).Value = Range("E" & Target.Row).Value
Range("U" & visLR + 1).Value = Range("G" & Target.Row).Value
Range("Y" & visLR + 1).Value = Range("I" & Target.Row).Value
ElseIf UCase(Range("E" & Target.Row)) = UCase("Rembour. WU") Then
Range("Q" & visLR + 1).Value = Range("C" & Target.Row).Value
Range("S" & visLR + 1).Value = Range("E" & Target.Row).Value
Range("U" & visLR + 1).Value = Range("G" & Target.Row).Value
Range("Y" & visLR + 1).Value = Range("I" & Target.Row).Value
ElseIf UCase(Range("E" & Target.Row)) = UCase("Vir. Forfait => Épargne") Then
Range("BC" & savLR + 1).Value = Range("C" & Target.Row).Value
Range("BE" & savLR + 1).Value = Range("E" & Target.Row).Value
Range("BG" & savLR + 1).Value = Range("G" & Target.Row).Value
Range("BK" & savLR + 1).Value = Range("I" & Target.Row).Value
End If
ElseIf Target.Column = 19 Or Target.Column = 21 Or Target.Column = 23 Then
If Range("W" & Target.Row).Value = "" Then Exit Sub
If UCase(Range("S" & Target.Row)) = UCase("Virement pesos") Then
Range("AG" & pesLR + 1).Value = Range("Q" & Target.Row).Value
Range("AI" & pesLR + 1).Value = Range("S" & Target.Row).Value
Range("AK" & pesLR + 1).Value = Range("U" & Target.Row).Value
Range("BS" & pesLR + 1).Value = Range("W" & Target.Row).Value
End If
ElseIf Target.Column = 57 Or Target.Column = 59 Or Target.Column = 61 Then
If Range("BI" & Target.Row).Value = "" Then Exit Sub
If UCase(Range("BE" & Target.Row)) = UCase("Vir. Épargne => Forfait") Then
Range("C" & chqLR + 1).Value = Range("BC" & Target.Row).Value
Range("E" & chqLR + 1).Value = Range("BE" & Target.Row).Value
Range("G" & chqLR + 1).Value = Range("BG" & Target.Row).Value
Range("K" & chqLR + 1).Value = Range("BI" & Target.Row).Value
End If
If UCase(Range("BE" & Target.Row)) = UCase("Vir. Épargne => Visa") Then
Range("Q" & visLR + 1).Value = Range("BC" & Target.Row).Value
Range("S" & visLR + 1).Value = Range("BE" & Target.Row).Value
Range("U" & visLR + 1).Value = Range("BG" & Target.Row).Value
Range("Y" & visLR + 1).Value = Range("BI" & Target.Row).Value
End If
End If
Sortie:
Application.EnableEvents = True
End Sub
Cdlt
Bonjour Arturo83,
Je vous remercie beaucoup. Vous m'avez beaucoup aidé.
Excellent!
Camaalot