Validation des données (c)
Définition
du nom Pays
J’avais défini, dans le dernier article, le nom Pays par :
=
decaler($E$1;0; $C$1): decaler($E$1;nbval(decaler($E:$E;0; $C$1))-1; $C$1)
Un lecteur du blog, Phillippe M, a suggéré que nous remplacions la définition
du nom Pays par :
=decaler($E$1;0;$C$1;nbval(decaler($E:$E;0;$C$1));1)
=decaler($E$1;0;$C$1;nbval(decaler($E:$E;0;$C$1));1)
C’est une excellente idée ! Il est vrai que j’avais
tendance à oublier le troisième et le quatrième argument que je n’ai pas l’habitude
d’enseigner à mes élèves du MBA quand je leur parle de la fonction Decaler : en
effet, ces deux derniers arguments peuvent créer de la confusion dans leur esprit
pour une fonctionnalité dont l’usage n’est quand même pas très fréquent.
Conflit
entre Continent et Pays
Il reste un petit problème… Dans la copie d’écran de l’article
précédent, nous avions sélectionné le continent Europe, puis le pays France. Qu’arrive-t-il
si nous sélectionnons maintenant un autre continent ? Nous aurons alors par
exemple Amérique en B1 et France en B2, ce qui est choquant
visuellement et, de plus nous donnera un résultat incohérent.
La façon la plus simple de résoudre ce problème est de
donner un format conditionnel à la cellule B2 qui affiche clairement que le
pays en B2 ne correspond pas au continent en B1. C’est ce que nous avons fait
dans la copie d’écran, en donnant un fond rouge au pays quand il y a un conflit
entre B1 et B2.
Remarque
– En fait, quand j’utilise cette
technique chez un client, je donne un fond noir à la cellule pour occulter
complètement le nom du pays et faire voir au client qu’il y a un problème. Il sait qu’il doit alors soit effacer B2, soit sélectionner un pays appartenant
bien au continent qu’il vient de choisir.
1 Commentaire(s):
Bonjour,
Dans le cas de figure proposé, qu'on peut appeler validation conditionnelle, j'utilise les techniques suivantes :
1) Chaque liste de pays est nommée et déclarée en tant que "tableau", ce qui règle le problème de l'évolutivité du nom en cas de rajout ou de suppression d'éléments. On évite surtout l'utilisation de cette fonction DECALER, toujours un peu délicate à l'usage. L'astuce consiste principalement à affecter à chaque tableau de pays le nom exact utilisé dans la liste des continents, c'est une condition impérative.
2) Dans la formule de validation de la cellule B2 (choix du pays) on inscrit alors la formule =INDIRECT(B1) et le problème est résolu.
3) Concernant l'incohérence possible, et gênante en effet, entre le nom du continent et le nom du pays je passe par VBA (on ne se refait pas !) en programmant l'événement Change de l'objet WorkSheet :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then Range("B2").Value = Range(Range("B1").Value).Cells(1).Value
End Sub
ou bien en code VBA simplifié :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then Range("B2")=Range(Range("B1").Cells(1)
End Sub
By cduigou, sur 11:41 AM
Enregistrer un commentaire
<< Accueil