2017-08-18 2 views
0

Salut, j'espérais que quelqu'un puisse m'aider s'il vous plait.Génération d'une référence secondaire à partir d'un formulaire utilisateur à générer dans une seule feuille lorsque les données vont sur plusieurs feuilles

J'ai actuellement un dilemme. J'ai ici un code qui fonctionne parfaitement pour une simple saisie de données. Il suffit d'insérer les informations dans un formulaire utilisateur, puis de cliquer sur le bouton que l'information est envoyée à une feuille de maîtres (ws1), ainsi que 1 ou 2 des 3 autres feuilles dont elle a besoin en fonction des aspects spécifiques.

Le problème que j'ai ici est la feuille de maître a une référence qui est simplement le numéro suivant dans une séquence. Si les données saisies qualifient le for ws2, je souhaite qu'il génère un autre numéro de référence qui sera à nouveau le numéro suivant dans une séquence (dans cette feuille uniquement). Ci-dessous est mon code qui génère le nombre mais il apportera le nombre qui devrait être affiché sur ws2 seulement sur toutes les feuilles sur lesquelles les données seront présentes. Quelqu'un peut-il aider?

Merci,

Function GetNextId(ws As Worksheet, col As Variant) As Long 
    GetNextId = WorksheetFunction.Max(ws.Columns(col)) + 1 
End Function 

Private Sub DataEntry() 
Dim mRow As Long 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim ws3 As Worksheet 
Dim ws4 As Worksheet 
Dim Nextnum As Long 
Dim Xnum As Long 



Set ws1 = Worksheets("MasterData") 
Set ws2 = Worksheets("X") 
Set ws3 = Worksheets("A") 
Set ws4 = Worksheets("C") 

Nextnum = GetNextId(Sheets("MasterData"), "A") 
Xnum = GetNextId(Sheets("X"), "AC") 

Dim TargetWorksheets As Variant 
'16 qualifying scenarios to determine where the data will be sent 

Select Case True 
Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 1: TargetWorksheets = Array(ws1, ws2, ws3) 
Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: TargetWorksheets = Array(ws1, ws2, ws3) 
Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtClaimVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 1: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: TargetWorksheets = Array(ws1, ws4) 
Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TD.Value) - DateValue(Me.TxtDD.Value) <= 3: TargetWorksheets = Array(ws1, ws2, ws3) 
Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TD.Value) - DateValue(Me.TxtDD.Value) > 3: TargetWorksheets = Array(ws1, ws2, ws4) 
Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 3: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value < 50 And DateValue(Me.TD.Value) - DateValue(Me.TxtDD.Value) > 3: TargetWorksheets = Array(ws1, ws4) 
Case ComboPD.Value = "N" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 1: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "N" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: TargetWorksheets = Array(ws1, ws4) 
Case ComboPD.Value = "N" And ComboNP.Value = "Y" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 1: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "N" And ComboNP.Value = "Y" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: TargetWorksheets = Array(ws1, ws4) 
Case ComboPD.Value = "N" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 3: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "N" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 3: TargetWorksheets = Array(ws1, ws4) 
Case ComboPD.Value = "N" And ComboNP.Value = "N" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 3: TargetWorksheets = Array(ws1, ws3) 
Case ComboPD.Value = "N" And ComboNP.Value = "N" And txtCVal.Value < 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: TargetWorksheets = Array(ws1, ws4) 

Case Else: TargetWorksheets = Array(ws1) 
End Select 

For Each ws In TargetWorksheets 

'find first empty row in worksheets 
mRow = ws.Cells.Find(what:="*", SearchOrder:=xlRows, _ 
SearchDirection:=xlPrevious, LookIn:=xlValues).Row + 1 

'copy userform info data to the qualifying database sheets 
ws.Cells(mRow, 1).Value = Nextnum 
ws.Cells(mRow, 2).Value = Format(Date, "DD/MM/YYYY") 
ws.Cells(mRow, 3).Value = Format(Time, "HH:MM:SS") 
ws.Cells(mRow, 4).Value = CInt(Format(Date, "WW")) 
ws.Cells(mRow, 5).Value = Format(Date, "MMM-YY") 
ws.Cells(mRow, 6).Value = CInt(Format(Date, "YYYY")) 
ws.Cells(mRow, 7).Value = 1 
ws.Cells(mRow, 8).Value = TxtWt.Value * (1300/1000) 
ws.Cells(mRow, 9).Value = Application.WorksheetFunction.VLookup(ComboBd.Value, Sheets("Lookup Vals").Range("G:H"), 2, False) 
ws.Cells(mRow, 10).Value = Application.UserName 
       If ComboBd.Value = "Mn" Then ws.Cells(mRow, 11).Value = Application.WorksheetFunction.VLookup(ComboCompany.Value, Sheets("Lookup Vals").Range("L:N"), 2, False) Else 
        If ComboBd.Value = "Pur" Then ws.Cells(mRow, 11).Value = Application.WorksheetFunction.VLookup(ComboCompany.Value, Sheets("Lookup Vals").Range("P:R"), 2, False) Else 
         If ComboBd.Value = "Vog" Then ws.Cells(mRow, 11).Value = Application.WorksheetFunction.VLookup(ComboCom.Value, Sheets("Lookup Vals").Range("P:R"), 2, False) 
ws.Cells(mRow, 12).Value = Format(Me.TxtRD.Value, "DD/MM/YYYY") 
ws.Cells(mRow, 13).Value = ComboPD.Value 
ws.Cells(mRow, 14).Value = ComboNP.Value 
ws.Cells(mRow, 15).Value = ComboBd.Value 
ws.Cells(mRow, 16).Value = ComboCom.Value 
ws.Cells(mRow, 17).Value = TxtAdditional.Value 
ws.Cells(mRow, 18).Value = Format(Me.TxtDD.Value, "DD/MM/YYYY") 
ws.Cells(mRow, 19).Value = TxtBn.Value 
ws.Cells(mRow, 20).Value = TxtFS.Value 
ws.Cells(mRow, 21).Value = ComboPr.Value 
ws.Cells(mRow, 22).Value = ComboIs.Value 
ws.Cells(mRow, 23).Value = TxtUn.Value 
ws.Cells(mRow, 24).Value = TxtWt.Value 
ws.Cells(mRow, 25).Value = TxtIn.Value 
ws.Cells(mRow, 26).Value = TxtDt.Value 
ws.Cells(mRow, 27).Value = TxtShp.Value 
ws.cells(mRow, 29).Value = Xnum 

Next ws 

End Sub 

Répondre

0

J'ai utilisé un second cas Sélectionnez à la fin

ws.Cells(mRow, 28).Value = DateValue(Me.TxtRecDate.Value) - DateValue(Me.TxtDOD.Value) 

Select Case True 

     Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 1: ws.Cells(mRow, 29).Value = Xnum 
     Case ComboPD.Value = "Y" And ComboNP.Value = "Y" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 1: ws.Cells(mRow, 29).Value = Xnum 
     Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) <= 3: ws.Cells(mRow, 29).Value = Xnum 
     Case ComboPD.Value = "Y" And ComboNP.Value = "N" And txtCVal.Value >= 50 And DateValue(Me.TxtRD.Value) - DateValue(Me.TxtDD.Value) > 3: ws.Cells(mRow, 29).Value = Xnum 

End Select