J'ai un grand nombre de feuilles Excel avec une colonne de date sous la forme "jj-mm-aaaa". J'ai besoin de trier les lignes par date dans cette colonne de date. Manuellement, si je sélectionne la colonne et remplace tout "-" par "/", Excel formate automatiquement les cellules de date de "Général" à un format numérique "Date" afin qu'elles puissent être facilement triées. Plus précisément, il s'agit du "* jj / mm / aaaa" puisque je suis en Australie.
Cependant, lorsque j'ai enregistré la macro, cela ressemble à ceci:
For x = 13 To 134
Cells(x, 4) = "X" & Cells(x, 4)
Next x
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
For x = 13 To 134
Range("D" + CStr(x)) = Right(Range("D" + CStr(x)), Len(Range("D" + CStr(x))) - 1)
Next x
Quand je lance la macro:
Si la date a un jour 12 ou moins, il retourne les champs jour et mois et change le format des nombres en Date
Sinon, il laisse le format numérique comme général.
Avant:
Après:
J'ai essayé de définir ReplaceFormat avec:
Worksheets("Worksheet").Range("A1").NumberFormat = "d/mm/yyyy"
Application.ReplaceFormat.NumberFormat = "d/mm/yyyy"
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
Maintenant, toutes les cellules ont un format numérique de date mais ne peuvent toujours pas être triées en ordre croissant (seule l'option AZ est disponible) et il y a toujours le même problème avec l'échange des champs de date et de mois sur certaines cellules.
J'ai même essayé d'ajouter un X au début de la cellule pour qu'elle reste un format général lors du remplacement. Puis retirez le X après. Même résultat.
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
3 Réponses :
VBA n'est pas nécessaire pour cela! Vous pouvez fixer les dates en 2 étapes à l'aide de la fonctionnalité Excel.
Vous devez d'abord délimiter les données:
- dans la case puis cliquez sur Suivant Deuxièmement, utilisez les données délimitées pour créer des dates Excel appropriées
Vous pouvez utiliser la formule suivante pour obtenir une date à partir de vos données délimitées:
= DATE ([cellule avec année], [cellule avec mois], [cellule avec jour])
Merci mais je voulais utiliser VBA pour automatiser le processus car j'ai environ 3000 feuilles. Je vois encore comment j'aurais pu utiliser cette réponse pour m'y amener, mais quelqu'un d'autre l'a parfaitement résolue.
Sub DateProblem()
Const cStrSheet As String = "Sheet1"
Const cStrRange As String = "D13:D134"
Const cStrCell As String = "E13"
Dim vntS As Variant
Dim vntT As Variant
Dim i As Long
vntS = Worksheets(cStrSheet).Range(cStrRange)
ReDim vntT(1 To UBound(vntS), 1 To 1) As Date
For i = 1 To UBound(vntS)
vntT(i, 1) = DateSerial( _
Right(vntS(i, 1), 4), _
Mid(vntS(i, 1), 4, 2), _
Left(vntS(i, 1), 2))
Next
With Worksheets(cStrSheet).Range(cStrCell)
.Resize(UBound(vntT), UBound(vntT, 2)) = vntT
End With
End Sub
Cela fonctionne-t-il pour vous?
On Error Resume Next
For x = 13 To 134
If Range("D" & x) <> "" Then
Range("D" & x) = CDate(Range("D" & x).Value)
End If
Next x
On Error GoTo 0