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

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
 
Réactions: 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.
 

Pièces jointes

  • Dico Filtre Dates.xlsm
    21.8 KB · Affichages: 27

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

MADAME Leti
J'y peux rien , j'y suis obligé

Sinon, personne pour éclairer ma lanterne sur mon questionnement du message#12, svp ?

ChTi160 a répondu à ta question cp4
(qu'il en soit remercié)
Je confirme: le décalage c'est à cause de Dates en A1 (qui n'est pas une date

Si...: Même question:
Why d(C.Value2) = "" ?
 

laetitia90

XLDnaute Barbatruc
bonsoir tous

MADAME Leti a plusieurs explications possible dans ce cas de figure

code test on remarque beaucoup de chose intére.....
VB:
Sub es()
Dim d As Object,a,b,i as long
Set d = CreateObject("scripting.dictionary")
For Each C In [A2:A13]
d(C.Value) = C.Offset(, 1).Value2
'd(C.Value2) = C.Offset(, 1).Value2
'd(C.Value) = ""
Next C
     a = d.keys: b = d.items
   For i = 0 To d.Count - 1
   MsgBox a(i)
   MsgBox b(i)
   Next i
d.RemoveAll
End Sub

que remarque col b vide mais pas d'importance!!!

d(C.Value) = C.Offset(, 1).Value2

d(C.Value) avec offset ou pas ..... chargera quand meme le dico. keys .....items vide col2 vide
bien sur sans offset d(C.Value) = ""

msgbox a(i) nous avons no clés & pas d'inversion de date avant transpose
MsgBox b(i) vide
on peut confirmer que c'est transpose qui fout le ca..
.
dans le cas 2

d(C.Value2) = C.Offset(, 1).Value2
d(C.Value2) = ""

msgbox a(i) nous avons no clés mais sous forme standard..... chiffre
puis transpose en date

le mieux eviter d' utiliser transpose surtout depuis 2007 limitation ect..

voila voilou

d(C.Value2) = d(C.Value2) + 1 idem d(C.Value2)=""
 
Dernière édition:
Réactions: cp4

cp4

XLDnaute Barbatruc
Bonjour,

Je constate suite à cette discussion très instructive que encore beaucoup de choses à apprendre en VBA et même Excel. Je ne me suis pas encore habitué à utiliser les tableaux vba et les dictionnaires, que je me trouve confronter à cette histoire de dates. Quelle chance, ils ont les anglophones, un souci en moins.

Merci à vous pour toutes vos explications et votre patience.

Bonne journée
 

Discussions similaires

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