\value gibt (normalerweise) den Zähler zurück, nicht seinen Wert. Für den Wert brauchst du \number oder \the (und bei tikz mit overlay immer zweimal kompilieren):
Code:
\documentclass{article}
\usepackage{tikz,lipsum}
\begin{document}
\part{abc}
\tikz[overlay,remember picture] \filldraw[red] ([xshift=\dimexpr-\number\value{part}cm+0.5cm,yshift=-5cm]current page.north east) rectangle ++(-2,1);
\lipsum
\newpage
\part{abc}
\tikz[overlay,remember picture] \filldraw[red] ([xshift=\dimexpr-\the\value{part}cm+0.5cm,yshift=-5cm]current page.north east) rectangle ++(-2,1);
\lipsum
\newpage
\part{abc}
\tikz[overlay,remember picture] \filldraw[red] ([xshift=\dimexpr-\the\value{part}cm+0.5cm,yshift=-5cm]current page.north east) rectangle ++(-2,1);
\lipsum
\end{document}
Lesezeichen