What kind of "problem in the code" are we supposed to look for?at initial 
glance, all of the spacing is wrong, all of the syntax is wrong.But that is 
because sending this embedded in the email as you have has messed up all of the 
spacing and indentation (if there is any)
Next, without having a copy of the data (file1 and file2)I cannot BEGIN to know 
if the issue is with the code not recognizing the data, or??
Is it possible to get samples of the three files and this macro in a module of 
excel?
Otherwise, I could spend hours simply cleaning up this format and GUESSING at 
what file1 and file2 look like.Only to guess wrong and never come close to the 
issue you're trying to solve.  Paul-----------------------------------------
“Do all the good you can,
By all the means you can,
In all the ways you can,
In all the places you can,
At all the times you can,
To all the people you can,
As long as ever you can.” - John Wesley
----------------------------------------- 

    On Thursday, February 4, 2016 5:57 AM, Saurabh Karangutkar 
<saurabh12...@gmail.com> wrote:
 
 

 
   
   - Here is the problem    
   
   
Sheet 1 - file 1 is base datafile thats maps our master product file with 
master product file received from our suppliers / merchants listing supplier 
product code to our product code, and supplier name to our name. This is 
prepared basis a one time exercise.
   - Sheet 1 - file 2 is daily price list that we receive from the supplier in 
that format - it lists down supplier product code, supplier product name, MRP 
i.e. list price, selling price - at times this is at a discount to list price, 
and quantity available for sale.
   - Sheet 1 - file 3 is the format in which we need output basis mapping of 
sheet 1 with sheet 2. Instructions are given against each field. We use file 3 
to upload the file in our system that calculates final selling price to retail 
consumers. Our agents often refer this final file while discussing sales with 
potential customers.   
   
   
Here is the code . Please let me know what is the problem in the code . Not 
able to get it .
   -    
   
Public FPMfolder AsString'* the foldername   
Public FinalPM AsString'* the filename   
   
'* value below will hold the values based upon the value in B4   
Public DPMfolder AsString'* the foldername   
Public DailyPM AsString'* the filename   
   
Public OFolder AsString'* this will hold the foldername based upon the value in 
B5   
Public FinalOutput AsString'* this will hold the actual outputfile name   
   
Public wbTool As Workbook '* will be used to refer to the 'PriceMappingTool' 
file   
Public wsTool As Worksheet '* refer to sheet named 'Main'   
   
Public wbFPM As Workbook '* this will refer to the actual file named in B3   
Public wsFPM As Worksheet '* the sheet of the above file where the data is to 
be found   
   
Public wbDPM As Workbook '* this will refer to the actual file named in B4   
Public wsDPM As Worksheet '* the sheet of the above file where the data is to 
be found   
   
Public wbFPO As Workbook '* this will be used to refer to the file named on 
FinalOutput   
Public wsFPO1 As Worksheet '* the sheet where the output data will be written 
to Sheet(1)   
Public wsFPO2 As Worksheet '* the sheet where the output data will be written 
to Sheet(2)   
Public wsFPO3 As Worksheet '* the sheet where the output data will be written 
to Sheet(3)   
   
Public Merchant AsString'* if and when used to store the value of the selected 
Merchant's name   
Public Acronym AsString'* if and when used to store the corresponding Acronym 
of the selected Merchant   
   
Public ProcOK AsBoolean   
   
Public FSPLIT AsVariant'* used to extract filename and foldername from variable 
  
Public PressedState AsBoolean'* to trap Esc or Cancel button pressed   
   
PublicSub MapAndConsolidate()   
ProcOK =False: PressedState =False   
Set wbTool = Workbooks("PriceMappingTool.xlsm")   
Set wsTool = wbTool.Sheets("Main")   
wbTool.Activate   
If Len(Trim(wsTool.Range("B2")))=0Or Len(Trim(wsTool.Range("B3")))=0Or 
Len(Trim(wsTool.Range("B4")))=0OrLen(Trim(wsTool.Range("B5")))=0Then   
MsgBox "Please verify THAT all the input values have been entered!", 
vbCritical,"OPERATION ABORTED !!!"   
ExitSub   
EndIf   
   
