Добавление товаров с сохранением порядка vba - PullRequest
1 голос
/ 05 августа 2020

У меня есть список ниже, куда я должен добавить элементы в столбце B на каждом листе; liste_lameM1, liste_lameM2, liste_lameM3 et liste_lameM4: введите описание изображения здесь

Мне нужно установить условие на номера столбца A, чтобы добавить новый элемент, мне нужно указать модель из combobox, где у меня есть 4 варианта (M1, M2, M3, M4), чтобы выбрать лист, на который следует добавить элемент (эта часть работает хорошо). Второе условие - выбрать число от 001 до 300 из поля со списком, чтобы иметь возможность добавить мой элемент в нужное место в столбце B, поэтому, если я выберу 006, модель M1, мои данные должны быть в столбце B, строка 7 на листе liste_lameM1, если я выберу 007, модель M1, мои данные должны быть в столбце B, строка 8 рабочего листа liste_lameM1, если я выберу 010, модель M2, мои данные будут добавлены в столбец B, строка 11 рабочего листа liste_lameM2 и так далее. вот мой код:

Private Sub CommandButton1_Click()
Dim fin_liste As Range, ligne As Long, ws_lame As Worksheet, ctrl As Boolean
Set ws_lame = ActiveWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value)
Set fin_liste = ThisWorkbook.Worksheets("Liste_Lame_" & Me.ComboBox_Modele.Value).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
For j = 2 To fin_liste
    If ws_lame.Range("A" & j) = Me.ComboBox_Num.Value Then
        ctrl = True
        fin_liste = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
Exit For
    End If
Next
If ctrl = False Then
    j = fin_liste + 1
    ws_lame.Range("A" & j).Value = Me.ComboBox_Num.Value
    fin_liste = Me.ComboBox_Num.Value & "-" & Me.TextBox_Mois.Value & "-" & Me.TextBox_Annee.Value & "-" & Me.ComboBox_Modele.Value & "-" & Me.ComboBox_Const.Value
End If
End Sub

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

1 Ответ

0 голосов
/ 05 августа 2020

Переменная « j » для зацикливания, я меняю на « ligne ».

Исходя из вашего объяснения, вы не можете сделайте второе условие, если вы используете этот код, как я дал вам раньше.

fin_liste = ThisWorkbook.Worksheets(combo.Value).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)

Таким образом, даже если вы выбираете число от 001 до 300, он все равно добавляет данные точно в последнюю строку в столбце « B ». Например, если последние данные в ячейке « B3 » (B4 все еще пуст), тогда вы выбираете номер 5 (вы надеетесь, что данные добавятся к « B6 »), данные будут добавьте « B4 ».

Тогда, возможно, вы обнаружите, что вы можете изменить .offset(ComboBox_Num.Value, 0), но это испортит ваши данные. Таким образом, код, который я даю вам раньше, неэффективен для 2-го условия.

Исходя из 2-го условия, вы можете использовать это.

fin_liste = ThisWorkbook.Worksheets(combo.Value).Cells(ComboBox_Num.Value, "B").offset(1, 0)

Я все еще пишу .offset(1, 0), потому что я думаю, вы хотите добавить первые данные в ячейку «B2», верно? На самом деле у этого кода есть проблема, но, судя по вашему вопросу, я думаю, что эта проблема вас не коснется. Вы скоро это узнаете. (Вы должны принять во внимание комментарий Za c)

Я переписал ваш код, чтобы мне было проще попробовать его на моем Excel. Вы можете изменить его на свою версию.

Private Sub CommandButton1_Click()

Dim fin_liste As Range, ligne As Long, ws_lame As Worksheet, ctrl As Boolean
Set ws_lame = ActiveWorkbook.Worksheets(combo.value)
Set fin_liste = ThisWorkbook.Worksheets(combo.Value).Cells(combo2.Value, "B").Offset(1, 0) '.End(xlUp).Offset(combo2.Value, 0)
For ligne = 2 To fin_liste
    If ws_lame.Range("A" & ligne) = combo2.Value Then
        ctrl = True
        fin_liste = text.Value
    End If
Next

If ctrl = False Then
    ligne = fin_liste + 1
    ws_lame.Range("A" & ligne) = combo2.Value
    fin_liste = text.Value
End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...