VBA Syntaxe

Bonsoir à tous,

J'ai un peu honte de ce code qui fonctionne mais dont la syntaxe ne me plait pas,

comment éviter les Offset et Activecell ?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Application.Intersect(Target, Range("h16:h55")) Is Nothing Then
    ActiveCell.Offset(0, -7).FormulaR1C1 = "=VLOOKUP(RC[7],'Listing Articles'!R3C1:R100C4,2,0)"
        If IsError(ActiveCell.Offset(0, -7)) Then GoTo Fin
    ActiveCell.Offset(0, -7) = ActiveCell.Offset(0, -7) 'en dur
    ActiveCell.Offset(0, -2).FormulaR1C1 = "=VLOOKUP(RC[2],'Listing Articles'!R3C1:R100C4,4,0)"
    ActiveCell.Offset(0, -2) = ActiveCell.Offset(0, -2) 'en dur
End If
Exit Sub
Fin: MsgBox ("erreur N° !")
    Range(ActiveCell.Offset(0, -7), ActiveCell.Offset(0, -2)).ClearContents
End Sub

Bonne soirée

Claude.

Bonsoir,

Une solution en remplaçant les ACTIVECELL par TARGET

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Not Application.Intersect(Target, Range("h16:h55")) Is Nothing Then
With Target
    .Offset(0, -7).FormulaR1C1 = "=VLOOKUP(RC[7],'Listing Articles'!R3C1:R100C4,2,0)"
        If IsError(.Offset(0, -7)) Then GoTo Fin
    .Offset(0, -7) = .Offset(0, -7) 'en dur
    .Offset(0, -2).FormulaR1C1 = "=VLOOKUP(RC[2],'Listing Articles'!R3C1:R100C4,4,0)"
    .Offset(0, -2) = .Offset(0, -2) 'en dur
End With
End If
Exit Sub
Fin: MsgBox ("erreur N° !")
    Range(Target.Offset(0, -7), ActiveCell.Offset(0, -2)).ClearContents
End Sub

ou

Remplacer les Activecell.offset par CELLS

Pour te conseiller au mieux, il serait préférable de voir le fichier.

Amicalement

Dan

Bonsoir Dan,

çà me plais déjà mieux,

voici le fichier

il s'agit d'entrer un code barre, le prix et le titre doivent s'afficher

https://www.excel-pratique.com/~files/doc2/YO3XHCodeBar_essai1.xls

Merci

Claude.

bonjour,

Moi j'y vois comme ça :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim i%, k%, ref$, o
If Not Application.Intersect(Target, Range("h16:h55")) Is Nothing Then
i = Target.Row
ref = Target.Value
    Application.EnableEvents = False
With Worksheets(2).Range("A:A")
    Set o = .Find(ref, LookIn:=xlValues)
    If Not o Is Nothing Then
      k = o.Row
      Cells(i, 1) = .Cells(k, 2)
      Cells(i, 6) = .Cells(k, 4)
    Else
      MsgBox "Code inconnu"
      Range(Cells(i, 1), Cells(i, 7)).ClearContents
    End If
End With
    Application.EnableEvents = True
End If
End Sub

A+

Merci galopin01,

Une autre proposition de Mytå, qui utilise la même fonction (.Find)

Private Sub Worksheet_Change(ByVal Target As Range)
'de Mytå
If Not Application.Intersect(Target, Range("I16:I55")) Is Nothing Then
If Target.Count > 1 Then MsgBox ("Sélection multiples interdite !"): Exit Sub
With Sheets("Listing Articles").Range("D1:D" & Range("D500").End(xlUp).Row)
    Set c = .Find(Target, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            Target.Offset(0, -8) = Sheets("Listing Articles").Cells(c.Row, 1)
            Target.Offset(0, -3) = Sheets("Listing Articles").Cells(c.Row, 3)
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    Else
    Target.Offset(0, -8) = "": Target.Offset(0, -3) = ""
    MsgBox ("Pas trouvé de correspondance !")
    End If
End With
End If
End Sub

J'analyse tout çà dans le journée

Merci à tous,

Claude.

édit: sur le fichier de Mytå, la colonne code est en D (listing)

re,

sur cette ligne de galopin01,

    Set o = .Find(ref, LookIn:=xlValues) 

Peut-on mettre et comment, le 3ème argument ?

car là, si on tape que 2 ou 3 chiffres çà sort quand même une référence (la + proche).

Bonne journée

Claude.

Bonjour à tous,

Je remonte le sujet pour le 3ème argument , possible ?

Bonne journée

Claude.

Bonjour,

Sorry j'avais zappé la question...

Mettre :

Set o = .Find(ref, LookIn:=xlValues, LookAt:=xlWhole)

A+

re,

Merci galopin01, c'est nickel !

l'aide Excel n'est pas très bavarde la-dessus

édit: merci à tous

à+.... Claude.

Rechercher des sujets similaires à "vba syntaxe"