Contrôle du nom du classeur
Dans une cellule de votre modèle, un utilisateur doit saisir le nom à donner à un classeur. Le classeur en question sera ensuite enregistré sous ce nom par une macro. Le problème est que tous les caractères ne sont pas autorisés dans un nom de classeur. Supposons par exemple que vous souhaitiez interdire les caractères suivants :
\ : / * ? < > "
La solution consiste à effectuer le contrôle par la commande « Données … Validation », en sélectionnant l’option « Personnalisé » dans laquelle vous entrez la formule suivante, si le nom du classeur est en B1 :
=sommeprod(nbcar(substitue("\:/*?<>""";stxt(B1;ligne($1:$15);1);"")))=15*9
En fait, si le nom du classeur est « Ventes 2007 », la formule stxt(B1;ligne($1:$15);1) sera évaluée comme le vecteur :
{"V";"e";"n";"t";"e";"s";" ";"2";"0";"0";"7";"";"";"";""}
La fonction substitue() élimine de ce vecteur tous les caractères interdits : s’il y a au moins un caractère interdit dans le nom proposé, le total du nombre de caractères ne sera plus de 15 fois 9.
Remarque 1 – Les guillemets doublés représentent le caractère « " ». On aurait aussi pu utiliser la formulation "\:/*?<>" & car(34) comme premier argument.
Remarque 2 – La formule proposée ici suppose que le nom du classeur comporte au maximum 15 caractères et qu’il y a exactement 9 caractères interdits. Il faut le cas échéant adapter les valeurs de 15 et 9 en fonction des circonstances.
Remarque 3 – On peut noter l’utilisation tout à fait originale de la fonction stxt() qui, avec un second argument vectoriel, engendre du coup un résultat lui aussi vectoriel.
\ : / * ? < > "
La solution consiste à effectuer le contrôle par la commande « Données … Validation », en sélectionnant l’option « Personnalisé » dans laquelle vous entrez la formule suivante, si le nom du classeur est en B1 :
=sommeprod(nbcar(substitue("\:/*?<>""";stxt(B1;ligne($1:$15);1);"")))=15*9
En fait, si le nom du classeur est « Ventes 2007 », la formule stxt(B1;ligne($1:$15);1) sera évaluée comme le vecteur :
{"V";"e";"n";"t";"e";"s";" ";"2";"0";"0";"7";"";"";"";""}
La fonction substitue() élimine de ce vecteur tous les caractères interdits : s’il y a au moins un caractère interdit dans le nom proposé, le total du nombre de caractères ne sera plus de 15 fois 9.
Remarque 1 – Les guillemets doublés représentent le caractère « " ». On aurait aussi pu utiliser la formulation "\:/*?<>" & car(34) comme premier argument.
Remarque 2 – La formule proposée ici suppose que le nom du classeur comporte au maximum 15 caractères et qu’il y a exactement 9 caractères interdits. Il faut le cas échéant adapter les valeurs de 15 et 9 en fonction des circonstances.
Remarque 3 – On peut noter l’utilisation tout à fait originale de la fonction stxt() qui, avec un second argument vectoriel, engendre du coup un résultat lui aussi vectoriel.
0 Commentaire(s):
Enregistrer un commentaire
<< Accueil