Inversion de dates

cp4

XLDnaute Impliqué
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
upload_2018-2-18_22-28-13.png
Je n'ai pas compris pourquoi. J'ai coché Microsoft Scripting Runtime.

Merci pour votre aide et explications.

Bonne soirée.
 

Fichiers joints

Staple1600

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)
 

cp4

XLDnaute Impliqué
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:rolleyes:
 
  • J'aime
Reactions: 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)
 
  • J'aime
Reactions: cp4

cp4

XLDnaute Impliqué
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.:D
 

laetitia90

XLDnaute Barbatruc
re,
JM :) chez moi caractére inconnu??? avant
d(c.Value) = c.Offset(, 1).Value2
un pb que j'avais deja eu en copiant des codes directement dans vba
pour cela penser meme pb:)
 

laetitia90

XLDnaute Barbatruc
re , JM :)
ca trop vite pour moi .... viens de voir ton code tu manipules tablo & cells
tu perds l'intêret de manipuler un tablo ??? rapidité!!
 

cp4

XLDnaute Impliqué
@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 ;)
 

Staple1600

XLDnaute Barbatruc
Re

Madame leti
Vous croyez qu'à 23h et des brouettes, je me préoccupe de rapidité !
Non seul m'importe de retrouver mon pyjama en pilou et ma tite couette.
 

cp4

XLDnaute Impliqué
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 ;)
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?
 

laetitia90

XLDnaute Barbatruc
re :)

demoiselle :) & no madame pour l'instant:p:p
seulement pour te taquiner l'ami:D:D

moi aussi aller me coucher lever tot demain salut cp4;)
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour cp4
Bonjour le Fil , le Forum
Pour participer pendant que vous récupérez Lol
tu dis :
Quand
VB:
 j= 1 ----> d.item(t(1,1) = cells(2,1) ' là pas compris 1ère ligne de t on prend 2ème ligne feuille?
soit :
Cells(2,1)= Cells(J+1,1)
J+1 pour prendre la Deuxième Ligne de la Colonne A ou se trouve la première Date .
en espérant avoir compris la question Lol
Bonne fin de Nuit LOL
Amicalement
Jean marie
 
  • J'aime
Reactions: cp4

Si...

XLDnaute Barbatruc
Bon_jour

Pour l'erreur signalée par l'image, cp4, ton 'VBA' a dû subir comme parfois, une modification.

En supprimant ton code et en le remplaçant par

VB:
Private Sub CommandButton1_Click()
'Dim D
Set d = CreateObject("Scripting.Dictionary")
  For Each C In [A2:A13]: d(C.Value2) = "": Next
  [D2:D13] = ""
  [D2].Resize(d.Count) = Application.Transpose(d.keys)
  [D2].Resize(d.Count).NumberFormat = "m/d/yyyy"  'si la colonne n'est pas formatée
End Sub
il n'y a plus, chez moi, d'erreur décelée sauf dans certains cas avec la transposition (problème connu n'est-ce pas Léti :), JM 1 ;), JM 2 ;)?).

On peut alors passer par un filtre avancé
VB:
Private Sub CommandButton2_Click()
  [F2:F13] = ""
  [A2:A13].AdvancedFilter 2, , [F2], 1
End Sub
mais la vitesse d'exécution peut s'en ressentir.

Nota : Dim D est un passe-partout (avec Option Explicit) que j'utilise quand j'ai les doigts engourdis.
 

Fichiers joints

Discussions similaires


Haut Bas