2016-12-23 6 views
1

Я пытаюсь создать приложение, которое позволяет вам обновлять данные о состоянии продаж, используя два comboboxes.VBA Excel 2 comboboxes issue

Смотреть это скриншоты для демонстрации:

1) Datasheet

2) это Userform касается создания нового состояния продаж

3) второй UserForm требуется для изменения данных и обновить его в нужном листе

Что касается моего исходного кода для создания нового условия продажи, вы можете найти его здесь:

Private Sub bAnnuler_Click() 

    Unload Me 

End Sub 

Private Sub bEnregistrer_Click() 

    Sheets("ConditionsVente").Activate 
    Range("A1").Select 
    Selection.End(xlDown).Select 'On se positionne sur la derniere ligne non vide 
    Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas 
    'ActiveCell = txtNom.Value 
    ActiveCell.Offset(0, 3).Value = txtPrix 
    ActiveCell.Offset(0, 4).Value = txtDélai 

End Sub 

Private Sub bReinitialiser_Click() 
    txtPrix = "" 
    txtDélai = "" 
End Sub 


Private Sub cboFournisseur_Change() 

End Sub 

Private Sub UserForm_Initialize() 
    'initialiser combobox fournisseur 
    Dim Fournisseurs As Range 
    Dim Matieres As Range 

    Set Fournisseurs = Worksheets("Fournisseurs").Range("A2:A" & Worksheets("Fournisseurs").Range("A2").End(xlDown).Row) 

    Me.cboFournisseur.MaxLength = Fournisseurs.Count 
    Me.cboFournisseur.List = Fournisseurs.Value 
    'initialiser combobox matiere 
    Set Matieres = Worksheets("Matieres").Range("A2:A" &  Worksheets("Matieres").Range("A2").End(xlDown).Row) 

    Me.cboMatiere.MaxLength = Matieres.Count 
    Me.cboMatiere.List = Matieres.Value 

End Sub 

У меня есть два вопроса: 1) когда я запускаю этот код, я создаю новое условие продаж, но то, что сохраняется в листе, только цена (приз на французском) и задержку (Delai на французском языке) и в колонках Поставщиков (Fournisseurs on French) и Raw Material (Matiere на французском языке) все еще пусто.

2) вторая точка, чтобы сделать пользовательскую форму, которая позволяет мне изменять условия продаж на нужном листе, какой самый простой способ реализовать его?

+0

смотрите ниже - в общем, вы должны избегать использования '' Activate' и Select' в вашем коде. Это действительно не нужно. –

ответ

1

Для части 1 вам это нужно:

Private Sub bEnregistrer_Click() 
    Dim nextRow as Integer 

    With Worksheets("ConditionsVente") 

     nextRow = .Range("A1").end(xlDown).Row + 1 

     .Range("A" & nextRow) = txtNom.Value 
     .Range("B" & nextRow) = txtMatiere.Value 
     .Range("C" & nextRow) = txtPrix 
     .Range("D" & nextRow) = txtDélai 
    End With 
End Sub 

Для части 2 попробуйте следующее:

Private Sub btnSave_Click() 
    Dim Fournisseurs As Range, Fournisseur as range 

    Set Fournisseurs = Worksheets("Fournisseurs").Range("A2:A" & Worksheets("Fournisseurs").Range("A2").End(xlDown).Row) 

    For each Fournisseur in Fournisseurs 
     If Fournisseur = txtNom.Value And Fournisseur.offset(0, 1) = txtMatiere.Value Then 
      Fournisseur.offset(0, 3) = txtPrix 
      Fournisseur.offset(0, 3) = txtDélai 
     End if 
    Next Fournisseur  
End Sub 
+0

Это работает Большое спасибо Alex P – zakaria

+0

для второй части, чтобы изменить условие продаж, мы должны добавить условие, объясняющее, что два данных combobox должны существовать в первую очередь? у тебя есть идеи? – zakaria

+0

Создайте цикл над четырьмя и проверьте соответствие мат. Пример: если диапазон («a» и row) = «Hermes» AND range («a» & row) .offset (0,1) = «matiere2», то ... –