diff --git a/Documentation_fichier_Yaml.md b/Documentation_fichier_Yaml.md
index 62f46a8a928bf194234e9c3a2e92a02295e055ef..48a9a01497fcfe7ba21a507b3b063ca18c6cb715 100644
--- a/Documentation_fichier_Yaml.md
+++ b/Documentation_fichier_Yaml.md
@@ -587,6 +587,18 @@ ici le contenu de la première ligne deuxième colonne est lié au varaible/comp
       firstRowLine: 2
 ```
 
+Si l'on veut faire référence à des lignes entre la ligne d'en-tête et la première ligne de données, on peut faire référence à la colonne par le nom de :l'en-tête de colonne plutôt que par le numméro de la colonne. En ce cas onn utilise le champs _headerName_.
+
+```yaml
+        - rowNumber: 11
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: max_value
+          exportHeader: "H2O_max"
+
+```
+
 *columns* est la partie dans laquelle nous décrirons toutes les colonnes et leurs types de données que nous attendons 
 dans chaque colonne du fichier CSV (pour l'exemple utilisé ici c'est pour les données du fichier nomDonnées.csv):
 
diff --git a/src/main/java/fr/inra/oresing/model/Configuration.java b/src/main/java/fr/inra/oresing/model/Configuration.java
index 6a27e2a07f16a1bae23246fa2394fb0c2278382e..70fc0eac6fd316e1741894b89defc8137795ddcc 100644
--- a/src/main/java/fr/inra/oresing/model/Configuration.java
+++ b/src/main/java/fr/inra/oresing/model/Configuration.java
@@ -1,6 +1,7 @@
 package fr.inra.oresing.model;
 
 import com.google.common.base.Splitter;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.MoreCollectors;
 import fr.inra.oresing.checker.*;
@@ -190,10 +191,19 @@ public class Configuration {
     public static class HeaderConstantDescription {
         int rowNumber;
         int columnNumber;
+        String headerName;
         VariableComponentKey boundTo;
         String exportHeader;
+
+        public int getColumnNumber(ImmutableList<String> headerRows) {
+            if (headerName != null && headerRows.contains(headerName)) {
+                return headerRows.indexOf(headerName) + 1;
+            }
+            return columnNumber;
+        }
     }
 
+
     @Getter
     @Setter
     @ToString
diff --git a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
index 98b3a1a1501069c7be1c4c4c88cea32d3922b5b6..8b48f2f8d39ec581427f20d92c71003ad98a2a71 100644
--- a/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
+++ b/src/main/java/fr/inra/oresing/rest/ApplicationConfigurationService.java
@@ -202,7 +202,7 @@ public class ApplicationConfigurationService {
             verifyDatatypeDataGroupsContainsExistingVariables(builder, dataTypeDescription, variables, variableOccurrencesInDataGroups);
 
             verifyDatatypeBindingToExistingVariableComponent(builder, variables, variableOccurrencesInDataGroups);
-            verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, variables);
+            verifyDatatypeBindingToExistingVariableComponent(builder, dataTypeDescription, dataType, variables);
         }
         configuration.setRequiredAuthorizationsAttributes(List.copyOf(requiredAuthorizationsAttributesBuilder.build()));
 
@@ -267,8 +267,11 @@ public class ApplicationConfigurationService {
         }
     }
 
-    private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Configuration.DataTypeDescription dataTypeDescription, Set<String> variables) {
-        for (Configuration.ColumnBindingDescription columnBindingDescription : dataTypeDescription.getFormat().getColumns()) {
+    private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Configuration.DataTypeDescription dataTypeDescription, String dataType, Set<String> variables) {
+
+        final Configuration.FormatDescription format = dataTypeDescription.getFormat();
+        verifyFormatDescriptionIsValid(builder, format, dataType);
+        for (Configuration.ColumnBindingDescription columnBindingDescription : format.getColumns()) {
             VariableComponentKey boundTo = columnBindingDescription.getBoundTo();
             String variable = boundTo.getVariable();
             if (variables.contains(variable)) {
@@ -285,6 +288,38 @@ public class ApplicationConfigurationService {
         }
     }
 
+    private void verifyFormatDescriptionIsValid(ConfigurationParsingResult.Builder builder, Configuration.FormatDescription format, String dataType) {
+        format.getConstants()
+                .forEach(headerConstantDescription -> {
+                    final int columnNumber = headerConstantDescription.getColumnNumber();
+                    final String headerName = headerConstantDescription.getHeaderName();
+                    final int rowNumber = headerConstantDescription.getRowNumber();
+                    final int headerLine = format.getHeaderLine();
+                    if (rowNumber == headerLine) {
+                        builder.recordCsvSameHeaderLineAndFirstRowLineForConstantDescription(dataType);
+                    }
+                    final int firstRowLine = format.getFirstRowLine();
+                    if (rowNumber >= firstRowLine) {
+                        builder.recordCsvTooBigRowLineForConstantDescription(dataType);
+                    }
+                    if (rowNumber < 1) {
+                        builder.recordCsvTooLittleRowLineForConstantDescription(dataType);
+                    }
+                    if (rowNumber < headerLine && rowNumber < 1) {
+                        builder.recordCsvMissingRowLineForConstantDescription(dataType);
+                    } else if (rowNumber > headerLine && columnNumber < 1 && headerName == null) {
+                        builder.recordCsvMissingColumnNumberOrHeaderNameForConstantDescription(dataType);
+                    } else {
+                        final VariableComponentKey boundTo = headerConstantDescription.getBoundTo();
+                        if (boundTo == null) {
+                            builder.recordCsvMissingBoundToForConstantDescription(dataType);
+                        } else if (headerConstantDescription.getExportHeader() == null) {
+                            builder.recordCsvMissingExportHeaderNameForConstantDescription(dataType);
+                        }
+                    }
+                });
+    }
+
     private void verifyDatatypeBindingToExistingVariableComponent(ConfigurationParsingResult.Builder builder, Set<String> variables, Multiset<String> variableOccurrencesInDataGroups) {
         variables.forEach(variable -> {
             int count = variableOccurrencesInDataGroups.count(variable);
diff --git a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
index 8d5cf59e91d01476ed9a5c8370ef12b2b3a6cd01..f73238e41367503b8ad765573d2ca47404c3717b 100644
--- a/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
+++ b/src/main/java/fr/inra/oresing/rest/ConfigurationParsingResult.java
@@ -9,7 +9,10 @@ import fr.inra.oresing.rest.validationcheckresults.DefaultValidationCheckResult;
 import lombok.Value;
 
 import javax.annotation.Nullable;
-import java.util.*;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
 @Value
 public class ConfigurationParsingResult {
@@ -19,6 +22,10 @@ public class ConfigurationParsingResult {
     @Nullable
     Configuration result;
 
+    public static Builder builder() {
+        return new Builder();
+    }
+
     public boolean isValid() {
         return getValidationCheckResults().stream().allMatch(ValidationCheckResult::isSuccess);
     }
@@ -28,14 +35,10 @@ public class ConfigurationParsingResult {
         return result;
     }
 
-    public static Builder builder() {
-        return new Builder();
-    }
-    
     public static class Builder {
 
         private final List<ValidationCheckResult> validationCheckResults = new LinkedList<>();
-        
+
         public Builder recordError(String message) {
             return recordError(message, ImmutableMap.of());
         }
@@ -370,5 +373,47 @@ public class ConfigurationParsingResult {
                     "reference", reference)
             );
         }
+
+        public Builder recordCsvSameHeaderLineAndFirstRowLineForConstantDescription(String dataType) {
+            return recordError("sameHeaderLineAndFirstRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvTooBigRowLineForConstantDescription(String dataType) {
+            return recordError("tooBigRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvTooLittleRowLineForConstantDescription(String dataType) {
+            return recordError("tooLittleRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingRowLineForConstantDescription(String dataType) {
+            return recordError("missingRowLineForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingColumnNumberOrHeaderNameForConstantDescription(String dataType) {
+            return recordError("missingColumnNumberOrHeaderNameForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingBoundToForConstantDescription(String dataType) {
+            return recordError("missingBoundToForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
+
+        public Builder recordCsvMissingExportHeaderNameForConstantDescription(String dataType) {
+            return recordError("missingExportHeaderNameForConstantDescription", ImmutableMap.of(
+                    "dataType", dataType
+            ));
+        }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/fr/inra/oresing/rest/OreSiService.java b/src/main/java/fr/inra/oresing/rest/OreSiService.java
index 86e4b87783b358fa9f4302216101bd5c87f73510..f562a091b6b73ba25dfa293bcf1391ece4abecea 100644
--- a/src/main/java/fr/inra/oresing/rest/OreSiService.java
+++ b/src/main/java/fr/inra/oresing/rest/OreSiService.java
@@ -4,62 +4,16 @@ import com.google.common.base.Charsets;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Predicate;
-import com.google.common.collect.BiMap;
-import com.google.common.collect.HashBiMap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableMultiset;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSetMultimap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Maps;
-import com.google.common.collect.MoreCollectors;
-import com.google.common.collect.Ordering;
-import com.google.common.collect.SetMultimap;
-import com.google.common.collect.Sets;
+import com.google.common.collect.*;
 import com.google.common.primitives.Ints;
 import fr.inra.oresing.OreSiTechnicalException;
-import fr.inra.oresing.checker.CheckerFactory;
-import fr.inra.oresing.checker.DateLineChecker;
-import fr.inra.oresing.checker.FloatChecker;
-import fr.inra.oresing.checker.IntegerChecker;
-import fr.inra.oresing.checker.InvalidDatasetContentException;
-import fr.inra.oresing.checker.LineChecker;
-import fr.inra.oresing.checker.Multiplicity;
-import fr.inra.oresing.checker.ReferenceLineChecker;
-import fr.inra.oresing.checker.ReferenceLineCheckerConfiguration;
+import fr.inra.oresing.checker.*;
 import fr.inra.oresing.groovy.CommonExpression;
 import fr.inra.oresing.groovy.Expression;
 import fr.inra.oresing.groovy.GroovyContextHelper;
 import fr.inra.oresing.groovy.StringGroovyExpression;
-import fr.inra.oresing.model.Application;
-import fr.inra.oresing.model.Authorization;
-import fr.inra.oresing.model.BinaryFile;
-import fr.inra.oresing.model.BinaryFileDataset;
-import fr.inra.oresing.model.ColumnPresenceConstraint;
-import fr.inra.oresing.model.Configuration;
-import fr.inra.oresing.model.Data;
-import fr.inra.oresing.model.Datum;
-import fr.inra.oresing.model.LocalDateTimeRange;
-import fr.inra.oresing.model.ReferenceColumn;
-import fr.inra.oresing.model.ReferenceColumnSingleValue;
-import fr.inra.oresing.model.ReferenceColumnValue;
-import fr.inra.oresing.model.ReferenceDatum;
-import fr.inra.oresing.model.ReferenceValue;
-import fr.inra.oresing.model.VariableComponentKey;
-import fr.inra.oresing.persistence.AuthenticationService;
-import fr.inra.oresing.persistence.BinaryFileInfos;
-import fr.inra.oresing.persistence.DataRepository;
-import fr.inra.oresing.persistence.DataRow;
-import fr.inra.oresing.persistence.Ltree;
-import fr.inra.oresing.persistence.OreSiRepository;
-import fr.inra.oresing.persistence.ReferenceValueRepository;
-import fr.inra.oresing.persistence.SqlPolicy;
-import fr.inra.oresing.persistence.SqlSchema;
-import fr.inra.oresing.persistence.SqlSchemaForApplication;
-import fr.inra.oresing.persistence.SqlService;
+import fr.inra.oresing.model.*;
+import fr.inra.oresing.persistence.*;
 import fr.inra.oresing.persistence.roles.OreSiRightOnApplicationRole;
 import fr.inra.oresing.persistence.roles.OreSiUserRole;
 import fr.inra.oresing.rest.validationcheckresults.DateValidationCheckResult;
@@ -95,19 +49,7 @@ import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -572,9 +514,8 @@ public class OreSiService {
 
             Datum constantValues = new Datum();
             readPreHeader(formatDescription, constantValues, linesIterator);
-
             ImmutableList<String> columns = readHeaderRow(linesIterator);
-            readPostHeader(formatDescription, linesIterator);
+            readPostHeader(formatDescription, columns, constantValues, linesIterator);
 
             Stream<Data> dataStream = Streams.stream(csvParser)
                     .map(buildCsvRecordToLineAsMapFn(columns))
@@ -1084,13 +1025,26 @@ public class OreSiService {
 
     /**
      * read some post header as example line, units, min and max values for each columns
-     *
-     * @param formatDescription
-     * @param linesIterator
      */
-    private void readPostHeader(Configuration.FormatDescription formatDescription, Iterator<CSVRecord> linesIterator) {
-        int lineToSkipAfterHeader = formatDescription.getFirstRowLine() - formatDescription.getHeaderLine() - 1;
-        Iterators.advance(linesIterator, lineToSkipAfterHeader);
+    private void readPostHeader(Configuration.FormatDescription formatDescription,  ImmutableList<String> headerRow, Datum constantValues, Iterator<CSVRecord> linesIterator) {
+        ImmutableSetMultimap<Integer, Configuration.HeaderConstantDescription> perRowNumberConstants =
+                formatDescription.getConstants().stream()
+                        .collect(
+                                ImmutableSetMultimap.toImmutableSetMultimap(
+                                        Configuration.HeaderConstantDescription::getRowNumber,
+                                        Function.identity()
+                                )
+                        );
+        for (int lineNumber = formatDescription.getHeaderLine()+1; lineNumber < formatDescription.getFirstRowLine(); lineNumber++) {
+            CSVRecord row = linesIterator.next();
+            ImmutableSet<Configuration.HeaderConstantDescription> constantDescriptions = perRowNumberConstants.get(lineNumber);
+            constantDescriptions.forEach(constant -> {
+                int columnNumber = constant.getColumnNumber(headerRow);
+                String value = row.get(columnNumber - 1);
+                VariableComponentKey boundTo = constant.getBoundTo();
+                constantValues.put(boundTo, value);
+            });
+        }
     }
 
     private ImmutableMap<VariableComponentKey, Expression<String>> getDefaultValueExpressions(Configuration.DataTypeDescription dataTypeDescription, Map<String, String> requiredAuthorizations) {
diff --git a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
index f339d17e5c366245f6cd235074c32eba8c33409a..e6380d50b55d28eaca3e2ce08a2268ebc863e633 100644
--- a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
+++ b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
@@ -352,7 +352,7 @@ public class ApplicationConfigurationServiceTest {
 
     @Test
     public void testInvalidFormat() {
-        ConfigurationParsingResult configurationParsingResult = parseYaml("firstRowLine: 2", "firstRowLine: pas_un_chiffre");
+        ConfigurationParsingResult configurationParsingResult = parseYaml("firstRowLine: 3", "firstRowLine: pas_un_chiffre");
         Assert.assertFalse(configurationParsingResult.isValid());
         ValidationCheckResult onlyError = Iterables.getOnlyElement(configurationParsingResult.getValidationCheckResults());
         log.debug(onlyError.getMessage());
diff --git a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
index ca59fbc3635d0e80d9b310046c43b0fb28a9c91e..375cd4e03f30684a202e88bca75eea988520761e 100644
--- a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
+++ b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
@@ -739,6 +739,8 @@ public class OreSiResourcesTest {
                             .cookie(authCookie)
                             .accept(MediaType.APPLICATION_JSON))
                     .andExpect(status().isOk())
+                    .andExpect(jsonPath("$.rows[0].values.CO2.min_value", IsEqual.equalTo("300")))
+                    .andExpect(jsonPath("$.rows[0].values.CO2.max_value", IsEqual.equalTo("700")))
 //                    .andExpect(content().json(expectedJson))
                     .andReturn().getResponse().getContentAsString();
 
diff --git a/src/test/resources/data/acbb/acbb.yaml b/src/test/resources/data/acbb/acbb.yaml
index 6ac07a6c7fe16ab8952545b6de5f91b25ffa12c0..914b6522cc8296dd20f246316ed56c70a5558173 100644
--- a/src/test/resources/data/acbb/acbb.yaml
+++ b/src/test/resources/data/acbb/acbb.yaml
@@ -123,6 +123,26 @@ compositeReferences:
         parentKeyColumn: "site"
 dataTypes:
   flux_tours:
+    validations:
+      check_CO2_value:
+        description: check value in range
+        checker:
+          name: GroovyExpression
+          params:
+            groovy:
+              expression: >
+                String stringValue = datum.CO2.value;
+                if(stringValue.equals("") || stringValue.equals("-9999")){
+                    return true;
+                }
+                    Float value = stringValue.equals("")?null:Float.parseFloat(stringValue);
+                Float minValue = datum.CO2.min_value.equals("")?null:Float.parseFloat(datum.CO2.min_value);
+                Float maxValue = datum.CO2.max_value.equals("")?null:Float.parseFloat(datum.CO2.max_value);
+                Boolean isValid = true;
+                isValid = minValue==null  || minValue<value;
+                isValid = isValid && (maxValue!=null || value<=maxValue);
+                return isValid
+
     data:
       site:
         components:
@@ -163,6 +183,12 @@ dataTypes:
               name: Reference
               params:
                 refType: unites
+          min_value:
+            checker:
+              name: Float
+          max_value:
+            checker:
+              name: Float
       H2O:
         components:
           value:
@@ -176,6 +202,12 @@ dataTypes:
               name: Reference
               params:
                 refType: unites
+          min_value:
+            checker:
+              name: Float
+          max_value:
+            checker:
+              name: Float
       ZL:
         components:
           value:
@@ -306,6 +338,30 @@ dataTypes:
             variable: parcelle
             component: name
           exportHeader: "Parcelle"
+        - rowNumber: 10
+          columnNumber: 3
+          boundTo:
+            variable: CO2
+            component: min_value
+          exportHeader: "CO2_min"
+        - rowNumber: 11
+          columnNumber: 3
+          boundTo:
+            variable: CO2
+            component: max_value
+          exportHeader: "CO2_max"
+        - rowNumber: 10
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: min_value
+          exportHeader: "H2O_min"
+        - rowNumber: 11
+          headerName: H2O
+          boundTo:
+            variable: H2O
+            component: max_value
+          exportHeader: "H2O_max"
       headerLine: 8
       firstRowLine: 12
       columns:
diff --git a/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv b/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
index bcd1bf33d96578ff54cbef8c30c4716fefb4c216..a7f6bf3670a8db0f75b07b0d77fd709f38fcc4b3 100644
--- a/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
+++ b/src/test/resources/data/foret/data/climatDuSol/journalier/fougeres-fou_4_swc_j_01-01-1999_31-01-1999.csv
@@ -9,7 +9,7 @@ numero de repetition max : ;6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 Date;SWC_1_10;SWC_2_10;SWC_3_10;SWC_4_10;SWC_1_30;SWC_2_30;SWC_3_30;SWC_4_30;SWC_1_55;SWC_2_55;SWC_3_55;SWC_4_55;SWC_1_80;SWC_2_80;SWC_3_80;SWC_4_80;SWC_5_80;SWC_6_80;SWC_1_120;SWC_2_120;SWC_3_120;SWC_4_120;SWC_5_120;SWC_6_120;SWC_1_160;SWC_2_160;SWC_3_160;SWC_4_160;SWC_1_200;SWC_2_200;SWC_3_200;SWC_4_200;SWC_1_250;SWC_2_250;SWC_3_250
 min :  ;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- max : ;1000;2000;3000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+max : ;1000;2000;3000;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 01/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
 02/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
 03/01/1999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999;-9999
@@ -40,4 +40,4 @@ min :  ;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 28/01/1999;42;34;38;47;32;37;-9999;39;45;40;44;40;46;45;38;42;39;40;47;47;38;49;44;38;41;46;45;40;41;46;41;51;50;47;-9999
 29/01/1999;42;34;37;47;31;38;-9999;39;45;40;44;40;47;45;38;42;39;40;48;48;37;43;45;38;42;46;45;40;42;46;41;52;50;47;-9999
 30/01/1999;41;34;37;47;31;38;-9999;39;44;40;44;40;47;45;38;41;39;40;48;47;35;42;45;38;41;44;45;40;41;45;41;52;49;46;-9999
-31/01/1999;41;33;37;47;31;37;-9999;39;44;39;44;40;46;45;38;41;39;40;48;47;35;42;43;38;41;44;45;40;41;45;41;53;49;45;-9999
+31/01/1999;41;33;37;47;31;37;-9999;39;44;39;44;40;46;45;38;41;39;40;48;47;35;42;43;38;41;44;45;40;41;45;41;53;49;45;-9999
\ No newline at end of file
diff --git a/src/test/resources/data/validation/fake-app.yaml b/src/test/resources/data/validation/fake-app.yaml
index 208988dd0c3fe9fe9d85cbdc9309439247aa0767..1e3b8a3a79dd299c1e3d0b87dc4eb652bbf4228d 100644
--- a/src/test/resources/data/validation/fake-app.yaml
+++ b/src/test/resources/data/validation/fake-app.yaml
@@ -152,8 +152,8 @@ dataTypes:
             variable: localization
             component: site
           exportHeader: "Site"
-      headerLine: 1
-      firstRowLine: 2
+      headerLine: 2
+      firstRowLine: 3
       columns:
         - header: "typeSite"
           boundTo:
diff --git a/ui2/src/locales/en.json b/ui2/src/locales/en.json
index c95f48aa2e0f5f197380ae62afdfb59a070a9b87..af2714c3fdc926c9f0387fa487bf5bad50cf807b 100644
--- a/ui2/src/locales/en.json
+++ b/ui2/src/locales/en.json
@@ -162,7 +162,14 @@
     "overlappingpublishedversion": "There is a deposited version in the deposit dates have an overlapping period with the deposited version. <code> {overlapingFiles] </code>",
     "duplicateLineInReference": "In the repository file {file}, line {lineNumber} has the same id {duplicateKey} as lines {otherLines}",
     "duplicateLineInDatatype": "In data file {file}, line {lineNumber} has the same identifier {duplicateKey} as lines {otherLines}",
-    "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}"
+    "missingParentLineInRecursiveReference": "In repository file {references} the id value {missingReferencesKey} for parent does not exist. Accepted values ${knownReferences}",
+    "tooBigRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be less than the data row.",
+    "tooLittleRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the row number must be positive.",
+    "missingRowLineForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a line number.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify a row number or header name.",
+    "missingBoundToForConstantDescription": "In the format->constant section of the dataType {dataType} you must fill in the boundTo section.",
+    "missingExportHeaderNameForConstantDescription": "In the format->constant section of dataType {dataType} you must specify an exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "In the format->constant section of dataType {dataType} the header row must not be equal to the data row."
   },
   "referencesManagement": {
     "actions": "Actions",
diff --git a/ui2/src/locales/fr.json b/ui2/src/locales/fr.json
index 418044b757f6b97bc4605715547731c501044179..dc51af71ddd533f6425b84798a669ca0be633ec6 100644
--- a/ui2/src/locales/fr.json
+++ b/ui2/src/locales/fr.json
@@ -162,7 +162,14 @@
     "overlappingpublishedversion": "Il existe une version déposée dans les dates de dépôt ont une période chevauchante avec la version déposée. <code>{overlapingFiles]</code>",
     "duplicatedLineInReference": "Dans le fichier du référentiel {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
     "duplicatedLineInDatatype": "Dans le fichier de données {file}, la ligne {lineNumber} a le même identifiant {duplicateKey} que les lignes {otherLines}",
-    "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le parent n'existe pas. Valeurs acceptées {knownReferences}"
+    "missingParentLineInRecursiveReference": "Dans le fichier du référentiel {references} la valeur d'identifiant {missingReferencesKey} pour le    parent n'existe pas. Valeurs acceptées {knownReferences}",
+    "tooBigRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être inférieur    à celui de la ligne de données.",
+    "tooLittleRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} le numéro de ligne doit être positif.",
+    "missingRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne.",
+    "recordCsvMissingColumnNumberOrHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez indiquer un numéro de ligne ou un nom d'en-tête.",
+    "missingBoundToForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez remplir la section boundTo.",
+    "missingExportHeaderNameForConstantDescription": "Dans la section format->constant du dataType {dataType} vous devez spécifier un exportHeaderName.",
+    "sameHeaderLineAndFirstRowLineForConstantDescription": "Dans la section format->constant du dataType {dataType} la ligne d'en-tête ne doit pas être egale à la ligne de données."
   },
   "referencesManagement": {
     "actions": "Actions",