Application.ScreenUpdating =False   
'* below sets all the variables based upon the input values   
FSPLIT = Split(wsTool.Range("B3").Value, Application.PathSeparator)   
FinalPM = FSPLIT(CInt(UBound(FSPLIT)))   
FPMfolder = Replace(wsTool.Range("B3").Value, FinalPM,"")   
If Right(FPMfolder,1)<> Application.PathSeparator Then FPMfolder = FPMfolder & 
Application.PathSeparator   
   
FSPLIT = Split(wsTool.Range("B4").Value, Application.PathSeparator)   
DailyPM = FSPLIT(CInt(UBound(FSPLIT)))   
DPMfolder = Replace(wsTool.Range("B4").Value, DailyPM,"")   
If Right(DPMfolder,1)<> Application.PathSeparator Then DPMfolder = DPMfolder & 
Application.PathSeparator   
   
OFolder = wsTool.Range("B5").Value   
If Right(OFolder,1)<> Application.PathSeparator Then OFolder = OFolder & 
Application.PathSeparator   
   
Merchant = wsTool.Range("B2").Value   
Acronym = findAcronym(wsTool.Range("B2").Value)   
If Len(Trim(Acronym))=0Then Acronym ="XXX"   
   
OnErrorResumeNext   
Set wbFPM = Workbooks(FinalPM)   
If wbFPM IsNothingThenSet wbFPM = Workbooks.Open(Filename:=FPMfolder & 
FinalPM,ReadOnly:=True)   
If wbFPM IsNothingThenGoTo exitNoGo   
   
Set wbDPM = Workbooks(DailyPM)   
If wbDPM IsNothingThenSet wbDPM = Workbooks.Open(Filename:=DPMfolder & 
DailyPM,ReadOnly:=True)   
If wbDPM IsNothingThenGoTo exitNoGo   
   
'Set wbFOP = Workbooks(FinalOutP)   
'If wbFOP Is Nothing Then Set wbFOP = Workbooks.Open(Filename:=filePath & 
Application.PathSeparator & FinalOutP)   
'If wbFOP Is Nothing Then GoTo exitNoGo   
   
FinalOutput ="Final_Output-"& Format(Now(),"dd-mm-yyyy-HHmm")&"_"& 
Trim(Acronym)&".xlsx"   
   
Err.Clear   
OnErrorGoTo0   
   
