Hi Alexis --
First off, sorry for not CC'ing the mailing list. Dunno how that happened; they're back in the loop.
I haven't played with workspace groups very much, so I'm going to take a guess about how they work. Let me know if I'm wrong. My guess is this: you have a collection of workspace groups, which is just a list of workspaces. When you switch to a group, this changes which workspace is visible on all the screens in some deterministic way -- e.g. switching to group ["foo", "bar", "baz"], the left screen is always showing workspace "foo", middle screen "bar", right screen "baz". (I don't care if this is the actual mapping -- so long as the mapping is always the same.)
Then, you have a window on one of the screens, and you always want it to be visible on that screen, even when you change workspace groups.
I have two more assumption, which is that you are only ever changing workspaces by changing workspace groups; and that any given workspace only appears in one group.
If all these assumptions are correct, then one solution to your problem would be simply to copy the window of interest to the appropriate workspaces (rather than using `copyToAll`). You can use `copy` to copy to a single other workspace, and `foldr` to copy to a collection of workspaces:
XMonad.Actions.CopyWindow XMonad.StackSet> :t foldr copy
foldr copy
:: (Eq i, Eq a, Eq s, Foldable t) =>
StackSet i l a s sd -> t i -> StackSet i l a s sd
All that remains for you is to find out which are the right workspaces to copy to. That involves checking which workspace is currently focused, and which other workspaces are in the same "position" in your groups. We can help you craft this code, though we'll need to see your existing config to give good advice.
Good luck,
~d