Format date
Dernière réponse : dans Programmation
Bonjour,
J'ai une extraction comptable avec une termination en .CO, j'ai réussi à faire une macro qui me facilite énormément le trvail avec l'aide de ZEB, cependant j'ai un petit problème qui vient perturber le résultat.
En effet, quand je lance ma macro qui manipule une colonne avec des dates saisie en dd/mm/yyyy, j'ai comme résultat un format en dd/mm/yyyy, mais quand je veux changer le format manuellement je me dois de retourner dans chaque case et appuyer sur la touche "entrée", afin que la mise en forme se valide. Mais ça, c'est pas le plus important, je le valide pour l'instant à la mano.
Le problème c'est que certaines dates se mettent en format mm/dd/yyyy et ceci aléatoirement. Certaines fois j'ai une date qui me pose ce problème, et des fois plusieurs.
Auriez vous une solution à m'apporter?
Merci d'avance
Elvan
J'ai une extraction comptable avec une termination en .CO, j'ai réussi à faire une macro qui me facilite énormément le trvail avec l'aide de ZEB, cependant j'ai un petit problème qui vient perturber le résultat.
En effet, quand je lance ma macro qui manipule une colonne avec des dates saisie en dd/mm/yyyy, j'ai comme résultat un format en dd/mm/yyyy, mais quand je veux changer le format manuellement je me dois de retourner dans chaque case et appuyer sur la touche "entrée", afin que la mise en forme se valide. Mais ça, c'est pas le plus important, je le valide pour l'instant à la mano.
Le problème c'est que certaines dates se mettent en format mm/dd/yyyy et ceci aléatoirement. Certaines fois j'ai une date qui me pose ce problème, et des fois plusieurs.
Auriez vous une solution à m'apporter?
Merci d'avance
Elvan
Autres pages sur : format date
Lassé par la pub ? Créez un compte
Salut Elvan,
Tu as un problème avec d'une part le format de la donnée, et d'autre part avec le type de données.
Pour ce qui est du format, c'est facile à régler. Utilise NumberFormat.
Pour le type de données, ton histoire d'appuyer sur la touche entrée m'incite à croire que c'est là ton problème. Pour éviter ça, quand tu mets une données de type date dans une cellule, fait-le de manière explicite en utilisant CDate.
Tu te souviens de ce code :
?
Bon, maintenant admettons que la colonne A ne doive contenir que des dates. Ça donne :
Tu as un problème avec d'une part le format de la donnée, et d'autre part avec le type de données.
Pour ce qui est du format, c'est facile à régler. Utilise NumberFormat.
Pour le type de données, ton histoire d'appuyer sur la touche entrée m'incite à croire que c'est là ton problème. Pour éviter ça, quand tu mets une données de type date dans une cellule, fait-le de manière explicite en utilisant CDate.
Tu te souviens de ce code :
Dim cell As Range
For Each cellule In Feuil1.Range("A7:B8" )
Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = cellule.Value
Next
?
Bon, maintenant admettons que la colonne A ne doive contenir que des dates. Ça donne :
Dim cell As Range
For Each cellule In Feuil1.Range("A7:B8" )
If cellule.Colonne = 1 Then
' // 1 = A
Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = CDate(cellule.Value)
Else
Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = cellule.Value
End If
Next
Bonjour Zeb, (toujours à la rescousse
)
J'ai utilisé le NumberFormat mais le problème persiste.
je vais utiliser le code CDATE, voici mon code avant, je reviens demain pour te dire si le CDATE fonctionne.
Merci encore
Elvan
)J'ai utilisé le NumberFormat mais le problème persiste.
je vais utiliser le code CDATE, voici mon code avant, je reviens demain pour te dire si le CDATE fonctionne.
Dim classeur_source As Workbook
Dim feuille_source As Worksheet
Dim feuille_source1 As Worksheet
Dim feuille_source2 As Worksheet
Workbooks.OpenText Filename:="U:\EXTRACTION VENTES PAR MOIS\ELGI.co", Origin:=xlMSDOS, _
DataType:=xlDelimited, _
Tab:=True, _
TrailingMinusNumbers:=True
Set classeur_source = Workbooks.Open("U:\EXTRACTION VENTES PAR MOIS\ELGI.co")
Set feuille_source = classeur_source.Worksheets(1)
With feuille_source
.Range("A:A,B:B,D:D,G:G,k:k,o:o,p:p,q:q,r:r,s:s").Delete
.columns("a").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("c").Cut Destination:=feuille_source.columns("A")
.columns("d").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("g").Cut Destination:=feuille_source.columns("d")
.columns("e").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("b").Copy Destination:=feuille_source.columns("e")
.columns("f").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("h").Cut Destination:=feuille_source.columns("f")
.columns("g").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("n").Cut Destination:=feuille_source.columns("g")
.columns("h").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("m").NumberFormat = "dd/mm/yyyy"
.columns("m").Cut Destination:=feuille_source.columns("h")
.columns("i").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("h").Copy Destination:=feuille_source.columns("i")
.columns("i").NumberFormat = "[$-40C]mmm-yy;@"
.columns("j").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("n").Cut Destination:=feuille_source.columns("j")
.columns("k").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("l").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.Range("n:n,o:o,p:p,q:q").Delete
.Rows(1).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
End With
With feuille_source.Range("A1:O440")
.AutoFilter
.AutoFilter Field:=13, Criteria1:=">70000000", Operator:=xlAnd
End With
Set feuille_source1 = classeur_source.Sheets.Add(after:=Sheets(Sheets.Count))
With feuille_source.Range("A1:n3500")
.Copy Destination:=feuille_source1.Range("A2")
End With
feuille_source1.Range("L2").Formula = _
"=IF(RC[2]=3,""CHQ"",IF(RC[2]=12,""LCR"",IF(RC[2]=13,""LCR"",IF(RC[2]=""PRE"",""PRE"",IF(RC[2]=""LCM"",""LCM"",IF(RC[2]=""CHQ"",""CHQ"",IF(RC[2]=""VIR"",""VIR"",IF(RC[2]=""TRA"",""TRA"",IF(RC[2]=7,""LCR"",IF(RC[2]=""BAO"",""BAO"",IF(RC[2]=""VIB"",""VIB"","""" )))))))))))"
With feuille_source1
.Range("l2").AutoFill Destination:=.Range("l2:l438"), Type:=xlFillDefault
End With
feuille_source1.Range("k2").Formula = _
"=((RC[-1])*0.804)"
With feuille_source1
.Range("k2").AutoFill Destination:=.Range("k2:k438"), Type:=xlFillDefault
End With
End Sub
Merci encore
Elvan
Euh, je m'y pers un peu. Tu as appelé toutes tes feuilles source. A priori, celles d'où on copie les données devraient s'appeler source, celles vers lesquelles on copie les données devraient s'appeler cible.
Essaie d'ajouter ça à ton code :
Essaie d'ajouter ça à ton code :
Dim cell As Range For Each cell In **cible**.Columns("M").Cells If IsDate(cell) Then cell.NumberFormat = "dd/mm/yyyy" cell.Value = CDate(cell.Value) End If Next
Coucou Zeb,
Voici le code recorrigé un peu :
3 questions :
* la première porte sur ton dernier code posté : tu as mis cible pourquoi? puisque je travaille encore sur ma feuille de départ? (mais bon, je m'étais un peu embrouillée au début avec les appelations de feuille)
* la deuxième porte sur le code cell.value, je peux mettre ce code en début de maccros ou à la fin.
*la troisième porte sur le fichier de base en .CO, quand je l'ouvre directement sous excel, les dates sont correcte, mais quad je passe par la maccros, même que la feuille de départ, les dates sont érronnées (1-2- ou plusieurs dates).
Merci encore
Elvan
Voici le code recorrigé un peu :
Dim classeur As Workbook
Dim source As Worksheet
Dim cible As Worksheet
Workbooks.OpenText Filename:="U:\EXTRACTION VENTES PAR MOIS\ELGI.co", Origin:=xlMSDOS, _
DataType:=xlDelimited, _
Tab:=True, _
TrailingMinusNumbers:=True
Set classeur = Workbooks.Open("U:\EXTRACTION VENTES PAR MOIS\ELGI.co")
Set source = classeur.Worksheets(1)
Dim cell As Range
For Each cell In source.columns("M").Cells
If IsDate(cell) Then
cell.NumberFormat = "dd/mm/yyyy"
cell.Value = CDate(cell.Value)
End If
Next
With source
.Range("A:A,B:B,D:D,G:G,k:k,o:o,p:p,q:q,r:r,s:s").Delete
.columns("a").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("c").Cut Destination:=source.columns("A")
.columns("d").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("g").Cut Destination:=source.columns("d")
.columns("e").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("b").Copy Destination:=source.columns("e")
.columns("f").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("h").Cut Destination:=source.columns("f")
.columns("g").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("n").Cut Destination:=source.columns("g")
.columns("h").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
End With
For Each cell In source.columns("h").Cells
If IsDate(cell) Then
cell.NumberFormat = "dd/mm/yyyy"
cell.Value = CDate(cell.Value)
End If
Next
With source
.columns("m").Cut Destination:=source.columns("h")
.columns("i").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("h").Copy Destination:=source.columns("i")
End With
For Each cell In source.columns("i").Cells
If IsDate(cell) Then
cell.NumberFormat = "dd/mm/yyyy"
cell.Value = CDate(cell.Value)
End If
Next
With source
.columns("j").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("n").Cut Destination:=source.columns("j")
.columns("k").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.columns("l").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
.Range("n:n,o:o,p:p,q:q").Delete
.Rows(1).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
End With
With source.Range("A1:O440")
.AutoFilter
.AutoFilter Field:=13, Criteria1:=">70000000", Operator:=xlAnd
End With
Set cible = classeur.Sheets.Add(after:=Sheets(Sheets.Count))
With source.Range("A1:n3500")
.Copy Destination:=cible.Range("A2")
End With
cible.Range("L2").Formula = _
"=IF(RC[2]=3,""CHQ"",IF(RC[2]=12,""LCR"",IF(RC[2]=13,""LCR"",IF(RC[2]=""PRE"",""PRE"",IF(RC[2]=""LCM"",""LCM"",IF(RC[2]=""CHQ"",""CHQ"",IF(RC[2]=""VIR"",""VIR"",IF(RC[2]=""TRA"",""TRA"",IF(RC[2]=7,""LCR"",IF(RC[2]=""BAO"",""BAO"",IF(RC[2]=""VIB"",""VIB"","""" )))))))))))"
With cible
.Range("l2").AutoFill Destination:=.Range("l2:l438"), Type:=xlFillDefault
End With
cible.Range("k2").Formula = _
"=((RC[-1])*0.804)"
With cible
.Range("k2").AutoFill Destination:=.Range("k2:k438"), Type:=xlFillDefault
End With
End Sub
3 questions :
* la première porte sur ton dernier code posté : tu as mis cible pourquoi? puisque je travaille encore sur ma feuille de départ? (mais bon, je m'étais un peu embrouillée au début avec les appelations de feuille)
* la deuxième porte sur le code cell.value, je peux mettre ce code en début de maccros ou à la fin.
*la troisième porte sur le fichier de base en .CO, quand je l'ouvre directement sous excel, les dates sont correcte, mais quad je passe par la maccros, même que la feuille de départ, les dates sont érronnées (1-2- ou plusieurs dates).
Merci encore
Elvan
Lassé par la pub ? Créez un compte