Pbs de Dates format Europe/U.S. avec utilisation des ARRAYS
Bonjour,
Dans le fichier suivant, j'ai un tableau de données en A1:E49.
Dans le Range("I4:M49"), c'est le même tableau qu'en A1:E49, mais sans les lignes dont l'article est "Saint Emilion", "Sancerre" ou "Saumur".
Ma "Sub Try1()" sort le même résultat que le tableau en Range("I4:M49"), sauf que le programme élimine les lignes vides ("O2:S31") . Mon souci c'est que pour certaines dates (les dates qui ont un alignement à droite de la cellule), le format est inversé (je ne suis plus en DD/MM/YYYY mais en MM/DD/YYYY).
Ma "Sub Try2()" compare juste les dates entre mon Tableau en ("I4:M49") et mon Tableau en ("O2:S31") et vérifie que ce sont bien les mêmes, et met "GOOD" ou "PAS GOOD" suivant qu'elles sont identiques ou non.
Ce qui est étonnant, c'est que lorsque je fais tourner ma "Sub Try3()", qui prend les dates du Tableau en Range("A1:E49"), les mets dans un Array, et les retranscris en Range("V2:V49"), je ne pas ce problème de format de dates DD/MM/YYYY vs MM/DD/YYYY, pourtant je fais exactement la même chose que dans ma "Sub Try1()" : je copie des dates dans un Array à partir de cellules excel, pour ensuite les retranscrire dans d'autres cellules...
Mon problème est que je n'arrive pas à forcer toutes mes dates de mon Range("O2:S31") au format Européen DD/MM/YYYY. Qqn sait comment résoudre ce problème ? Merci : )
Bonjour,
Une piste ici peut être? =>
https://forum.excel-pratique.com/astuces/vba-le-format-date-dans-excel-a-l-international-159848
Pierre
Bonjour Pierre,
Le maître à parlé, pourtant je suis un peu dubitatif sur le lien cité...
Le :
Le retour étant un entier double...me laissant un peu perplexe ! Personnellement en bon mécréant, s'agissant d'un Array je préfère le charger avec Value2 quitte à devoir re-spécifier le format de destination...
Cependant le codage de notre ami étant un peu "prout", c'est difficile : Ces Array Variant sont à peu près d'un usage aussi agréable à manipuler qu'une trottinette avec un moteur de Solex...
A+
Merci Pierre, je vais y jeter un oeil ! :)
Heu Galopin, je ne vois pas où mon code est Prout ?! Peux-tu être plus spécifique ?
Bah... il faut être humble et modeste. Je le suis, mais je me fais régulièrement tancer par des interlocuteurs qui se sentent agressés. Ce n'est pas une critique suffisante ou prétentieuse, juste une constatation. Même si de votre coté vous êtes bien content d'en être arrivé déjà (seulement) à ce résultat.
Bon c'est du code de débutant, je comprends, je l'ai été aussi... Pour autant je ne suis pas sur que le lien de Pierre va combler ton besoin de solution.
Je n'ai pas forcément tout compris dans ton classeur, mébon c'est pas grave : Au moins il montre bien ton problème à défaut de comprendre à quoi il sert.
Donc je n'ai pas repris toute la macro (puisque j'ai pas tout compris) Je ne me suis intéressé qu'à la macro1, et encore seulement à Arr1.
Il y aurait sans doute autant (et même plus) à dire sur Arr2 parce que Redim... Offset... Pfff ! ça fait beaucoup pour une macro de 10 lignes. Mébon c'est comme les strings ça va avec la mode...
Tu vas remplacer les premières lignes de ta Macro1 sans changer ce qui suit... Et tu verras que ton problème de correspondance de date est résolu. Après il y a u autre problème c'est que la colonne "O" n'est pas formatée. J'ai fait exprès de n'y rien changer pour bien montrer que ces petits problèmes peuvent être résolus avec... pas grand chose. Après... C'est juste un problème de temps, d'expérience de curiosité de volonté de s'améliorer...
Le début de macro à modifier :
Sub Try1()
Dim ARR1
Dim ARR2() As Variant
Dim i As Long
Dim j As Long
Dim q As Long
q = 1
ARR1 = Range(Cells(2, 1), Cells(2, 1).End(xlDown).End(xlToRight)).Value2
'La suite sans changement...Tu testes et tu vois...
Après soit tu formates la colonne "O" à la mano, soit tu demande à VBA de le faire, mébon !
A+
Merci Galopin pour l'information : )
Ma macro Try1 sert à enlever les lignes vides de mon Range("I4:M49") et à me faire un tableau de données présentable.
En fait, quand on utilise les filtres des Tableaux Excel, quand on utilise l'opérateur "<>", on ne peut entrer que deux valeurs maximum. Et moi je voudrais pouvoir en utiliser plus que deux, comme dans mon exemple où je souhaite obtenir toutes les lignes qui sont <> de "Saumur", "Sancerre" et "Saint Emilion" dans la colonne "Article".
J'avais écrit une 1ère macro qui me donnait le résultat insatisfaisant mais correct en Range("I4:M49"), en fait le Range est ("I2:M49") puisque les deux premières lignes du Tableau d'origine contiennent "Saint Emilion" en colonne "Article".
Ma Macro Try1 sert donc à enlever les lignes vides contenues dans Range("I2:M49").
Ma macro Try2 sert à checker que les dates obtenues avec ma Macro Try1 correspondent bien aux dates du tableau d'origine.
Ma macro Try3 sert à checker si le format des dates change quand on entre des dates dans un array à partir de cellules formatées en "Date" et qu'on les ressort dans d'autres cellules. Et apparemment non, c'est pour ça que je ne comprend pas pourquoi ma macro Try1 me ressort certaines dates en format U.S. alos que ma macro Try3 ne le fait pas...
Variant n'est certes pas le bon type pour évaluer ou stocker une date puisqu'il laisse la main à VBA pour évaluer le type de contenu de chaque cellule et par suite de l’interpréter à sa guise.
Correctement utilisées dans Excel les dates sont des entiers longs formatées (visuellement) de manière intelligible pour l'utilisateur donc le meilleur moyens de les transmettre et de les comparer via VBA est de les stocker dans un entier long. (Ce que fait Value2)
Après je n'ignore pas qu'il existe des possibilités évoquées par Pierre mais j'avoue n'avoir jamais su m'en servir ! L'unique fois ou j'ai du me servir de cette méthode (j'étais à l'époque, un grand ignorant qui ne connaissait encore rien aux dates) j'avais carrément sous-traité ce problème à quelqu'un de plus compétent que moi. J'avoue n'avoir jamais depuis été tenté de réexaminer cette possibilité car la méthode des entiers longs me parait suffisante pour mon petit cerveau de retraité aux neurones vieillissantes...
A ma connaissance elle est rarement utilisée. La plus répandue étant l'évaluation en Long comme indiqué plus haut... Il reste que la manipulation des dates entre VBA et Excel restera encore certainement un sujet complexe aux commentaires prolixe...
A+
Merci Galopin, c'est vraiment des informations de valeur que tu me donnes là... D'ailleurs merci à vous deux, Galopin01 et Pierrep56 pour vos précieuses informations, c'est toujours un soulagement de savoir que des programmeurs d'expérience sont sur le forum et prennent le temps d'aider les newbies...!