diff --git a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
index ba8efc2066d9bbabe99ba81eebb747798464d1cc..db55345fe3b063f2d90db7dcf047176ed4058f5d 100644
--- a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
+++ b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
@@ -84,6 +84,8 @@ public class UserConverter implements Converter<UserDto, User> {
 
     public static final String GROUP_IDENTIFIER_KEY = "Groupe de profils";
 
+    public static final String INTERNAL_CODE_KEY = "Code interne";
+
     /**
      * Used for described user's blocked duration
      */
@@ -91,6 +93,7 @@ public class UserConverter implements Converter<UserDto, User> {
 
     public static final String SITE_CODE = "Code du site";
 
+
     private final GroupRepository groupRepository;
 
     private final AddressConverter addressConverter;
@@ -112,6 +115,7 @@ public class UserConverter implements Converter<UserDto, User> {
         userLogbookData.put(TYPE_KEY, LogbookUtils.getValue(user.getType().toString()));
         userLogbookData.put(STATUS_KEY, LogbookUtils.getValue(user.getStatus().toString()));
         userLogbookData.put(SUBROGEABLE_KEY, LogbookUtils.getValue(user.isSubrogeable()));
+        userLogbookData.put(INTERNAL_CODE_KEY, LogbookUtils.getValue(user.getInternalCode()));
         userLogbookData.put(OTP_KEY, LogbookUtils.getValue(user.isOtp()));
         userLogbookData.put(SITE_CODE, LogbookUtils.getValue(user.getSiteCode()));
         AddressDto address = user.getAddress() != null ? user.getAddress() : new AddressDto();
diff --git a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/domain/User.java b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/domain/User.java
index a4a6c0360103ac519dbea37afd33d15ca86ad5dc..70624477eca382fe684295b78d33ff8548184da6 100644
--- a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/domain/User.java
+++ b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/domain/User.java
@@ -130,5 +130,7 @@ public class User extends CustomerIdDocument implements BaseIdentifierDocument {
 
     private Address address = new Address();
 
+    private String internalCode;
+
     private String siteCode;
 }
diff --git a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
index 8c3cdee1fef5d859ace6ab623adda3a6922d26ad..58bb1b907c665ca51c506998eac5ff1058031ec9 100644
--- a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
+++ b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
@@ -559,6 +559,10 @@ public class UserInternalService extends VitamUICrudService<UserDto, User> {
                     }
                     addressService.processPatch(user.getAddress(), CastUtils.toMap(entry.getValue()), logbooks);
                     break;
+                case "internalCode" :
+                    logbooks.add(new EventDiffDto(UserConverter.INTERNAL_CODE_KEY, user.getInternalCode(), entry.getValue()));
+                    user.setInternalCode(CastUtils.toString(entry.getValue()));
+                    break;
                 case "siteCode" :
                     logbooks.add(new EventDiffDto(UserConverter.SITE_CODE, user.getSiteCode(), entry.getValue()));
                     user.setSiteCode(CastUtils.toString(entry.getValue()));
diff --git a/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java b/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
index 8168f89bc773730089b51508b1003473149302db..b5d6bbf17eab09d5074073390af83b449d7087a7 100644
--- a/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
+++ b/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
@@ -338,6 +338,7 @@ public final class UserInternalServiceIntegTest extends AbstractLogbookIntegrati
                 + "\"Type\":\"NOMINATIVE\","
                 + "\"Statut\":\"ENABLED\","
                 + "\"Subrogeable\":\"false\","
+                + "\"Code interne\":\"\","
                 + "\"OTP\":\"true\","
                 + "\"Code du site\":\"001\","
                 + "\"Nom de la rue\":\"rue faubourg poissoniére\","
diff --git a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/UserDto.java b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/UserDto.java
index 4a8b95c1e954ecaa35ebed82c74ea7cdbb25e457..8bb8fd7455b7bca855dec7f46a4447e3ea6108af 100644
--- a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/UserDto.java
+++ b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/domain/UserDto.java
@@ -111,5 +111,7 @@ public class UserDto extends CustomerIdDto {
 
     private AddressDto address = new AddressDto();
 
+    private String internalCode;
+
     private String siteCode;
 }
diff --git a/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts b/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
index 53229d086638bc91a50483af88fca0f97daa59d7..d29e5a322d482e706235fcca2844496baebc6590 100644
--- a/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
+++ b/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
@@ -57,6 +57,7 @@ export interface User extends Id {
   lastConnection: string;
   readonly: boolean;
   address: Address;
+  internalCode?: string;
   siteCode: string;
 
 }
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
index 0ef17962765357bebe8eeffdf4c8dfc9a4ad6884..317cf395157f91f643259e975227139673004cdb 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
@@ -157,8 +157,15 @@
       <div class="content">
         <h2 i18n="@@userCreateAddressTitle">Coordonnées</h2>
 
-        <ng-container formGroupName="address">
+        <ng-container *ngIf="customer.addressType === ADDRESS_TYPE.INTERNAL_CODE">
+          <div>
+            <vitamui-common-input class="field-street" required formControlName="internalCode" maxlength="20" placeholder="Code interne"
+              i18n-placeholder="@@userCreateInternalCodeInputPlaceholder">
+            </vitamui-common-input>
+          </div>
+        </ng-container>
 
+        <ng-container formGroupName="address" *ngIf="!customer.addressType || customer.addressType === ADDRESS_TYPE.POSTAL">
           <div>
             <vitamui-common-input class="field-street" [required]="!addressEmpty" formControlName="street" maxlength="250" placeholder="N° et nom de rue"
               i18n-placeholder="@@userCreateStreetInputPlaceholder">
@@ -196,16 +203,16 @@
               </div>
             </mat-form-field>
           </div>
-        </ng-container>
 
-        <div>
-          <vitamui-common-input class="field-site-code" formControlName="siteCode" placeholder="Code du site"
-                                i18n-placeholder="user create siteCode@@userCreateSiteCode">
-          </vitamui-common-input>
-        </div>
+          <div>
+            <vitamui-common-input class="field-site-code" formControlName="siteCode" placeholder="Code du site"
+                                  i18n-placeholder="user create siteCode@@userCreateSiteCode">
+            </vitamui-common-input>
+          </div>
+        </ng-container>
 
         <div class="actions">
-          <button type="button" class="btn primary" cdkStepperNext [disabled]="form.get('address').pending || form.get('address').invalid"
+          <button type="button" class="btn primary" cdkStepperNext [disabled]="thirdStepInvalid()"
             i18n="user create next step otp@@userCreateNextStepOtpButton">
             Continuer en gérant l'authentification
           </button>
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
index df9764f85a234717fbab47bcf6587efeeaabe820..3149340d8b4457a354baefde84fce9e442f55d37 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
@@ -35,6 +35,7 @@
  * knowledge of the CeCILL-C license and that you accept its terms.
  */
 import { Subscription } from 'rxjs';
+import { AddressType } from 'ui-frontend-common';
 import {
   AdminUserProfile, AuthService, ConfirmDialogService, Customer, isRootLevel, OtpState, ProfileSelection
 } from 'ui-frontend-common';
@@ -69,21 +70,32 @@ const emailValidator: RegExp = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?
 })
 export class UserCreateComponent implements OnInit, OnDestroy {
 
-  form: FormGroup;
-  formEmail: FormGroup;
-  customer: Customer;
-  groups: ProfileSelection[] = [];
-  groupName: string;
-  stepIndex = 0;
-  connectedUserInfo: AdminUserProfile;
-  addressEmpty = true;
-  creating = false;
+  public form: FormGroup;
+
+  public formEmail: FormGroup;
+
+  public customer: Customer;
+
+  public groups: ProfileSelection[] = [];
+
+  public groupName: string;
+
+  public stepIndex = 0;
+
+  public connectedUserInfo: AdminUserProfile;
+
+  public addressEmpty = true;
+
+  public creating = false;
+
+  public ADDRESS_TYPE = AddressType;
 
   // stepCount is the total number of steps and is used to calculate the advancement of the progress bar.
   // We could get the number of steps using ViewChildren(StepComponent) but this triggers a
   // "Expression has changed after it was checked" error so we instead manually define the value.
   // Make sure to update this value whenever you add or remove a step from the  template.
   private stepCount = 4;
+
   private keyPressSubscription: Subscription;
 
   constructor(
@@ -112,6 +124,11 @@ export class UserCreateComponent implements OnInit, OnDestroy {
       domain: [this.customer.emailDomains[0]]
     });
 
+    let internalCode: string;
+    if (this.customer.addressType === AddressType.INTERNAL_CODE) {
+      internalCode = this.customer.internalCode;
+    }
+
     this.form = this.formBuilder.group(
       {
         enabled: true,
@@ -141,6 +158,7 @@ export class UserCreateComponent implements OnInit, OnDestroy {
           city: [null],
           country: ['FR']
         }),
+        internalCode: [internalCode],
         siteCode: [null],
       },
       { validator: UserValidators.missingPhoneNumber }
@@ -221,6 +239,13 @@ export class UserCreateComponent implements OnInit, OnDestroy {
       this.form.get('enabled').invalid;
   }
 
+  public thirdStepInvalid(): boolean {
+    if (!this.customer.addressType || this.customer.addressType === AddressType.POSTAL) {
+      return this.form.get('address').pending || this.form.get('address').invalid;
+    }
+    return this.form.get('internalCode').pending || this.form.get('internalCode').invalid;
+  }
+
   passGroupStep() {
     this.stepIndex = LAST_STEP_INDEX;
   }
diff --git a/ui/ui-identity/src/test/java/fr/gouv/vitamui/identity/service/CustomerServiceTest.java b/ui/ui-identity/src/test/java/fr/gouv/vitamui/identity/service/CustomerServiceTest.java
index f041b38a1383ddc0933c27b6d2a7bfd656c063e0..46f918be803d4d8ae963036d5d2591cd5e32bef7 100644
--- a/ui/ui-identity/src/test/java/fr/gouv/vitamui/identity/service/CustomerServiceTest.java
+++ b/ui/ui-identity/src/test/java/fr/gouv/vitamui/identity/service/CustomerServiceTest.java
@@ -7,6 +7,7 @@ import static org.mockito.ArgumentMatchers.any;
 import java.util.Arrays;
 import java.util.Optional;
 
+import fr.gouv.vitamui.commons.api.enums.AddressType;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -119,6 +120,7 @@ public class CustomerServiceTest extends UIIdentityServiceTest<CustomerDto> {
         customer.setOtp(OtpEnum.OPTIONAL);
         customer.setLanguage(LanguageDto.FRENCH);
         customer.setOwners(Arrays.asList(new OwnerDto()));
+        customer.setAddressType(AddressType.POSTAL);
         customer.setAddress(new AddressDto("street", "zipCode", "city", "country"));
         customer.setDefaultEmailDomain("@vitamui.com");
         customer.setPasswordRevocationDelay(1);