Droite, gauche, droite, gauche...

Un truc tout bête auquel je viens juste de penser...

Vous connaissez surement STXT qui permet de renvoyer une chaîne de caractère à partir de la position de début et de la longueur.

Mais comment faire l'inverse : partir de la fin de la chaîne pour renvoyer un certain nombre de caractères.
Par exemple, retourner le nombre de secondes - ici 24 - qui se trouvent juste avant les millisecondes ? Il faut donc partir de la fin de la chaîne.
Methode 1 sans test "," union : 19:23:05 - Tps : 00:00:24:49

Une solution est de faire une soustraction avec la fonction NBCAR dans une fonction STXT :
=STXT(A4;NBCAR(A4)-4;2)
qui se lit : en considérant la chaîne de caractère en A4, on part de (nombre de caractères total - 4) et on retourne 2 caractères. Le 4 correspond à 5 caractères moins 1 caractère.

En fait, on peut aussi faire quelque chose de similaire avec =GAUCHE(DROITE()) :
=GAUCHE(DROITE(A4;5);2)
Prends les 5 derniers caractères de A4 (DROITE), puis, prends les 2 premiers caractères du résultat (GAUCHE)

Les deux formules sont identiques en terme de résultats, mais je trouve la deuxième un peu plus facile à comprendre, car on ne doit pas faire de calcul pour déterminer le 4 (5-1). A chaque fois, mon cerveau fait un mini-nœud sur le -1.

Vous pouvez télécharger le fichier ici.

A bientôt.

Gaëtan

Pourquoi est-ce si lent de protéger une feuille avec Excel VBA?

Etant en train d'optimiser des (gros) fichiers, un des problèmes était lié à la protection des feuilles. En fait, avec l'arrivée de 2013, le mécanisme de cryptage a été amélioré, et donc, il est plus lent...Ca ne se sent pas sur une feuille, mais sur une vingtaine de feuilles, c'est remarquable (plusieurs secondes).

Résultat : on repense complétement la manière dont les feuilles doivent être protégées.

Souvent, en informatique, il y a une solution simple et évidente, mais pas optimale, et ensuite, il faut se creuser les neurones pour l'optimiser, et là, ça devient complexe !!!

A bientôt...

Gaetan

Créer un "Tout" dans une formule sommeprod

Suite à la question d'un client, voici comment créer une SOMMEPROD qui permettent de prendre en compte un critère "(Tout)", un peu à la manière d'un tableau croisé dynamique.

Pour cela, on va utiliser la formule SI et ensuite créer une série de {VRAI;VRAI;VRAI}, ce qui va donc nous donner ceci :

=SOMMEPROD((Tableau1[Montant])*(SI(D1="(Tout)";Tableau1[Ville];D1)=Tableau1[Ville]))

Donc, si D1 est égal à "Tout"; alors on tester [Ville]=[Ville] et donc : {VRAI;VRAI;VRAI;VRAI}

Voici un petit fichier qui illustre cette question.

A bientôt.
Gaetan