Ajouter la valeur du formulaire user à plusieurs colonnes

Hé les gars, celui-ci est compliqué. J'ai créé un formulaire d'user qui appenda une valeur d'un user à une certaine colonne (CECI EST CODE ACTUEL). Cependant, au lieu de simplement l'append à cette colonne, je souhaite qu'il l'ajoute aux colonnes suivantes. Par exemple, si je devais sélectionner le +1 et la valeur actuelle = 500, je veux que cette valeur l'ajoute à la colonne N et à la suite "O", "P" "Q". Je pensais qu'il serait facile de l'append à l'affaire mais ce n'est pas si simple

Case "Current Month +1" iCol = "N" and "O" and "P" and "Q" Case "Current Month +2" iCol = "O" and "P" and "Q" 

**** Ce n'est pas si facile

 Private Sub cmdAdd_Click() If TrialVersion Then Exit Sub Dim irow As Long Dim lastRow As Long Dim iCol As Ssortingng Dim c As Range Dim ws As Worksheet Dim value As Long Dim NewPart As Boolean Dim ws_warehouse(7) As Worksheet '7 is total warehouse tab you have Set ws = Worksheets("Main") Set ws_warehouse(1) = Worksheets("Elkhart East") Set ws_warehouse(2) = Worksheets("Tennessee") Set ws_warehouse(3) = Worksheets("Alabama") Set ws_warehouse(4) = Worksheets("North Carolina") Set ws_warehouse(5) = Worksheets("Pennsylvania") Set ws_warehouse(6) = Worksheets("Texas") Set ws_warehouse(7) = Worksheets("West Coast") Set c = ws.Range("A7:A1048576").Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole) If c Is Nothing Then 'find first empty row in database lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count irow = lastRow + 1 NewPart = True Else 'find row where the part is irow = ws.Cells.Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row NewPart = False End If 'check for a part number If Trim(Me.PartTextBox.value) = "" Then Me.PartTextBox.SetFocus MsgBox "Please Enter A Part Number" Exit Sub End If If Trim(Me.MonthComboBox.value) = "" Then Me.MonthComboBox.SetFocus MsgBox "Please Enter A Month" Exit Sub End If If Trim(Me.AddTextBox.value) = "" Then Me.AddTextBox.SetFocus MsgBox "Please Enter A Value To Add Or Substract" Exit Sub End If Select Case MonthComboBox.value Case "Current Month" iCol = "C" Case "Current Month +1" iCol = "N" Case "Current Month +2" iCol = "O" Case "Current Month +3" iCol = "P" Case "Current Month +4" iCol = "Q" End Select actWarehouse = Me.warehousecombobox.ListIndex + 1 With ws .Cells(irow, "A").value = Me.PartTextBox.value .Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value) End With With ws_warehouse(actWarehouse) 'find part number l_row = .Range("A" & .Rows.Count).End(xlUp).Row NewPart = True For r = 7 To l_row If Trim(.Range("A" & r)) = "" Then Exit For If LCase(.Range("A" & r)) = LCase(Me.PartTextBox.Text) Then irow = r Exit For NewPart = False End If Next r If NewPart Then irow = r .Cells(irow, "A").value = Me.PartTextBox.value .Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value) End With 'clear the data Me.PartTextBox.value = "" Me.MonthComboBox.value = "" Me.AddTextBox.value = "" Me.PartTextBox.SetFocus Me.warehousecombobox.value = "" End Sub Private Sub cmdClose_Click() Unload Me End Sub Private Sub UserForm_Initialize() 'Empty NameTextBox PartTextBox.value = "" 'Empty PhoneTextBox AddTextBox.value = "" 'Empty DinnerComboBox 'Fill DinnerComboBox With MonthComboBox .AddItem "Current Month" .AddItem "Current Month +1" .AddItem "Current Month +2" .AddItem "Current Month +3" .AddItem "Current Month +4" End With With warehousecombobox .AddItem "Elkhart East" .AddItem "Tennessee" .AddItem "Alabama" .AddItem "North Carolina" .AddItem "Pennsylvania" .AddItem "Texas" .AddItem "West Coast" End With End Sub 

