Mise à jour de donnée

Bonjour chers amis !

Je rencontre un problème sur mon classeur Excel. J'aimerais mettre à jour

le prix de vente dans la base article en fonction du nom d'article à partir de l'userform Bon de commande. J'ai pensé à la formule WorksheetFunction.VLookup mais ça ne marche pas. Je n'arrive pas en faite.

Merci de bien vouloir m'aider chers amis

Bonjour William, bonjour le forum,

Peut-être comme ça :

Private Sub CommandButton2_Click()
Dim O As Worksheet
Dim TS As ListObject
Dim LI As Integer

Set O = Worksheets("Base de donnée articles")
Set TS = O.ListObjects("Tableau3")
If cbxfour.Value = "" Then
    MsgBox "Veuillez sélectionner le nom du fournisseur.", 48, "Erreur"
    Exit Sub
End If
If cbxart.Value = "" Then
    MsgBox "Veuillez sélectionner un article.", 48, "Erreur"
    Exit Sub
End If
If TextBox2.Value = "" Then
    MsgBox "Veuillez insérer une quantité.", 48, "Erreur"
    Exit Sub
End If
If cbxfour.ListIndex >= 0 Then
    Me.cbxfour.Enabled = False
End If
If Me.cbxart = "" And Me.cbxfour = "" And Me.TextBox2 = "" Then
    MsgBox "Veuillez remplir tout les champs.", vbCritical, "Erreur"
End If
If Me.cbxart.ListIndex >= 0 And Me.TextBox2 <> "" And Me.cbxfour.ListIndex >= 0 Then
    If Me.ListBox1.ListCount >= 20 Then
        MsgBox "Trop d'article pour cette commande, Veuillez créer une autre commande.", vbCritical, "Erreur"
    Else
        'Contrôle les champs
        LI = Range(TS.Name).Columns(2).Find(Me.cbxart.Value, , xlValues, xlWhole).Row - TS.HeaderRowRange.Row
        'Remplir la zone liste
        With Me.ListBox1
            .AddItem
            .List(memoire, 0) = TS.DataBodyRange.Item(LI, 1)
            .List(memoire, 1) = Me.cbxart
            .List(memoire, 2) = Me.TextBox2
            .List(memoire, 3) = TS.DataBodyRange.Item(LI, 4)
        End With
        memoire = memoire + 1
        Me.cbxart = ""
        Me.TextBox2 = ""
    End If
End If
End Sub
Cher ami Thautheme ça ne marche pas le code malheureusement.. Mais bon merci quand même

Re,

En fait dans le tableau de l'onglet Base de donnée articles, la colonne des prix de vente est vide !... Si tu mets des valeurs, ça marchera...

Bonjour ThauThème ! Justement les prix de vente de la base article proviendront du Userform BON DE COMMANDE en fonction du nom d'article selectionné.

capture

Ok,

En fait j'ai confondu les UserForms. Le code proposé concernait GESTLIVR et je pensais qu'il devait renvoyer dans la ListBox1 le Prix de vente renseigné dans le tableau de l'onglet Base de donnée articles. Je vais revoir ma copie et reviens vers toi...

D'accord Merci !

Le code concerne userform GESTCOM

Re,

Bon, si j'ai bien compris ce nouveau code devrait fonctionner. Il renvoie le prix de vente, renseigné dans txtprivent de GESTCOM, dans la ligne correspondante du tableau de l'onglet Base de donnée articles.

Private Sub CommandButton2_Click()
Dim O As Worksheet
Dim TS As ListObject
Dim LI As Integer

Set O = Worksheets("Base de donnée articles")
Set TS = O.ListObjects("Tableau3")
If cbxfour.Value = "" Then
    MsgBox "Veuillez sélectionner le nom du fournisseur.", 48, "Erreur"
    Exit Sub
End If
If cbxart.Value = "" Then
    MsgBox "Veuillez sélectionner un article.", 48, "Erreur"
    Exit Sub
End If
If Me.Txtprix.Value = "" Then
    MsgBox "Veuillez insérer le prix d'achat de l'article.", 48, "Erreur"
    Exit Sub
End If
If Me.txtprivent.Value = "" Then
    MsgBox "Veuillez insérer le prix de vente de l'article.", 48, "Erreur"
    Exit Sub
End If
If TextBox2.Value = "" Then
    MsgBox "Veuillez insérer une quantité.", 48, "Erreur"
    Exit Sub
End If
If cbxfour.ListIndex >= 0 Then
    Me.cbxfour.Enabled = False
End If
If Me.cbxart = "" And Me.cbxfour = "" And Me.TextBox2 = "" And Me.txtprivent = "" Then
    MsgBox "Veuillez remplir tout les champs.", vbCritical, "Erreur"
End If
If Me.cbxart.ListIndex >= 0 And Me.TextBox2 <> "" And Me.cbxfour.ListIndex >= 0 Then
    If Me.ListBox1.ListCount >= 20 Then
        MsgBox "Trop d'article pour cette commande, Veuillez créer une autre commande.", vbCritical, "Erreur"
    Else
        'Contrôle les champs
        LI = Range(TS.Name).Columns(2).Find(Me.cbxart.Value, , xlValues, xlWhole).Row - TS.HeaderRowRange.Row
        'Remplir la zone liste
        With Me.ListBox1
            .AddItem
            .List(memoire, 0) = TS.DataBodyRange.Item(LI, 1)
            .List(memoire, 1) = Me.cbxart
            .List(memoire, 2) = Me.TextBox2
            .List(memoire, 3) = Me.Txtprix
            TS.DataBodyRange.Item(LI, 4) = Me.txtprivent
        End With
        memoire = memoire + 1
        Me.cbxart = ""
        Me.TextBox2 = ""
    End If
End If
End Sub

Merci ThauThème... ça marche parfaitement

Rechercher des sujets similaires à "mise jour donnee"