Conversion format date en texte en conservant un format de d
Bonjour,
J'ai un petit soucis au niveau de mon format de date, j'aimerais transformer mon format de date en texte/standard tout en gardant une écriture sous la forme : "yyyy-mm-dd"
Sub Traitement()
Dim derligne As Long
Dim x As Range 'cellule affichant le coefficient multiplicateur 100
Dim taille As Range '1ère ligne contenant le symbole % dans les en-tête
Dim colonne As Integer 'n° de la colonne à modifier
Dim lignefin As Integer 'n° de la dernière ligne
Dim ws As Worksheet
On Error Resume Next 'si la feuille n'existe pas !
Application.DisplayAlerts = False: Sheets("traitement").Delete: Application.DisplayAlerts = True
On Error GoTo 0 'plus de gestionnaire d'erreurs
Worksheets("PO - PB").Copy After:=Worksheets("base donnee") 'création de la feuille
ActiveSheet.Name = "traitement" 'nom de la feuille'
Sheets("base donnee").Range("A1:DX1").Copy Sheets("traitement").Range("A1:DX1")
ActiveSheet.AutoFilterMode = False 'desactiver les filtres'
ActiveWindow.FreezePanes = False 'désactiver les volets'
ligne = Range("A" & Rows.Count).End(xlUp).Row
colomne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
With Sheets("traitement")
Set x = Range("A" & ligne + 10)
x.Value = 100
Set taille = .Range("A2:DX100")
For Each cell In taille
If cell.HasFormula = True Then
cell.EntireColumn.Rows("2:775").Select
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
[b]'detecter date et la mettre en texte + bon format
ElseIf IsDate(cell) Then
cell.EntireColumn.Rows("2:761").Select
selection.NumberFormat = "@"
selection.NumberFormat = "yyyy-mm-dd"[/b]
ElseIf InStr(1, cell.Text, "€") > 0 Then
cell.EntireColumn.Rows("2:761").Select
selection.NumberFormat = "0.00" 'pour 2 décimales
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
ElseIf InStr(1, cell.Text, "%") > 0 Then
colonne = cell.Column
lignefin = cell.End(xlDown).Row
x.Copy
Range(Cells(1, colonne), Cells(lignefin, colonne)).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlMultiply, SkipBlanks:=True
For i = 2 To lignefin
If CStr(Cells(i, colonne)) = "Erreur 2015" Then Cells(i, colonne) = ""
Next i
selection.NumberFormat = "0.00"
selection.Copy
selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
End If
Next
End With
ActiveSheet.UsedRange.Replace What:="/", Replacement:="", LookAt:=xlWhole
ActiveSheet.UsedRange.Replace What:="#REF!", Replacement:="", LookAt:=xlWhole
ActiveSheet.UsedRange.Replace What:="#VALEUR!", Replacement:="", LookAt:=xlWhole
'For Each ws In Worksheets
'Application.DisplayAlerts = False
'If ws.Name <> "traitement" Then ws.Delete
'Next
'Application.DisplayAlerts = True
'ActiveWorkbook.SaveAs Filename:="Traitement", FileFormat:=xlCSV, CreateBackup:=False, local:=True
End Sub
Voici ma macro, j'arrive à le transformer mais à la fin, le format de ma cellule est personnalisé, et moi je voudrais texte/standard...
Je vous remercie par avance
Julien
Hello jujudeo
Désolé j'ai pas le courage de faire la modification directement dans ton code, mais pour faire ce que tu souhaites:
Range("A1").NumberFormat = "@"
Range("A1") = Format(Range("A1"), "yyyy-mm-dd)
après si tu veux boucler sur x lignes
Dim numLigne as Integer
For numLigne = 1 to 999
Range("A" & numLigne).NumberFormat = "@"
Range("A" & numLigne) = Format(Range("A" & numLigne), "yyyy-mm-dd")
next numLigne
EDIT pour d'autres membres, car moi je comprend pas:
Excel confond les jours et les mois, quelqu'un a déjà eu ce soucis?
Une date 01/12/2016 est convertie en 2016-01-12
Voilà donc une version modifiée
'------- une seule fois
Dim jour%, mois%, annee%
'------- à avoir pour chaque cellule à modifier
Range("A1").NumberFormat = "@"
jour = Day(Range("A1"))
mois = Month(Range("A1"))
annee = Year(Range("A1"))
Range("A1") = Format(DateSerial(annee, mois, jour), "yyyy/mm/dd")
le soucis c'est quoi moi j'aimerais l'appliquer pas à une colonne précise mais a la colonne entière qui est sélectionnée par la fonction isdate, donc j'aimerais l'appliquer à ma sélection
Pour la date, c'est moi qui désire ce style de date
Voilà un code qui fonctionne pour ta première colonne, suffira de l'adapter pour les autres
ElseIf IsDate(cell) Then
cell.EntireColumn.Rows("2:761").Select
Selection.NumberFormat = "@"
Dim jour%, mois%, annee%, plage As Range
Set plage = cell.EntireColumn.Rows("2:761")
For Each cellule In plage
If IsDate(cellule.Value) And cellule.Value <> "" Then
jour = Day(cellule)
mois = Month(cellule)
annee = Year(cellule)
cellule.Value = Format(DateSerial(annee, mois, jour), "yyyy/mm/dd")
End If
Next cellule
Elseif etc.......
sa marche, merci beaucoup
pour une conversion tu peux essayer ceci :
dim date1, texte
date1 = Date
texte= CStr(date1) ou texte = CStr(Date)
c'est tout
Cordialement