Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Inversion de dates

cp4

XLDnaute Barbatruc
Bonsoir,

Confronter aux problèmes d'inversion de dates, Boisgontier propose une solution sur son site. ICI
Au bas de la page
Mais je n'arrive pas à la mettre en œuvre. J'ai cette erreur

Je n'ai pas compris pourquoi. J'ai coché Microsoft Scripting Runtime.

Merci pour votre aide et explications.

Bonne soirée.
 

Pièces jointes

  • InversionDate.xlsm
    15.7 KB · Affichages: 30

cp4

XLDnaute Barbatruc
Bonsoir le fil, le forum

@cpa4
Ajoute un Dim d as Object

PS: La coutume est de pas d'indiquer de pseudo dans le titre des discussions
(en tout cas c'était le cas jadis)
Bonsoir JM,
Merci beaucoup, pour le pseudo je ne savais pas. C'était juste pour donner la source.
J'ai rajouté dim d as object, aucun changement le même message d'erreur.
Bonne soirée.
 

laetitia90

XLDnaute Barbatruc
bonsoir cp4,JM

tu as mal recopier l'exemple caractére a effacer avant

???? d(c.Value) = c.Offset(, 1).Value2

tu declares

Set d = CreateObject("scripting.dictionary")
donc tu utilise une liaison tardive
donc coché Microsoft Scripting Runtime sert a rien

par contre si tu coche la Microsoft Scripting Runtime il fait declarer comme cela
Dim d As New Scripting.Dictionary & non object
et la ligne si dessous tu la supprime sert plus a rien
Set d = CreateObject("scripting.dictionary")

pour value 2 date avant excel 2007 pb...inversion plus apres .....perso je l'utilise souvent
seulement pour la rapidité execution du code seulement dans certains cas!!!

ps l'action de passer par une liaison "precoce" execution du code plus rapide dans beaucoup de cas
 
Réactions: cp4

Staple1600

XLDnaute Barbatruc
Bonsoir leti

Comme ceci, Excel ne bronche plus chez moi
VB:
Sub Test()
Dim d As Object, t, j
t = [A2:A13].Value
Set d = CreateObject("Scripting.Dictionary")
For j = 1 To UBound(t)
d.Item(t(j, 1)) = Cells(j + 1, 1).Value2
Next
[D2].Resize(d.Count) = Application.Transpose(d.keys)
[E2].Resize(d.Count) = Application.Transpose(d.items)
[E2].Resize(d.Count).NumberFormatLocal = "jj/mm/aaaa"
End Sub

PS: L'exemple est tel que mis par cp4
(voir le lien vers le site de JB dans son 1er message)
 
Réactions: cp4

cp4

XLDnaute Barbatruc
Bonsoir Laetitia90,

Très gentil de ta part. En effet, j'ai fait un copier coller.
D'après ce que tu m'expliques, l'inversion de dates ne se fait qu'avec les versions antérieures à 2007.
Or, dans cette exemple je constate que les dates s'inversent avec cette ligne de code (ci-dessous)
[d2].Resize(d.Count) = Application.Transpose(d.keys)

et pour les 2 lignes ci-dessous, je n'ai pas de résultats sur la feuille
[E2].Resize(d.Count) = Application.Transpose(d.items)
'Ou à la restitution, utiliser FormulaLocal
[F2].Resize(d.Count).FormulaLocal = Application.Transpose(d.items)

Franchement, cette histoire de dates me rend 'chèvre'. Dés qu'il y a transfert, par exemple d'une feuille vers un tableau et ensuite vers la feuille les dates s'inversent. Ou de l'importation d'un fichier csv vers excel idem.
Enfin, c'est ce que j'ai constaté. Je m'y prends sûrement très mal.

J'avoue que je galère avec les dates. Merci beaucoup.
 

cp4

XLDnaute Barbatruc
@Staple1600 : Merci beaucoup, ton code est parfait. Je l'ai exécuté au pas à pas et j'ai pu constaté qu'avec "value", il y a inversion et avec "value2" non, car elle récupère le numéro de série de la date.

Merci beaucoup, bonne soirée.
 

Staple1600

XLDnaute Barbatruc
Re

Effectivement, j'avais pas remarqué le mauvais caractère du caractère surnuméraire qui faisait tousser Excel.
Je l'ai supprimé et le code initial fonctionne chez moi.

Par contre je ne comprends pas ceci
d(c.Value) = c.Offset(, 1).Value2

Avec c.Offset(, 1) on va en colonne B, or celle-ci est vide?

Donc comment ça marche cette histoire ?

PS: Pour ma version, voir mon profil XLDien
 

cp4

XLDnaute Barbatruc
Plus que tu en parles, là aussi comment ça marche
For j = 1 To UBound(t)
d.Item(t(j, 1)) = Cells(j + 1, 1).Value2
Next

quand j=1 ----> d.item(t(1,1) = cells(2,1) là pas compris 1ère ligne de t on prend 2ème ligne feuille?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…