Calendrier amovible et inversion jour-mois Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'201
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 30 juin 2018, 15:20

Bonjour,

Avec un petit délai (j'étais absent hier...) deux remarques qui me paraissent utiles :

La fonction NO.SEMAINE ne renvoie pas le numéro de semaine selon la norme ISO applicables en Europe, elle est donc à proscrire car elle te renverra un faux numéro en moyenne 3 années sur 7.
Avec 2013, tu disposes d'une fonction dédiée au renvoi du numéro de semaine ISO, c'est cette fonction qu'il faut utiliser.

Le problème des dates se pose lorsque l'on utilise un TextBox pour saisir la date, au sortir de la TextBox, on a une donnée de type texte (par définition) qui, ayant un format de date identifiable par VBA fait l'objet d'une conversion automatique en date, mais 'sauvage' en quelque sorte car VBA utilise alors ses paramètre natifs, américains, et si le jour est inférieur à 13 l'on a toutes les chances de se retrouver avec une inversion jour/mois.
On l'évite en général en opérant explicitement la conversion, ce qui force VBA à passer par les paramètres FR de reconnaissance de date. Ce qui fonctionne lorsqu'on le fait lors de l'affectation à la cellule destinataire.
Difficulté si l'on n'affecte pas directement à la cellule mais qu'on passe par l'affectation à un tableau qui sera ensuite affecté à la plage. VBA trouve alors l'occasion d'opérer une nouvelle reconversion... On y pallie dans un tel cas par une double conversion : conversion en date, et conversion de la date en entier Long (forme sous laquelle sont stockées les dates dans Excel). Le souci d'inversion est alors définitivement évité, mais si la cellule d'affectation n'a pas préalablement un format de date, il conviendra de penser à l'en doter lors de l'affectation, car Excel ne pourra plus l'opérer alors automatiquement.
Evidemment, une solution de saisie de date qui évite la TextBox comme mode de saisie, permettra aussi d'éviter ce problème d'inversion !
Or en fait, en reprenant des éléments d'un fichier de Leakim utilisant lui même un module de Tatiak, tu disposes d'un module calendrier qui te renvoie une donnée de type Date... Et de fait ta saisie ne se fait pas dans la TextBox mais dans le module Calendrier. La TextBox ne devrait te servir que pour l'affichage au regard de l'utilisateur... ainsi tu utiliserais pleinement ton module.

Il est vrai que pour cela il conviendrait alors que lors de la saisie, tu stockes la valeur Date issue du calendrier dans une variable Date (déclarée au niveau module). Lors de l'affectation, tu utilises la variable Date et non la TextBox.
Cela n'a pas d'impact sur ta boucle d'affectation car tu affectes individuellement les cellules et tu peux donc aussi bien affecter la valeur d'une variable en lieu et place du contenu d'une TextBox à ta colonne date.
Au-delà, pour simplifier le code, en utilisant un tableau... cela demanderait un peu plus de modification. Mais pour la date, il est dommage de produire une valeur date en saisie et d'être ensuite réduit à opérer une conversion ! ;;)

Cordialement et bonne journée.
1 membre du forum aime ce message.
p
pierrebastres
Membre habitué
Membre habitué
Messages : 66
Appréciation reçue : 1
Inscrit le : 14 octobre 2017
Version d'Excel : 2013 FRANCAIS

Message par pierrebastres » 30 juin 2018, 16:18

Merci MFerrand pour ta réponse détaillée, et le conseil supplémentaire sur N0.SEMAINE.
Bonne journée et à très vite.

Pierre
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message