Se connecter avec
S'enregistrer | Connectez-vous

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

Autres pages sur : format date

Lassé par la pub ? Créez un compte
Expert Programmation

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 :
  1. Dim cell As Range
  2.  
  3. For Each cellule In Feuil1.Range("A7:B8" )
  4. Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = cellule.Value
  5. Next

?

Bon, maintenant admettons que la colonne A ne doive contenir que des dates. Ça donne :
  1. Dim cell As Range
  2.  
  3. For Each cellule In Feuil1.Range("A7:B8" )
  4. If cellule.Colonne = 1 Then
  5. ' // 1 = A
  6. Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = CDate(cellule.Value)
  7. Else
  8. Feuil2.Cells(cellule.Row - 1, cellule.Column).Value = cellule.Value
  9. End If
  10. 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.
  1. Dim classeur_source As Workbook
  2. Dim feuille_source As Worksheet
  3. Dim feuille_source1 As Worksheet
  4. Dim feuille_source2 As Worksheet
  5.  
  6. Workbooks.OpenText Filename:="U:\EXTRACTION VENTES PAR MOIS\ELGI.co", Origin:=xlMSDOS, _
  7. DataType:=xlDelimited, _
  8. Tab:=True, _
  9. TrailingMinusNumbers:=True
  10.  
  11.  
  12. Set classeur_source = Workbooks.Open("U:\EXTRACTION VENTES PAR MOIS\ELGI.co")
  13. Set feuille_source = classeur_source.Worksheets(1)
  14. With feuille_source
  15. .Range("A:A,B:B,D:D,G:G,k:k,o:o,p:p,q:q,r:r,s:s").Delete
  16. .columns("a").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  17. .columns("c").Cut Destination:=feuille_source.columns("A")
  18. .columns("d").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  19. .columns("g").Cut Destination:=feuille_source.columns("d")
  20. .columns("e").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  21. .columns("b").Copy Destination:=feuille_source.columns("e")
  22. .columns("f").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  23. .columns("h").Cut Destination:=feuille_source.columns("f")
  24. .columns("g").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  25. .columns("n").Cut Destination:=feuille_source.columns("g")
  26. .columns("h").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  27. .columns("m").NumberFormat = "dd/mm/yyyy"
  28. .columns("m").Cut Destination:=feuille_source.columns("h")
  29. .columns("i").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  30. .columns("h").Copy Destination:=feuille_source.columns("i")
  31. .columns("i").NumberFormat = "[$-40C]mmm-yy;@"
  32. .columns("j").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  33. .columns("n").Cut Destination:=feuille_source.columns("j")
  34. .columns("k").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  35. .columns("l").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  36. .Range("n:n,o:o,p:p,q:q").Delete
  37. .Rows(1).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
  38. End With
  39. With feuille_source.Range("A1:O440")
  40. .AutoFilter
  41. .AutoFilter Field:=13, Criteria1:=">70000000", Operator:=xlAnd
  42. End With
  43. Set feuille_source1 = classeur_source.Sheets.Add(after:=Sheets(Sheets.Count))
  44. With feuille_source.Range("A1:n3500")
  45. .Copy Destination:=feuille_source1.Range("A2")
  46. End With
  47. feuille_source1.Range("L2").Formula = _
  48. "=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"","""" )))))))))))"
  49. With feuille_source1
  50. .Range("l2").AutoFill Destination:=.Range("l2:l438"), Type:=xlFillDefault
  51. End With
  52. feuille_source1.Range("k2").Formula = _
  53. "=((RC[-1])*0.804)"
  54. With feuille_source1
  55. .Range("k2").AutoFill Destination:=.Range("k2:k438"), Type:=xlFillDefault
  56. End With
  57.  
  58. End Sub


Merci encore
Elvan
Expert Programmation

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 :
  1. Dim cell As Range
  2. For Each cell In **cible**.Columns("M").Cells
  3. If IsDate(cell) Then
  4. cell.NumberFormat = "dd/mm/yyyy"
  5. cell.Value = CDate(cell.Value)
  6. End If
  7. Next

Coucou Zeb,

Voici le code recorrigé un peu :
  1. Dim classeur As Workbook
  2. Dim source As Worksheet
  3. Dim cible As Worksheet
  4.  
  5.  
  6. Workbooks.OpenText Filename:="U:\EXTRACTION VENTES PAR MOIS\ELGI.co", Origin:=xlMSDOS, _
  7. DataType:=xlDelimited, _
  8. Tab:=True, _
  9. TrailingMinusNumbers:=True
  10.  
  11.  
  12. Set classeur = Workbooks.Open("U:\EXTRACTION VENTES PAR MOIS\ELGI.co")
  13. Set source = classeur.Worksheets(1)
  14. Dim cell As Range
  15. For Each cell In source.columns("M").Cells
  16. If IsDate(cell) Then
  17. cell.NumberFormat = "dd/mm/yyyy"
  18. cell.Value = CDate(cell.Value)
  19. End If
  20. Next
  21. With source
  22. .Range("A:A,B:B,D:D,G:G,k:k,o:o,p:p,q:q,r:r,s:s").Delete
  23. .columns("a").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  24. .columns("c").Cut Destination:=source.columns("A")
  25. .columns("d").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  26. .columns("g").Cut Destination:=source.columns("d")
  27. .columns("e").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  28. .columns("b").Copy Destination:=source.columns("e")
  29. .columns("f").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  30. .columns("h").Cut Destination:=source.columns("f")
  31. .columns("g").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  32. .columns("n").Cut Destination:=source.columns("g")
  33. .columns("h").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  34. End With
  35. For Each cell In source.columns("h").Cells
  36. If IsDate(cell) Then
  37. cell.NumberFormat = "dd/mm/yyyy"
  38. cell.Value = CDate(cell.Value)
  39. End If
  40. Next
  41. With source
  42. .columns("m").Cut Destination:=source.columns("h")
  43. .columns("i").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  44. .columns("h").Copy Destination:=source.columns("i")
  45. End With
  46. For Each cell In source.columns("i").Cells
  47. If IsDate(cell) Then
  48. cell.NumberFormat = "dd/mm/yyyy"
  49. cell.Value = CDate(cell.Value)
  50. End If
  51. Next
  52. With source
  53. .columns("j").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  54. .columns("n").Cut Destination:=source.columns("j")
  55. .columns("k").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  56. .columns("l").Insert Shift:=xlToRight, copyorigin:=xlFormatFromLeftOrAbove
  57. .Range("n:n,o:o,p:p,q:q").Delete
  58. .Rows(1).Insert Shift:=xlDown, copyorigin:=xlFormatFromLeftOrAbove
  59. End With
  60. With source.Range("A1:O440")
  61. .AutoFilter
  62. .AutoFilter Field:=13, Criteria1:=">70000000", Operator:=xlAnd
  63. End With
  64. Set cible = classeur.Sheets.Add(after:=Sheets(Sheets.Count))
  65. With source.Range("A1:n3500")
  66. .Copy Destination:=cible.Range("A2")
  67. End With
  68. cible.Range("L2").Formula = _
  69. "=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"","""" )))))))))))"
  70. With cible
  71. .Range("l2").AutoFill Destination:=.Range("l2:l438"), Type:=xlFillDefault
  72. End With
  73. cible.Range("k2").Formula = _
  74. "=((RC[-1])*0.804)"
  75. With cible
  76. .Range("k2").AutoFill Destination:=.Range("k2:k438"), Type:=xlFillDefault
  77. End With
  78.  
  79. 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