Monsieur Excel
Pour tout savoir faire sur Excel !

14 avril 2019

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)

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 Anonymous cduigou, sur 11:41 AM  

Enregistrer un commentaire

<< Accueil