wbTool.Activate   
Application.ScreenUpdating =True   
If MsgBox("Base mapping file:"& vbCrLf & Chr(9)& wbFPM.Name & vbCrLf & _   
"Daily Price Master file:"& vbCrLf & Chr(9)& wbDPM.Name & vbCrLf & _   
"Output file:"& vbCrLf & Chr(9)& FinalOutput & vbCrLf & vbCrLf &"'OK' to 
continue?"& vbCrLf & vbCrLf & Chr(9)& _   
"press 'Ctlr + Break' to stop processing at any time", vbOKCancel,"Price 
Mapping Tool"& Space(5)&"HC&TS, 2015")<> vbOKThenGoTo exitSub   
   
With Application   
.ScreenUpdating =False   
.EnableEvents =False   
.Calculation = xlCalculationManual   
.EnableCancelKey = xlDisabled   
EndWith   
Set wbFPO = Workbooks.Add   
wbFPO.SaveAs Filename:=OFolder & FinalOutput, FileFormat:=51   
   
'* the thre following rows adds the column headers to the three worksheets   
fillColumnHeaders ws:=Sheets(1)   
If wbFPO.Worksheets.Count =1Then wbFPO.Worksheets.Add   
fillColumnHeaders ws:=Sheets(2)   
If wbFPO.Worksheets.Count =2Then wbFPO.Worksheets.Add   
fillColumnHeaders ws:=Sheets(3)   
   
Set wsFPO1 = wbFPO.Sheets(1)   
wsFPO1.Name ="Price records found"   
Set wsFPO2 = wbFPO.Sheets(2)   
wsFPO2.Name ="no Price records found"   
Set wsFPO3 = wbFPO.Sheets(3)   
wsFPO3.Name ="multiple Price records found"   
   
wbFPO.Save   
wbDPM.Activate   
   
Dim tStart AsDate'* start timer   
Dim tStop AsDate'* stop timer   
Dim tEnd AsDate'* estimated end time   
Dim tmidnite AsDate'* extra timer value if the process is started before and 
ends after midnight (next day)   
   
tStart = Format(Now(),"hh:mm:ss")   
tmidnite = Format(TimeValue("23:59:59"),"hh:mm:ss")   
   
   
Dim FPMrng As Range '* range will refer to the data in the Final Product 
Mapping file   
Dim DPMrng As Range '* range will refer to the data in the Daily Price Master 
file receiveed from Supplier   
Dim lstFPMRow AsLong   
Dim lstDPMRow AsLong   
Dim FPMRow AsLong   
Dim DPMRow AsLong   
Dim FPO1Row AsLong   
Dim FPO2Row AsLong   
Dim FPO3Row AsLong   
   
Set wsFPM = wbFPM.Sheets("Final Matched")   
Set wsDPM = wbDPM.Sheets(1)   
   
lstFPMRow = WorksheetFunction.Max(2, wbFPM.Sheets(1).Range("A"& 
Rows.Count).End(xlUp).Row)'* determine the last filled row of FPM file   
lstDPMRow = WorksheetFunction.Max(2, wbDPM.Sheets(1).Range("A"& 
Rows.Count).End(xlUp).Row)'* determine the last filled row of DPM file   
FPO1Row =1: FPO2Row =1: FPO3Row =1   
   
OnErrorGoTo err_handler   
Application.EnableCancelKey = xlErrorHandler   
showProgressForm   
For DPMRow =2To lstDPMRow   
If DPMRow Mod50=0And lstDPMRow - DPMRow >50Then   
tEnd = Format(time2End(lstDPMRow - DPMRow, DPMRow, tStart),"HH:mm:ss")   
EndIf   
Application.StatusBar ="PriceMapping Consolidation ... "& Format(DPMRow / 
lstDPMRow,"#0.0%")& IIf(DPMRow >=50,Space(5)&"estimated completion time 
remaining: "& tEnd,"")   
If DPMRow >=50Then updateProgressMessage barMessage:="estimated completion time 
remaining: "& tEnd   
updateProgessBarForm iCount:=DPMRow, iTotal:=lstDPMRow   
With wsFPM.Range("A:A")   
Set FPMrng =.Find(What:=(wsDPM.Cells(DPMRow,1).Value), LookIn:=xlValues, 
LookAt:=xlWhole)   
IfNot FPMrng IsNothingThen   
GoSub PMPartI   
Else   
GoSub PMPart2   
EndIf   
EndWith   
If PressedState =TrueThen   
SelectCase MsgBox("You have pressed 'Esc' or 'Cancel'!"& vbCrLf & vbCrLf & _   
"Do you wish to stop the Price Mapping process?", vbExclamation + vbYesNo + 
vbDefaultButton2,"STOP PRICEMAPPING PROCESS?")   
CaseIs= vbYes:ExitFor   
CaseElse   
PressedState =False   
EndSelect   
EndIf   
Next DPMRow   
Err.Clear   
OnErrorGoTo0   
uldpbf   
wsFPO1.Cells.Columns.AutoFit   
wsFPO2.Cells.Columns.AutoFit   
wsFPO3.Cells.Columns.AutoFit   
GoTo endRoutine   
   
PMPartI:   
'* Part I: Price Information for System Upload where Price information is 
available   
FPMRow = FPMrng.Row   
FPO1Row = FPO1Row +1   
wsFPO1.Cells(FPO1Row,"A").Value = wsFPM.Cells(FPMRow,"C").Value '* sku   
wsFPO1.Cells(FPO1Row,"B").Value =""'* ean   
wsFPO1.Cells(FPO1Row,"C").Value = wsFPM.Cells(FPMRow,"D").Value '* name   
wsFPO1.Cells(FPO1Row,"D").Value =""'* status   
wsFPO1.Cells(FPO1Row,"E").Value = wsDPM.Cells(DPMRow,"C").Value '* price   
wsFPO1.Cells(FPO1Row,"F").Value = wsDPM.Cells(DPMRow,"E").Value '* qty   
wsFPO1.Cells(FPO1Row,"G").Value =""'* specialrice   
If wsDPM.Cells(DPMRow,"D").Value < wsDPM.Cells(DPMRow,"C").Value Then _   
wsFPO1.Cells(FPO1Row,"G").Value = wsDPM.Cells(DPMRow,"D").Value '* specialrice  
 
wsFPO1.Cells(FPO1Row,"H").Value =""'* specialate start   
wsFPO1.Cells(FPO1Row,"I").Value =""'* specialate end   
Return   
   
PMPart2:   
'* Part II: New worksheet to populate all items from Sheet 1 where price 
information was not found in Sheet 2   
FPO2Row = FPO2Row +1   
wsFPO2.Cells(FPO2Row,"A").Value = wsDPM.Cells(DPMRow,"A").Value '* sku   
wsFPO2.Cells(FPO2Row,"B").Value =""'* ean   
wsFPO2.Cells(FPO2Row,"C").Value = wsDPM.Cells(DPMRow,"B").Value '* name   
wsFPO2.Cells(FPO2Row,"D").Value =""'* status   
wsFPO2.Cells(FPO2Row,"E").Value = wsDPM.Cells(DPMRow,"C").Value '* price   
wsFPO2.Cells(FPO2Row,"F").Value = wsDPM.Cells(DPMRow,"E").Value '* qty   
wsFPO2.Cells(FPO2Row,"G").Value =""'* specialrice   
wsFPO2.Cells(FPO2Row,"H").Value =""'* specialate start   
wsFPO2.Cells(FPO2Row,"I").Value =""'* specialate end   
Return   
   
PMPart3:   
'* Part III: New worksheet to populate all duplicate items from Sheet 1 where 
price information was not found in Sheet 2   
FPO3Row =1   
'* no code written for this   
Return   
   
err_handler:   
If Err.Number =18Then PressedState =True   
Err.Clear   
Resume   
   
endRoutine:   
wbFPO.Save   
tStop = Format(Now(),"hh:mm:ss")   
ProcOK =True   
GoTo exitSub   
   
exitNoGo:   
With Application   
.ScreenUpdating =True   
.EnableEvents =True   
.Calculation = xlCalculationAutomatic   
.EnableCancelKey = xlInterrupt   
EndWith   
Application.ScreenUpdating =True   
MsgBox "One or more data files was not found or is not available!", 
vbExclamation,"OPERATION ABORTED"   
   
exitSub:   
Application.ScreenUpdating =True   
Application.StatusBar =False   
Err.Clear   
OnErrorResumeNext   
wbFPM.Close False   
wbDPM.Close False   
Set wbFPM =Nothing   
Set wbDPM =Nothing   
Set wbFPO =Nothing   
Err.Clear   
OnErrorGoTo0   
SelectCase ProcOK   
CaseIs=True   
With wsTool   
.Range("B2").ClearContents   
.Range("B3").ClearContents   
.Range("B4").ClearContents   
.Range("B5").ClearContents   
EndWith   
MsgBox "Process started : "& tStart & vbCrLf & _   
"Process ended at: "& tStop & vbCrLf & _   
"Time elapsed: "& IIf(Hour(tStop)>= Hour(tStart), Format(tStop - 
tStart,"hh:mm:ss"), _   
Format((tmidnite - tStart)+ tStop,"hh:mm:ss")), vbInformation,"Price Mapping 
completed sucessfully!"   
CaseElse   
MsgBox "Price Mapping not completed!", vbExclamation,"Price Mapping failed!"   
EndSelect   
wbTool.Save   
EndSub   
   
PublicFunction findAcronym(tVal AsVariant)AsString   
Dim rng As Range   
With Sheets("Merchants").Range("B:B")   
Set rng =.Find(What:=tVal, LookIn:=xlValues, LookAt:=xlWhole)   
IfNot rng IsNothingThen findAcronym = rng.Offset(0,-1).Value   
EndWith   
EndFunction   
   
PublicFunction fillColumnHeaders(ws As Worksheet)   
Dim colNames AsVariant   
Dim i AsInteger   
Dim x AsInteger   
colNames = Split("sku|ean|name|status|price|quantity|specialrice|specialate 
start|specialate end|","|")   
With ws   
x = WorksheetFunction.Max(1, LBound(colNames))   
For i = LBound(colNames)To UBound(colNames)   
.Cells(1, x).Value = colNames(i)   
x = x +1   
Next i   
EndWith   
EndFunction   
   
PublicFunction timeElapsed(tStart AsDate)AsDouble   
Dim tStop AsDate   
Dim elapsed AsDate   
tStop = Time   
If Hour(tStop)< Hour(tStart)Then   
elapsed =(TimeSerial(23,59,59)- tStart)+ tStop   
Else   
elapsed = tStop - tStart   
EndIf   
timeElapsed = elapsed '* 86400   
EndFunction   
   
PublicFunction time2End(totalRows AsLong, processedRows AsLong, tStart 
AsDate)AsDouble   
If Minute(tStart)=0Or processedRows =0Then time2End =0:ExitFunction   
time2End =(totalRows * timeElapsed(tStart))/ processedRows   
EndFunction   


-- 
Are you =EXP(E:RT) or =NOT(EXP(E:RT)) in Excel? And do you wanna be? It’s 
=TIME(2,DO:IT,N:OW) ! Join official Facebook page of this forum @ 
https://www.facebook.com/discussexcel
 
FORUM RULES
 
1) Use concise, accurate thread titles. Poor thread titles, like Please Help, 
Urgent, Need Help, Formula Problem, Code Problem, and Need Advice will not get 
quick attention or may not be answered.
2) Don't post a question in the thread of another member.
3) Don't post questions regarding breaking or bypassing any security measure.
4) Acknowledge the responses you receive, good or bad.
5) Jobs posting is not allowed.
6) Sharing copyrighted material and their links is not allowed.
 
