This also works:
In[1]:= casePosition[list_, pat_] := Module[{positions, elements},
positions = Position[list, pat];
elements = Part[list, #] & /@ positions;
{elements, positions}
]
In[2]:= (* elements and their indices occupy the same level in the \
returned structure *)
casePosition[{11, 12, 13, 14}, x_ /; x > 12]
Out[2]= {{{13}, {14}}, {{3}, {4}}}
In[3]:= (* duplicated elements are reported separately *)
casePosition[{11, 13, 12, 13, 14}, x_ /; x > 12]
Out[3]= {{{13}, {13}, {14}}, {{2}, {4}, {5}}}
In[4]:= (* it could of course return exactly what you prescribed *)
casePosition[list_, pat_] := Module[{positions, elements},
positions = Position[list, pat];
elements = Part[list, #] & /@ positions;
{elements // Flatten, positions}
]
In[5]:= (* elements and their indices occupy the same level in the \
returned structure *)
casePosition[{11, 12, 13, 14}, x_ /; x > 12]
Out[5]= {{13, 14}, {{3}, {4}}}
In[6]:= (* duplicated elements are reported separately *)
casePosition[{11, 13, 12, 13, 14}, x_ /; x > 12]
Out[6]= {{13, 13, 14}, {{2}, {4}, {5}}}