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

Rechercher des sujets similaires à "vba panne passer valeurs"