Ajout de validation des données à des plages Excel
La bibliothèque JavaScript Excel fournit des API pour autoriser votre complément à ajouter la validation automatique des données aux tableaux, colonnes, lignes et autres plages dans un classeur. Pour comprendre les concepts et la terminologie de la validation des données, consultez les articles suivants sur la façon dont les utilisateurs ajoutent la validation des données via l’interface utilisateur Excel.
- Application d’une validation des données aux cellules
- Informations supplémentaires sur la validation des données
- Description et exemples de validation des données dans Excel
Contrôle par programme de validation des données
La propriété Range.dataValidation
, qui récupère un objet DataValidation, constitue le point d’entrée pour le contrôle par programmation de la validation des données dans Excel. Il existe cinq propriétés pour l’objet DataValidation
:
rule
— Définit ce qui constitue des données valides pour la plage. Voir DataValidationRule.errorAlert
: spécifie si une erreur s’affiche si l’utilisateur entre des données non valides et définit le texte, le titre et le style de l’alerte. par exemple,information
,warning
etstop
. Voir DataValidationErrorAlert.prompt
: spécifie si une invite s’affiche lorsque l’utilisateur pointe sur la plage et définit le message d’invite. Voir DataValidationPrompt.ignoreBlanks
: spécifie si la règle de validation des données s’applique aux cellules vides de la plage. La valeur par défaut esttrue
.type
— Identification en lecture seule du type de validation, telle que WholeNumber, Date, TextLength, etc. Elle est définie indirectement lorsque vous définissez larule
propriété .
Remarque
La validation des données ajoutées par programme se comporte comme celle ajoutée manuellement. Notez que la validation des données est déclenchée uniquement si l’utilisateur entre une valeur dans une cellule ou copie directement et colle une cellule à partir d’un autre emplacement dans le classeur en choisissant l’option de collage valeurs. Si l’utilisateur copie une cellule et effectue un simple coller dans une plage avec validation des données, la validation n’est pas déclenchée.
Créer les règles de validation
Pour ajouter la validation des données à une plage, votre code doit définir la propriété rule
de l’objet DataValidation
dans Range.dataValidation
. Cela saisit un objet DataValidationRule contenant les sept propriétés facultatives. Une seule de ces propriétés peut être présente dans un objet DataValidationRule
. La propriété que vous incluez détermine le type de validation.
Règles de validation Basic et DateTime
Les trois premières propriétés DataValidationRule
(c'est-à-dire les types de règles de validation) prennent un objet BasicDataValidation comme valeur.
wholeNumber
— Nécessite un nombre entier en plus de toute autre validation spécifiée par l’objetBasicDataValidation
.decimal
— Nécessite un nombre décimal en plus de toute autre validation spécifiée par l’objetBasicDataValidation
.textLength
— Applique les détails de validation de l’objetBasicDataValidation
à la longueur de la valeur de la cellule.
Voici un exemple de création d’une règle de validation. Notez ce qui suit à propos de ce code.
- est
operator
l’opérateurgreaterThan
binaire . Chaque fois que vous utilisez un opérateur binaire, la valeur que l’utilisateur essaie d’entrer dans la cellule est l’opérande gauche et la valeur spécifiée dansformula1
est l’opérande droite. Par conséquent cette règle indique qu’uniquement les nombres entiers supérieurs à 0 sont valides. - Le
formula1
est un nombre codé en dur. Lors de la création du code, si vous ne savez pas quelle valeur indiquer, vous pouvez également utiliser une formule Excel (comme chaîne) pour la valeur. Par exemple, « = A3 » et « = SUM(A4,B5) » peuvent également être des valeurs deformula1
.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
wholeNumber: {
formula1: 0,
operator: Excel.DataValidationOperator.greaterThan
}
};
await context.sync();
});
Voir BasicDataValidation pour obtenir la liste des autres opérateurs binaires.
Il existe également deux opérateurs ternaires : between
et notBetween
. Pour les utiliser, vous devez spécifier la propriété formula2
facultative. Les valeursformula1
et formula2
sont les opérandes englobantes. La valeur que l’utilisateur essaie d’entrer dans la cellule est la troisième opérande (évaluée). Voici un exemple d’utilisation de l’opérateur « Between ».
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
decimal: {
formula1: 0,
formula2: 100,
operator: Excel.DataValidationOperator.between
}
};
await context.sync();
});
Les deux propriétés de règle suivantes prennent un objetDateTimeDataValidation comme valeur.
date
time
La structure de l’objet DateTimeDataValidation
est similaire à celle de BasicDataValidation
: ce dernier a les propriétés formula1
, formula2
, et operator
. Il est aussi utilisé de la même façon. La différence est que vous ne pouvez pas utiliser un nombre dans les propriétés de formule, mais vous pouvez entrer une chaîne 8606 ISO datetime (ou une formule Excel). Voici un exemple qui définit des valeurs valides comme des dates de la première semaine d’avril 2022.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.rule = {
date: {
formula1: "2022-04-01",
formula2: "2022-04-08",
operator: Excel.DataValidationOperator.between
}
};
await context.sync();
});
Type de règle de validation de liste
Utilisez la propriété list
dans l’objet DataValidationRule
pour spécifier que les seules valeurs valides sont celles d’une liste de remise. Voici un exemple. Notez ce qui suit à propos de ce code.
- Il part du principe qu’il existe une feuille de calcul nommée « Noms » et que les valeurs dans la plage « A1:A3 » sont des noms.
- La propriété
source
indique la liste des valeurs valides. L’argument de chaîne fait référence à une plage de cellules contenant les noms. Vous pouvez également affecter une liste délimitée par des virgules ; par exemple : « Sue, Ricky, Florence ». - La propriété
inCellDropDown
indique si un contrôle de liste déroulante s’affiche dans la cellule lorsque l’utilisateur la sélectionne. Si elle est définie surtrue
, alors la flèche déroulante s’affiche avec la liste des valeurs desource
.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
let nameSourceRange = context.workbook.worksheets.getItem("Names").getRange("A1:A3");
range.dataValidation.rule = {
list: {
inCellDropDown: true,
source: "=Names!$A$1:$A$3"
}
};
await context.sync();
})
Type de règle de validation personnalisée
Utilisez la propriété custom
dans l’objet DataValidationRule
pour spécifier une formule de validation personnalisée. Voici un exemple. Notez ce qui suit à propos de ce code.
- Il part du principe qu’il existe un tableau de deux colonnes avec des colonnes nom athlète et commentaires dans les colonnes A et B de la feuille de calcul.
- Pour réduire le niveau de détail dans la colonnecommentaires, il rend les données qui incluent le nom de l’athlète invalides.
SEARCH(A2,B2)
renvoie la position de départ, dans la chaîne dans B2, de la chaîne dans A2. Si A2 n’est pas contenue dans B2, elle ne renvoie pas de nombre.ISNUMBER()
renvoie une valeur booléenne. La propriétéformula
indique que les données valides pour la colonne commentaires sont des données qui n’incluent pas la chaîne dans la colonne nom athlète.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let commentsRange = sheet.tables.getItem("AthletesTable").columns.getItem("Comments").getDataBodyRange();
commentsRange.dataValidation.rule = {
custom: {
formula: "=NOT(ISNUMBER(SEARCH(A2,B2)))"
}
};
await context.sync();
});
Créer des alertes d’erreur de validation
Vous pouvez créer une alerte d’erreur personnalisée qui s’affiche lorsqu’un utilisateur tente d’entrer des données non valides dans une cellule. Voici un exemple simple. Notez ce qui suit à propos de ce code.
- La propriété
style
détermine si l’utilisateur reçoit une alerte d’information, un avertissement ou une alerte « Stop ». Seule l'alertestop
empêche l’utilisateur d’ajouter des données non valides. Les fenêtres contextuelles pourwarning
etinformation
ont des options qui permettent à l’utilisateur d’entrer les données non valides de toute façon. - La propriété
showAlert
est définie par défaut surtrue
. Cela signifie qu’Excel affiche une alerte générique (de typestop
), sauf si vous créez une alerte personnalisée qui définit ou définitshowAlert
false
un message, un titre et un style personnalisés. Ce code définit un message et un titre personnalisés.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.errorAlert = {
message: "Sorry, only positive whole numbers are allowed",
showAlert: true, // The default is 'true'.
style: Excel.DataValidationAlertStyle.stop,
title: "Negative or Decimal Number Entered"
};
// Set range.dataValidation.rule and optionally .prompt here.
await context.sync();
});
Pour plus d’informations, voir DataValidationErrorAlert.
Créer des demandes de validation
Vous pouvez créer une invite de commandes instructive qui s’affiche lorsqu’un utilisateur survole ou sélectionne une cellule à laquelle la validation des données a été appliquée. Voici un exemple.
await Excel.run(async (context) => {
let sheet = context.workbook.worksheets.getActiveWorksheet();
let range = sheet.getRange("B2:C5");
range.dataValidation.prompt = {
message: "Please enter a positive whole number.",
showPrompt: true, // The default is 'false'.
title: "Positive Whole Numbers Only."
};
// Set range.dataValidation.rule and optionally .errorAlert here.
await context.sync();
});
Pour plus d’informations, voir DataValidationPrompt.
Supprimer la validation des données d’une plage
Pour supprimer la validation des données d’une plage, appelez la méthode Range.dataValidation.clear().
myrange.dataValidation.clear()
La plage que vous désactivez ne sera pas nécessairement exactement la même plage qu’une plage dans laquelle vous avez ajouté la validation des données. Si ce n’est pas le cas, uniquement les cellules des deux plages qui se chevauchent, le cas échéant, sont effacées.
Remarque
La désactivation de la validation des données à partir d’une plage efface également une validation des données qu’un utilisateur a ajoutée manuellement à la plage.