Conversion dates VBA

Bonjour bonjour, Chère forum

je rencontre un petit soucis dans mon projet

J'ai une plage de donnée qui corresond à des dates.

les dates sont actuellement en ce format : jj.mm.yyyy hh:mm lorsque je les copies.

J'aimerai les rendre ainsi : jj/mm/yyyy par macro

pourriez vous m'y aider ?

Merci d'avance.

62excel-vba.xlsx (23.96 Ko)

Bonjour,

vous pourrez utiliser la fontion :

 range.numberformat  

en faite pourquoi par macro ? on peut tout simple faire sa en changeant le format de la ligne/colonne

Bonjour.

Pour compléter la réponse de minanse, n'hésite pas à utiliser l'enregistreur de macro (affichage => macro > enregistrer une macro puis arrêter l'enregistrement après avoir changé le format d'une cellule) pour voir comment Excel interprète ça. ^^

merci pour vos réponses à tous les 2.

Minanse j'essaye d'utiliser number format mais je n'y arrive pas vraiment, (je débute en VBA ^^)

et Elhevan j'ai essayé d'enregistrer une macro mais ce qu'il fait est nulle il ne fait pas ce que je voudrai lui demander :

Sub Macro1()

Range("C2").Select

ActiveCell.FormulaR1C1 = "9/9/2016"

Range("C3").Select

ActiveCell.FormulaR1C1 = "9/10/2016" 'en plus ici c'était censé être 10/09/2016

Range("C6").Select

End Sub


a het mianase lorsque je fait clicque droit ->format de cellule ->date rien ne change

Etrange, je viens de le faire et il me donne bien

Sub Macro1()

Selection.NumberFormat = "m/d/yyyy"

End Sub

En sélectionnant ce qu'il faut avant bien sûr, mais tu as cette partie ^^

iziris a écrit :

a het mianase lorsque je fait clicque droit ->format de cellule ->date rien ne change

il faut après choisir quels format de date est celui que vous chercher .

en ce qui concerne l'utilisation de "numberformat" : Elhevan nous a donné un petit exemple =)

d'accord je pense avoir compris,

Mes dates lorsque j'utilsent number format

meme pas macro ne changent pas ... je ne sais pas pourquoi

as tu essayé sur le fichier que j'ai envoyé Elhevan ?

je suis perdu

Elhevan a écrit :

Bonjour.

Pour compléter la réponse de minanse, n'hésite pas à utiliser l'enregistreur de macro (affichage => macro > enregistrer une macro puis arrêter l'enregistrement après avoir changé le format d'une cellule) pour voir comment Excel interprète ça. ^^

Je considère que par définition, un code enregistré est toujours un MAUVAIS code VBA !

Je déconseille donc toujours l'usage de l'enregistreur, qui a pour effet de ne permettre aucun progrès en programmation VBA, sauf à réécrire toujours et intégralement toute macro enregistrée, en sachant ce que l'on écrit...

iziris : le premier problème dont tu dois prendre conscience est que tes dates ne sont pas des dates pour Excel. Elles été saisies avec un point comme séparateur date qu'Excel ne reconnaît pas pour identifier une valeur date.

Tu est donc en présence de chaînes texte qu'il ta faut traiter comme chaînes pour les convertir en dates (auxquelles tu pourras ensuite appliquer un format de date).

Cordialement.

bonjour MR ferrand En effet j'ai essayé de remplacer les points par des / avec un ctr H et hop les dates se arrangées !!

C'est génial, je suis content. XD

Je suppose que maintenant il traite mes donnée comme des dates; mais dernier point est il possible d'enlever l'heur ? en gros elle n'est pas afficher dans la cellule mais elle est là, et j'ai peu que si je la compare à une date (sans heure) elle me dise qu'elles ne sont pas les juste à cause de l'heure, en gros est ce que 12/10/21016 = 12/10/2016 08:00 ?

Merci beaucoup à vous Trois !!


pardon pour les lettres et les mots manquants

est ce que 12/10/2016 = 12/10/2016 8:00 ?

Re,

Voilà une macro que tu peux appliquer à une plage sélectionnée par tes soins (et qui contient des données au format indiqué à convertir en dates).

Sub ConversionDate()
    Dim c As Range, txdh, txd
    For Each c In Selection
        txdh = Split(c.Value)
        txd = Split(txdh(0), ".")
        txdh(0) = DateSerial(CInt(txd(2)), CInt(txd(1)), CInt(txd(0)))
        c.Value = CDate(txdh(0)) + CDate(txdh(1))
        c.NumberFormat = "dd/mm/yyyy"
    Next c
End Sub

Pour supprimer l'heure, tu ne conserves que : c.Value = CDate(txdh(0)) et tu supprimes l'heure réadditionnée.

Cordialement.

Petit problème il y a une erreur apparemment

Sub ConversionDate()

Dim c As Range, txdh, txd

Dim Rangeeffect As Range

Set Rangeeffect = Worksheets("mdr").Range("G2:P40")

For Each c In Rangeeffect

txdh = Split(c.Value)

txd = Split(txdh(0), ".")

txdh(0) = DateSerial(CInt(txd(2)), CInt(txd(1)), CInt(txd(0))) ' il me surligne cette ligne la : l'indice n'appartient pas à la selection

c.Value = CDate(txdh(0)) + CDate(txdh(1))

c.NumberFormat = "dd/mm/yyyy"

Next c

End Sub

Merci encore Mr Ferrand

Bonjour,

y a -t-il une(ou plusieurs) cellule vide dans la plage de sélectionner ?

Il y une colonne entière, elle ne le sera plus dans quelques secondes je réessaie

Si tu as une erreur sur cette ligne, c'est que le contenu de la cellule ne correspond pas à ce qui est attendu...

Modifie txdh = Split(c.Value) en :

txdh = Split(Trim(c.Value))

ce qui éliminera déjà des espaces parasites.


Tu peux aussi :

Sub ConversionDate()
    Dim c As Range, txdh, txd
    Dim Rangeeffect As Range
    Set Rangeeffect = Worksheets("mdr").Range("G2:P40")
    For Each c In Rangeeffect
        On Error GoTo errform
        txdh = Split(Trim(c.Value))
        txd = Split(txdh(0), ".")
        txdh(0) = DateSerial(CInt(txd(2)), CInt(txd(1)), CInt(txd(0)))
        c.Value = CDate(txdh(0)) + CDate(txdh(1))
        c.NumberFormat = "dd/mm/yyyy"
errform:
    Next c
End Sub

Ce qui fera sauter les valeurs non conformes, sans interrompre...

Nb- Essaie de respecter l'indentation (lisibilité du code) et utilise la balise Code dans les posts.

Waow génial ca a marché !!

Merci énormément à toi et Minanse et à toi MrFerrand

toi elv

mais c'est du code de haut niveau un peu, je ne comprend pas tout ce qui y est écrit je vais voir

Mercie encore

Le niveau d'un "passionné" héhé

Rechercher des sujets similaires à "conversion dates vba"