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 SubBonjour
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 SubLa 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 SubCordialement
Merci pour votre réponse ! ça fonctionne parfaitement
Merci
Michael