Microsoft 365 Trie par date

GClaire

XLDnaute Occasionnel
Hello la communauté

Je bloque sur un code qui devrais être simple, mais a priori pas si simple du fait de format date : DD DDDD MMMM AAAA

J'aimerais trier ma colonne "A" (avec entête) par ordre de date plus ancienne a plus récente jusqu'à la colonne "F"

Pour ce faire j'inclus le code dans un code qui me permet de formater mon tableau

VB:
Sub Format_Bordure_Récapitulatif_Affaires()

Dim Format_WS As Worksheet
Dim rng As Range, n As Long

Set Format_WS = Sheets("Récapitulatif_Affaires")

With Format_WS
    n = .Cells(.Rows.Count, 1).End(xlUp).Row 'Colonne A
    'MsgBox n
    .Cells(1, 1).Resize(n, 6).Borders.Weight = xlThin 'N° ligne inclus titre de la colonne et Le nombre de colonne a traiter
    'MsgBox n
        .Columns("A:A").NumberFormat = "General" 'On change le format
    With .Columns("A:F")
        .EntireColumn.AutoFit 'on fait une mise en largeur automatique
        .Sort Key1:=Range("A:F"), Order1:=xlAscending, Header:=xlYes 'On fait le trie par date avec en-tête
    End With
        .Columns("A:A").NumberFormat = "dd dddd mmmm yyyy" 'On remet le bon format
End With
Set Format_WS = Nothing
End Sub

Le trie ne se fait pas comme je souhaiterai

Avant :

001-Avant.JPG


Aprés :

002-Aprés.JPG


Auriez-vous une idée du comment faire pour que cela fonctionne comme je souhaiterai?

Merci, G'Claire
 

GClaire

XLDnaute Occasionnel
Mettez dans une cellule : = (une cellule de votre tableau en date) +1
Si le réponse est un nombre c'est ok, si la réponse est #Valeur alors c'est un texte.
Si c'est ok alors je ne comprends pas.

Bon c'est bien = #Valeur

Je vais vérifier un truc c'est bizard quand même car je l'envoie avec le code cité pour le format

VB:
.Range("A" & DerrLigne).NumberFormat = "dddd dd mmmm yyyy" 'Formatage Date du mouvement

Si cela ne fait pas ce qu'il faut.....

Je me prend la tête a chaque foi avec ces histoires de format.

Merci, beaucoup.
 

ChTi160

XLDnaute Barbatruc
Re
il faut donc que tu envoies une date au format(12/09/2020 ou 44086) et ensuite ou avant tu formates la Cellule en "dddd dd mmmm yyyy"
c'est donc lors de l'enregistrement de ta Ligne il faut que dans la première Colonne une date soit insérée format(12/09/2020 ou 44086)
jean marie
 

GClaire

XLDnaute Occasionnel
Re
il faut donc que tu envoies une date au format(12/09/2020 ou 44086) et ensuite ou avant tu formates la Cellule en "dddd dd mmmm yyyy"
c'est donc lors de l'enregistrement de ta Ligne il faut que dans la première Colonne une date soit insérée format(12/09/2020 ou 44086)
jean marie


Merci pour ta réponse, ChTi160.

Voici comment j'envoie la donnée dans ma feuille.

VB:
    With Feuille_Récapitulatif_Affaires
        .Range("A" & DerrLigne).Value = Format(Me.TextBox_1, "dd dddd mmmm yyyy") 'Date du mouvement
        .Range("A" & DerrLigne).NumberFormat = "dd dddd mmmm yyyy" 'Formatage Date du mouvement

Ou cela cloche?

Merci beaucoup.
 

ChTi160

XLDnaute Barbatruc
re
la tu envoies un texte
VB:
.Range("A" & DerrLigne).Value = Format(Me.TextBox_1, "dd dddd mmmm yyyy")
il faut envoyer la Date puis formater soit
VB:
With .Range("A" & DerrLigne)
       .Value = CDate(Me.TextBox_1) 'Date du mouvement
       .NumberFormat = "dddd dd mmmm yyyy"
End with
non testé Lol
jean marie
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Si Me.TextBox_1 est du type "mercredi 02 septembre 2020" Cdate me renvoie une erreur, il attend "02 septembre 2020"
Donc pour contourner le problème, une possibilité à tester :
VB:
With .Range("A" & DerrLigne)
       .Value = CDate(Mid(Me.TextBox_1, Application.Find(" ", Me.TextBox_1)))
       .NumberFormat = "dddd dd mmmm yyyy"
End With
Le but est de supprimer le premier mot de Me.TextBox_1.