Worksheet_Change avec 2 conditions

Bonjour à toutes et à tous,

J'ai un soucis avec mon code VBA... et là je ne trouve pas la solution, qui doit-être toute simple mais étant novice c'est compliqué...

Je m'explique :

La deuxième partie de mon code ne s'exécute pas....alors que pour le site numéro 1 il n'y a pas de problème.

Merci pour votre aide à toutes et à tous.

Michael

Private av As Variant 'déclare la varaible av (Ancienne Valeur)
Private Test As Boolean 'déclare la varaible test

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet

'Site numéro 1

If Application.Intersect(Target, Range("c8:j8")) Is Nothing Then Exit Sub 'si le changement se fait ailleurs que dans la plage A1:A100 (à adapter), sort de la procédure
If Test = True Then Exit Sub 'si test est vrai, sort de la procédure

'permet de remplir le site numéro 1
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c12").Value = Worksheets("BDD").Range("o4") Else Range("c12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("D12").Value = Worksheets("BDD").Range("p4") Else Range("D12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("e12").Value = Worksheets("BDD").Range("q4") Else Range("e12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("f12").Value = Worksheets("BDD").Range("r4") Else Range("f12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("g12").Value = Worksheets("BDD").Range("s4") Else Range("g12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("h12").Value = Worksheets("BDD").Range("t4") Else Range("h12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("i12").Value = Worksheets("BDD").Range("u4") Else Range("i12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("j12").Value = Worksheets("BDD").Range("v4") Else Range("j12").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c9").Value = Worksheets("BDD").Range("n4") Else Range("c9").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c14").Value = Worksheets("BDD").Range("w4") Else Range("c14").ClearContents

'Site numéro 2

If Application.Intersect(Target, Range("c15:j15")) Is Nothing Then Exit Sub 'si le changement se fait ailleurs que dans la plage A1:A100 (à adapter), sort de la procédure
If Test = True Then Exit Sub 'si test est vrai, sort de la procédure

'permet de remplir le site numéro 2

If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c19").Value = Worksheets("BDD").Range("o5") Else Range("c19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("D19").Value = Worksheets("BDD").Range("p5") Else Range("D19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("e19").Value = Worksheets("BDD").Range("q5") Else Range("e19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("f19").Value = Worksheets("BDD").Range("r5") Else Range("f19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("g19").Value = Worksheets("BDD").Range("s5") Else Range("g19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("h19").Value = Worksheets("BDD").Range("t5") Else Range("h19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("i19").Value = Worksheets("BDD").Range("u5") Else Range("i19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("j19").Value = Worksheets("BDD").Range("v5") Else Range("j19").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c16").Value = Worksheets("BDD").Range("n5") Else Range("c16").ClearContents
If Target.Column = 3 Then If Not (IsEmpty(Target.Value)) Then Range("c21").Value = Worksheets("BDD").Range("w5") Else Range("c21").ClearContents

End Sub

Bonjour

Je ne comprends pas pourquoi vous allez chercher vos données dans le tableau de droite (colonne O à W) car on pouvait très bien prendre les valeurs depuis le tableau de base (Colonne A à K).

Sinon essayez votre code en le remplaçant par celui ci :

Dim Test As Boolean 'déclare la varaible test

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim i As Byte

If Test = True Then Exit Sub 'si test est vrai, sort de la procédure
'Site numéro 1

If Not Intersect(Target, Range("c8:j8")) Is Nothing Then

    Test = True
    For i = 3 To 10
        Cells(12, i).ClearContents
        Cells(12, i) = Worksheets("BDD").Cells(4, i + 12)
    Next i
    Range("c9:J9").ClearContents: Range("c9").Value = Worksheets("BDD").Range("n4")
    Range("c14").ClearContents: Range("c14") = Worksheets("BDD").Range("w4")
End If

'Site numéro 2

If Not Intersect(Target, Range("c15:j15")) Is Nothing Then

    Test = True
    For i = 3 To 10
        Cells(19, i).ClearContents
        Cells(19, i) = Worksheets("BDD").Cells(5, i + 12)
    Next i
    Range("c16:J16").ClearContents: Range("c16").Value = Worksheets("BDD").Range("n5")
    Range("c21").ClearContents: Range("c21") = Worksheets("BDD").Range("w5")
End If
Test = False
End Sub

La variable AV ne sert pas dans votre cas

Cordialement

Bonjour,

Votre code fonctionne parfaitement !!! merci beaucoup.

Pour répondre à votre question : Je ne comprends pas pourquoi vous allez chercher vos données dans le tableau de droite (colonne O à W) car on pouvait très bien prendre les valeurs depuis le tableau de base (Colonne A à K).

Car je ne savais pas faire autrement...

Avez-vous une autre solution ?

Encore merci.

Michael

Re

Avez-vous une autre solution ?

Oui. remplacez votre par celui ci

Dim Test As Boolean 'déclare la varaible test

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim i As Byte, j As Byte
Dim lig As Integer

If Test = True Then Exit Sub 'si test est vrai, sort de la procédure

If Not Intersect(Target, Range("c8:j8")) Is Nothing Or Not Intersect(Target, Range("c15:j15")) Is Nothing Then
    With Worksheets("BDD")

        If Target.Row = 8 Then j = 12 Else j = 19
        lig = .Range("A5:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Find(Target).Row
        Test = True

        For i = 3 To 8
            Cells(j, i).ClearContents
            Cells(j, i) = .Cells(lig, i)
        Next i

        Cells(j - 3, 3) = "": Cells(j - 3, 3).Value = .Cells(lig, 2)
        Cells(j + 2, 3).ClearContents: Cells(j + 2, 3) = .Cells(lig, 11)

    End With
End If
Test = False
End Sub

Cordialement

Merci pour votre réponse ! ça fonctionne parfaitement

Merci

Michael

Rechercher des sujets similaires à "worksheet change conditions"