Переменная « 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