NOTE : Don't ever post confidential data in a workbook. Forum owners and 
members are not responsible for any loss.
--- 
You received this message because you are subscribed to the Google Groups "MS 
EXCEL AND VBA MACROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to excel-macros+unsubscr...@googlegroups.com.
To post to this group, send email to excel-macros@googlegroups.com.
Visit this group at https://groups.google.com/group/excel-macros.
For more options, visit https://groups.google.com/d/optout.


 
  

-- 
Are you =EXP(E:RT) or =NOT(EXP(E:RT)) in Excel? And do you wanna be? It’s 
=TIME(2,DO:IT,N:OW) ! Join official Facebook page of this forum @ 
https://www.facebook.com/discussexcel

FORUM RULES

1) Use concise, accurate thread titles. Poor thread titles, like Please Help, 
Urgent, Need Help, Formula Problem, Code Problem, and Need Advice will not get 
quick attention or may not be answered.
2) Don't post a question in the thread of another member.
3) Don't post questions regarding breaking or bypassing any security measure.
4) Acknowledge the responses you receive, good or bad.
5) Jobs posting is not allowed.
6) Sharing copyrighted material and their links is not allowed.

NOTE  : Don't ever post confidential data in a workbook. Forum owners and 
members are not responsible for any loss.
--- 
You received this message because you are subscribed to the Google Groups "MS 
EXCEL AND VBA MACROS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to excel-macros+unsubscr...@googlegroups.com.
To post to this group, send email to excel-macros@googlegroups.com.
Visit this group at https://groups.google.com/group/excel-macros.
For more options, visit https://groups.google.com/d/optout.

Reply via email to