diff --git a/.vscode/settings.json b/.vscode/settings.json
index 38a5306b5d41ad590e6f78981d6c59e71a6f8489..3a69a3f046bcf29fdf3f0b127f25b8e770965bfc 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -30,6 +30,7 @@
   "cSpell.language": "fr,en",
   "cSpell.words": [
     "carto",
+    "cnfs",
     "covid",
     "demarch",
     "facebook",
diff --git a/Dockerfile b/Dockerfile
index a0382ac55e64fc1b2397003394871e201c4fc43f..52b4cffe4ae1582a02de1a267b33c8bfcbdd95a6 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
 # Stage 0, based on Node.js, to build and compile Angular
 ARG DEPENDENCY_PROXY=
-FROM ${DEPENDENCY_PROXY}node:14.20-slim as build
+FROM ${DEPENDENCY_PROXY}node:14.20-slim AS build
 
 WORKDIR /app
 
diff --git a/src/app/admin/admin-routing.module.ts b/src/app/admin/admin-routing.module.ts
index eb4d6760c9aa67dd68ba273111fa7405b7306c4e..719de652e1a6340ccba74349660188014eb7cbed 100644
--- a/src/app/admin/admin-routing.module.ts
+++ b/src/app/admin/admin-routing.module.ts
@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
 import { RouterModule, Routes } from '@angular/router';
 import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component';
 import { DeletedStructuresComponent } from './components/deleted-structures/deleted-structures.component';
+import { EspaceCoopCNFSComponent } from './components/espace-coop-cnfs/espace-coop-cnfs.component';
 import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component';
 import { ManageEmployersComponent } from './components/manage-employers/manage-employers.component';
 import { ManageJobsComponent } from './components/manage-jobs/manage-jobs.component';
@@ -37,6 +38,10 @@ export const AdminRoutes = {
     link: 'admin/structure-list',
     path: 'structure-list',
   },
+  espaceCoopCNFS: {
+    link: 'admin/espaceCoopCNFS',
+    path: 'espaceCoopCNFS',
+  },
 };
 
 const routes: Routes = [
@@ -54,6 +59,7 @@ const routes: Routes = [
     path: AdminRoutes.structuresList.path,
     component: AdminStructuresListComponent,
   },
+  { path: AdminRoutes.espaceCoopCNFS.path, component: EspaceCoopCNFSComponent },
 ];
 @NgModule({
   imports: [RouterModule.forChild(routes)],
diff --git a/src/app/admin/admin.module.ts b/src/app/admin/admin.module.ts
index 498247f2f6367c7d748b96589e94b7b24ff08368..42cf737cf2148c7f2c685640836defc0efb65c9c 100644
--- a/src/app/admin/admin.module.ts
+++ b/src/app/admin/admin.module.ts
@@ -5,6 +5,7 @@ import { SharedModule } from '../shared/shared.module';
 import { AdminRoutingModule } from './admin-routing.module';
 import { ClaimStructureComponent } from './components/claim-structure/claim-structure.component';
 import { DeletedStructuresComponent } from './components/deleted-structures/deleted-structures.component';
+import { EspaceCoopCNFSComponent } from './components/espace-coop-cnfs/espace-coop-cnfs.component';
 import { ManageLockdownInfoComponent } from './components/lockdown-info/manage-lockdown-info.component';
 import { DeleteEmployerComponent } from './components/manage-employers/delete-employer/delete-employer.component';
 import { ManageEmployersComponent } from './components/manage-employers/manage-employers.component';
@@ -46,6 +47,7 @@ import { AdminStructuresListComponent } from './components/structures-list/admin
     ManageEmployersComponent,
     DeletedStructuresComponent,
     NavBarComponent,
+    EspaceCoopCNFSComponent,
   ],
   imports: [CommonModule, AdminRoutingModule, SharedModule, AgGridModule],
 })
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..efceca730865e1f0476ea00a395309e7ec64166f
--- /dev/null
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.html
@@ -0,0 +1,29 @@
+<app-admin-nav-bar />
+<div class="adminLayout">
+  <h2>CNFS présents dans Espace Coop sans compte Rés'in ({{ unregisteredCNFS.length }})</h2>
+  <ag-grid-angular
+    *ngIf="unregisteredCNFS.length"
+    class="ag-theme-alpine user-table"
+    rowSelection="multiple"
+    domLayout="autoHeight"
+    style="width: 100%"
+    [rowData]="unregisteredCNFS"
+    [columnDefs]="unregisteredColumnDefs"
+    [getRowHeight]="getRowHeight"
+  >
+  </ag-grid-angular>
+  <p *ngIf="!unregisteredCNFS.length">Tous les CNFS dans Espace Coop ont un compte Rés'in</p>
+
+  <h2>CNFS présents dans Rés'in mais pas dans Espace Coop ({{ cnfsNotInEspaceCoop.length }})</h2>
+  <ag-grid-angular
+    *ngIf="cnfsNotInEspaceCoop.length"
+    class="ag-theme-alpine user-table"
+    rowSelection="multiple"
+    domLayout="autoHeight"
+    style="width: 100%"
+    [rowData]="cnfsNotInEspaceCoop"
+    [columnDefs]="notInEspaceCoopColumnDefs"
+  >
+  </ag-grid-angular>
+  <p *ngIf="!cnfsNotInEspaceCoop.length">Tous les CNFS dans Rés'in sont présents dans Espace Coop</p>
+</div>
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4c0e3abc9d9377a2b993bc89e3edf99283de7893
--- /dev/null
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.spec.ts
@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { EspaceCoopCNFSComponent } from './espace-coop-cnfs.component';
+
+describe('EspaceCoopCnfsComponent', () => {
+  let component: EspaceCoopCNFSComponent;
+  let fixture: ComponentFixture<EspaceCoopCNFSComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      declarations: [EspaceCoopCNFSComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(EspaceCoopCNFSComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..39d13ae1116238d5238acb12655ffbd75b3ce5ee
--- /dev/null
+++ b/src/app/admin/components/espace-coop-cnfs/espace-coop-cnfs.component.ts
@@ -0,0 +1,90 @@
+import { Component, OnInit } from '@angular/core';
+import { ColDef } from 'ag-grid-community';
+import { User } from '../../../models/user.model';
+import { AdminService } from '../../services/admin.service';
+import { EspaceCoopCNFS } from './../../../models/espaceCoopCNFS.model';
+
+@Component({
+  selector: 'app-espace-coop-cnfs',
+  templateUrl: './espace-coop-cnfs.component.html',
+  styleUrls: ['../../admin.scss'],
+})
+export class EspaceCoopCNFSComponent implements OnInit {
+  public unregisteredCNFS: EspaceCoopCNFS[] = [];
+  public unregisteredColumnDefs: ColDef<EspaceCoopCNFS>[] = [
+    {
+      headerName: 'Nom',
+      field: 'name',
+      sortable: true,
+      sort: 'asc',
+      resizable: true,
+    },
+    {
+      headerName: 'Employeur',
+      field: 'employer',
+      sortable: true,
+      // Case insensitive alphabetical order
+      comparator: (a, b) => a.toLowerCase().localeCompare(b.toLowerCase()),
+      flex: 1,
+      resizable: true,
+    },
+    {
+      headerName: 'Structures',
+      field: 'structures',
+      cellRenderer: (param) => param.data.structures.join('<br/>'),
+      flex: 1,
+      resizable: true,
+    },
+    {
+      headerName: 'Email',
+      field: 'email',
+      flex: 1,
+      resizable: true,
+    },
+    {
+      headerName: 'Téléphone',
+      field: 'phone',
+      resizable: true,
+    },
+  ];
+
+  public cnfsNotInEspaceCoop: User[] = [];
+  public notInEspaceCoopColumnDefs: ColDef<User>[] = [
+    {
+      headerName: 'Prénom',
+      field: 'name',
+      sortable: true,
+    },
+    {
+      headerName: 'Nom',
+      field: 'surname',
+      sort: 'asc',
+    },
+    {
+      headerName: 'Email',
+      field: 'email',
+    },
+    {
+      headerName: 'Téléphone',
+      field: 'phone',
+    },
+  ];
+
+  public getRowHeight(params: { data: EspaceCoopCNFS }): number {
+    const structures = params.data.structures || [];
+    if (structures.length <= 1) return 40;
+    return structures.length * 40;
+  }
+
+  constructor(private adminService: AdminService) {}
+  ngOnInit(): void {
+    this.adminService.getAllEspaceCoopCNFS().subscribe((espaceCoopCNFS) => {
+      this.unregisteredCNFS = espaceCoopCNFS.filter((member) => !member.hasAccount);
+      this.adminService.getAllResinCNFS().subscribe((resinCNFS) => {
+        this.cnfsNotInEspaceCoop = resinCNFS.filter(
+          (resin) => !espaceCoopCNFS.some((coop) => coop.email === resin.email)
+        );
+      });
+    });
+  }
+}
diff --git a/src/app/admin/components/manage-employers/manage-employers.component.ts b/src/app/admin/components/manage-employers/manage-employers.component.ts
index a1e1b5c4f90e53cbe1e95efc42fca7dc9ff233f2..94b05ddab61f2753d394cd40f3ec28b4a0136556 100644
--- a/src/app/admin/components/manage-employers/manage-employers.component.ts
+++ b/src/app/admin/components/manage-employers/manage-employers.component.ts
@@ -247,6 +247,8 @@ export class ManageEmployersComponent implements OnInit {
   }
 
   public getRowHeight(params): number {
-    return params.data.users ? (params.data.users.length != 0 ? params.data.users.length * 40 : 40) : 40;
+    const users = params.data.users || [];
+    if (users.length <= 1) return 40;
+    return users.length * 40;
   }
 }
diff --git a/src/app/admin/components/manage-jobs/manage-jobs.component.ts b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
index 53e3cd480580d58cba28c8ea1a559bb6754c1b27..51175803a8ff3400b7932b641aea9b27ff23c76e 100644
--- a/src/app/admin/components/manage-jobs/manage-jobs.component.ts
+++ b/src/app/admin/components/manage-jobs/manage-jobs.component.ts
@@ -439,10 +439,14 @@ export class ManageJobsComponent implements OnInit {
   }
 
   public getUsersRowHeight(params): number {
-    return params.data.users && params.data.users.length !== 0 ? params.data.users.length * 40 : 40;
+    const users = params.data.users || [];
+    if (users.length <= 1) return 40;
+    return users.length * 40;
   }
 
   public getJobsRowHeight(params): number {
-    return params.data.jobs && params.data.jobs.length !== 0 ? params.data.jobs.length * 40 : 40;
+    const jobs = params.data.jobs || [];
+    if (jobs.length <= 1) return 40;
+    return jobs.length * 40;
   }
 }
diff --git a/src/app/admin/components/manage-users/manage-users.component.ts b/src/app/admin/components/manage-users/manage-users.component.ts
index 5390bee31a2a712d8ac263d70a57e136e442fd4e..ad7d513991c543ae74d5b906c195f9bfbffe0ef7 100644
--- a/src/app/admin/components/manage-users/manage-users.component.ts
+++ b/src/app/admin/components/manage-users/manage-users.component.ts
@@ -325,7 +325,8 @@ export class ManageUsersComponent {
   }
 
   public getRowHeight(params): number {
-    return params.data.structures?.length * 40 || 40;
+    const structures = params.data.structures || [];
+    return structures.length !== 0 ? structures.length * 40 : 40;
   }
 
   public onGridReady(params: GridReadyEvent, status: UsersStatus): void {
diff --git a/src/app/admin/components/nav-bar/nav-bar.component.html b/src/app/admin/components/nav-bar/nav-bar.component.html
index dcc0fe9dfac180726e0f7fe3cbfe800c756574af..6b2045c757274d3e4cd458a315f315a8b8112307 100644
--- a/src/app/admin/components/nav-bar/nav-bar.component.html
+++ b/src/app/admin/components/nav-bar/nav-bar.component.html
@@ -31,6 +31,11 @@
       [style]="buttonTypeEnum.Secondary"
       (click)="router.navigateByUrl(routes.employersList.link)"
     />
+    <app-button
+      [text]="'CNFS Espace Coop'"
+      [style]="buttonTypeEnum.Secondary"
+      (click)="router.navigateByUrl(routes.espaceCoopCNFS.link)"
+    />
     <app-button
       [text]="'Infos covid'"
       [style]="buttonTypeEnum.Secondary"
diff --git a/src/app/admin/services/admin.service.ts b/src/app/admin/services/admin.service.ts
index 7041279ec68fb5b85d24525ac0f1314d4f19a487..805b79d836b940155381698353015ad4925444e6 100644
--- a/src/app/admin/services/admin.service.ts
+++ b/src/app/admin/services/admin.service.ts
@@ -2,6 +2,7 @@ import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
 import { Employer } from '../../models/employer.model';
+import { EspaceCoopCNFS } from '../../models/espaceCoopCNFS.model';
 import { Job } from '../../models/job.model';
 import { JobGroup } from '../../models/jobGroup.model';
 import { Structure } from '../../models/structure.model';
@@ -208,4 +209,12 @@ export class AdminService {
   public restoreDeletedStructure(structureId: string): Observable<void> {
     return this.http.post<void>(`${this.baseUrl}/restoreDeletedStructure/${structureId}`, {});
   }
+
+  public getAllEspaceCoopCNFS() {
+    return this.http.get<EspaceCoopCNFS[]>(`${this.baseUrl}/espaceCoopCNFS`);
+  }
+
+  public getAllResinCNFS() {
+    return this.http.get<User[]>(`${this.baseUrl}/resinCNFS`);
+  }
 }
diff --git a/src/app/models/espaceCoopCNFS.model.ts b/src/app/models/espaceCoopCNFS.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..db152fe42010ec7eb8aed3d78e78374927b1039a
--- /dev/null
+++ b/src/app/models/espaceCoopCNFS.model.ts
@@ -0,0 +1,8 @@
+export interface EspaceCoopCNFS {
+  name: string;
+  email?: string;
+  phone?: string;
+  employer: string;
+  structures: string[];
+  hasAccount: boolean;
+}