MODIFIER POUR INCLURE TOUT CODE DE SOURCE:

 Private Sub cmdAdd_Click() If TrialVersion Then Exit Sub Dim irow As Long Dim lastRow As Long Dim iCol As Ssortingng Dim c As Range Dim ws As Worksheet Dim value As Long Dim NewPart As Boolean Dim ws_warehouse(7) As Worksheet '7 is total warehouse tab you have Dim nExtend As Integer Dim cel As Range Set ws = Worksheets("Main") Set ws_warehouse(1) = Worksheets("Elkhart East") Set ws_warehouse(2) = Worksheets("Tennessee") Set ws_warehouse(3) = Worksheets("Alabama") Set ws_warehouse(4) = Worksheets("North Carolina") Set ws_warehouse(5) = Worksheets("Pennsylvania") Set ws_warehouse(6) = Worksheets("Texas") Set ws_warehouse(7) = Worksheets("West Coast") Set c = ws.Range("A7:A1048576").Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues, LookAt:=xlWhole) If c Is Nothing Then 'find first empty row in database lastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count irow = lastRow + 1 NewPart = True Else 'find row where the part is irow = ws.Cells.Find(What:=Me.PartTextBox.value, SearchOrder:=xlRows, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Row NewPart = False End If 'check for a part number If Trim(Me.PartTextBox.value) = "" Then Me.PartTextBox.SetFocus MsgBox "Please Enter A Part Number" Exit Sub End If If Trim(Me.MonthComboBox.value) = "" Then Me.MonthComboBox.SetFocus MsgBox "Please Enter A Month" Exit Sub End If If Trim(Me.AddTextbox.value) = "" Then Me.AddTextbox.SetFocus MsgBox "Please Enter A Value To Add Or Substract" Exit Sub End If nExtend = 1 'Set this as a default. Select Case MonthComboBox.value Case "Current Month" iCol = "C" Case "Current Month +1" iCol = "N" nExtend = 4 Case "Current Month +2" iCol = "O" nExtend = 3 Case "Current Month +3" iCol = "P" nExtend = 2 Case "Current Month +4" iCol = "Q" End Select actWarehouse = Me.warehousecombobox.ListIndex + 1 With ws .Cells(irow, "A").value = Me.PartTextBox.value For Each cel In .Cells(irow, iCol).Resize(, nExtend) cel.value = cel.value + CLng(Me.AddTextbox.value) Next cel End With With ws_warehouse(actWarehouse) 'find part number l_row = .Range("A" & .Rows.Count).End(xlUp).Row NewPart = True For r = 7 To l_row If Trim(.Range("A" & r)) = "" Then Exit For If LCase(.Range("A" & r)) = LCase(Me.PartTextBox.Text) Then irow = r Exit For NewPart = False End If Next r If NewPart Then irow = r .Cells(irow, "A").value = Me.PartTextBox.value .Cells(irow, iCol).value = .Cells(irow, iCol).value + CLng(Me.AddTextbox.value) End With 'clear the data Me.PartTextBox.value = "" Me.MonthComboBox.value = "" Me.AddTextbox.value = "" Me.PartTextBox.SetFocus Me.warehousecombobox.value = "" End Sub Private Sub cmdClose_Click() Unload Me End Sub Private Sub UserForm_Initialize() 'Empty NameTextBox PartTextBox.value = "" 'Empty PhoneTextBox AddTextbox.value = "" 'Empty DinnerComboBox 'Fill DinnerComboBox With MonthComboBox .AddItem "Current Month" .AddItem "Current Month +1" .AddItem "Current Month +2" .AddItem "Current Month +3" .AddItem "Current Month +4" End With With warehousecombobox .AddItem "Elkhart East" .AddItem "Tennessee" .AddItem "Alabama" .AddItem "North Carolina" .AddItem "Pennsylvania" .AddItem "Texas" .AddItem "West Coast" End With End Sub 

Si les colonnes sont toujours consécutives, peut-être que vous pouvez append une deuxième variable integer qui indique au code le nombre de colonnes à inclure. À titre d'exemple, dans votre publication, vous montrez que le Current Month + 1 commence à la Column N et s'étend à 3 colonnes à droite (O, P, Q). Votre code pourrait ressembler à quelque chose comme:

 Select Case MonthComboBox.value Case "Current Month + 1" iCol = "C" nExtend = 4 

Ensuite, lorsque vous gérez les valeurs, le code ressemblerait à:

 .Cells(irow, iCol).Resize(,nExtend).value = .Cells(irow, iCol).value + CLng(Me.AddTextBox.value) 

Remarque: Même si vous êtes en train d'étendre 3 colonnes, l'input de la fonction Resize est 4. Notez également la virgule principale car nous ne modifions pas le redimensionnement des lignes.

EDITION BASÉ SUR DE NOUVEAU INFO:

Utilisez une boucle pour changer chaque valeur dans la plage, comme ci-dessous:

 Select Case MonthComboBox.value Case "Current Month + 1" iCol = "C" nExtend = 4 For Each cel in .Cells(irow, iCol).Resize(,nExtend) cel.Value = cel.Value + CLng(Me.AddTextBox.Value) Next cel