Simplification code

Bonjour à tous,

je débute en vba (et programmation )

j'aimerais simplifier le code ci-dessous lorsque je teste si Feuil!L5 = bas, moyen, haut..

en effet, cela s'enchaîne mal.

il y a forcément une des trois possibilités donc comment faire pour les imbriquer?

du style:

if bas then...

else moyen then...

else if haut then...

merci

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Trouve As Range

Static mem As String

Static level As String

If mem <> Range("Feuil1!S7") Then

mem = Range("Feuil1!S7")

Set Trouve = Worksheets("Feuil3").Range("A:A").Find(Range("Feuil1!S7"), lookat:=xlWhole)

If Not Trouve Is Nothing Then

If Range("Feuil1!L5") = "bas" Then

Worksheets("Feuil3").Range("B" & Trouve.Row & ":E" & Trouve.Row).Copy Destination:=Worksheets("Feuil1").Range("O7:R7")

End If

If Range("Feuil1!L5") = "moyen" Then

Worksheets("Feuil3").Range("G" & Trouve.Row & ":J" & Trouve.Row).Copy Destination:=Worksheets("Feuil1").Range("O7:R7")

End If

If Range("Feuil1!L5") = "haut" Then

Worksheets("Feuil3").Range("L" & Trouve.Row & ":O" & Trouve.Row).Copy Destination:=Worksheets("Feuil1").Range("O7:R7")

End If

End If

End If

End Sub

Bonjour

Si ce code est dans le code la page "Feuil1"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Trouve As Range
Static mem As String
Static level As String

  If mem <> Range("S7") Then
    mem = Range("S7")
    With Worksheets("Feuil3")
      Set Trouve = .Range("A:A").Find(Range("S7"), lookat:=xlWhole)

      If Not Trouve Is Nothing Then
        Select Case Range("L5")
          Case "bas"
            .Range("B" & Trouve.Row & ":E" & Trouve.Row).Copy Destination:=Range("O7:R7")
          Case "moyen"
            .Range("G" & Trouve.Row & ":J" & Trouve.Row).Copy Destination:=Range("O7:R7")
          Case "haut"
            .Range("L" & Trouve.Row & ":O" & Trouve.Row).Copy Destination:=Range("O7:R7")
        End Select
      End If
    End With
  End If
End Sub

Bonjour à tous,

A tester :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Trouve As Range
    Dim deb As String
    Static mem As String
    Static level As String

    If mem <> Range("Feuil1!S7") Then
        mem = Range("Feuil1!S7")
        Set Trouve = Worksheets("Feuil3").Range("A:A").Find(Range("Feuil1!S7"), lookat:=xlWhole)

        If Not Trouve Is Nothing Then
            Select Case Range("Feuil1!L5")
            Case "bas"
                deb = "B"
            Case "moyen"
                deb = "G"
            Case "haut"
                deb = "L"
            End Select
            Worksheets("Feuil1").Range("O7:R7") = Sheets("Feuil3").Range(deb & Trouve.Row).Resize(, 4).Value
        End If

    End If
End Sub

Bonjour,

merci pour votre aide, cela fonctionne!

mais comment actualiser les données si je change le niveau (bas, moyen, haut)?

car pour le moment si je change de niveau je suis obligé de rechercher une autre référence (ou désignation), sinon les données correspondantes au niveau ne s'actualisent pas.

merci

oza

Bonjour

Une modification de L5 ou de S7 actualisera les données

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Trouve As Range

  If Not Intersect(Range("L5,S7"), Target) Is Nothing Then
    With Worksheets("Feuil3")
      Set Trouve = .Range("A:A").Find(Range("S7"), lookat:=xlWhole)

      If Not Trouve Is Nothing Then
        Select Case Range("L5")
          Case "bas"
            .Range("B" & Trouve.Row & ":E" & Trouve.Row).Copy Destination:=Range("O7:R7")
          Case "moyen"
            .Range("G" & Trouve.Row & ":J" & Trouve.Row).Copy Destination:=Range("O7:R7")
          Case "haut"
            .Range("L" & Trouve.Row & ":O" & Trouve.Row).Copy Destination:=Range("O7:R7")
        End Select
      End If
    End With
  End If
End Sub

merci Banzaï64

tu as résolu mon problème mais un autre se pose..

le même que le précédent mais en sens inverse si j'ose dire.

si je ne change pas le niveau et que je recherche une autre référence, les données ne s'actualisent pas.

une idée?

Bonjour

Le niveau c'est en L5 ?

La référence c'est en S7 ?

Si c'est ça les données s'actualisent avec le code fourni

Sinon précises dans quelles cellules sont le niveau et la référence

A suivre

L5 c'est bien le niveau

la référence est en K7

et en S7 c'est ma tranche de prix

en fait j'attribue à chaque référence une tranche de prix. Le niveau me permet de récupérer la moyenne sur l'ensemble de la tranche.

je te joins mon fichier, c'est très brouillon ne fais pas attention c'est juste une ébauche..

Bonjour

Ton fichier n'est pas passé

Mais en attendant dans le code tu modifies S7 par K7

Donc cela devient

If Not Intersect(Range("L5,K7"), Target) Is Nothing Then

c'est super! merci!

Rechercher des sujets similaires à "simplification code"