Ok, I have implemented a solution.
It consist to create an new param system called "usergroupauth" with value "all".
After, in an user you will override this param called usergroupauth and you put a list of group id like 1,2,3 for an example or just 3 if you need.
It's more complicated but not so much, you need to modify prepareQueryBeforeCount method in this file core/model/modx/processors/security/user/getlist.class.php
with this code :
public function prepareQueryBeforeCount(xPDOQuery $c) {
$c->leftJoin('modUserProfile','Profile');
$query = $this->getProperty('query','');
if (!empty($query)) {
$c->where(array('modUser.username:LIKE' => '%'.$query.'%'));
$c->orCondition(array('Profile.fullname:LIKE' => '%'.$query.'%'));
$c->orCondition(array('Profile.email:LIKE' => '%'.$query.'%'));
$c->orCondition(array('modUser.id:LIKE' => '%'.$query.'%'));
}
$userGroup = $this->getProperty('usergroup',0);
if (empty($userGroup)){
$userGroup=$this->modx->getOption('usergroupauth');
}
if (!empty($userGroup) AND $userGroup != 'all') {
$groups = explode(',',$userGroup);
$c->innerJoin('modUserGroupMember','UserGroupMembers');
foreach($groups as $group){
$c->orCondition(array(
'UserGroupMembers.user_group' => $group
));
}
}
return $c;
}
Disconnect and reconnect this user manager, and the list user will be filtered with this new param defined.