Macro pour conversion de date

Bonjour le forum,

J'ai pour but de convertir une plage de donnée ("D:D").

J'ai créer avec une macro enregistré, qui me sélectionne et me converti ma plage de donnée :

Sub TEST()
'
' TEST Macro
'

'
    Columns("D:D").Select
    Selection.TextToColumns Destination:=Range( _
        "TABLEAU2019[[#Headers],[Date dem. client]]"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True
End Sub

Et lors de l'enregistrement de la macro, la conversion fonctionne très bien, mais quand je la fait en lançant depuis la macro elle ne fonctionne pas et ne converti qu'une parti de la colonne je ne sais pour quelle raison.

Je vous joint un fichier où j'ai schématisé le problème

11demo.xlsm (25.52 Ko)

Bonjour,

Une suggestion ...

Dans ton exemple, c'est Tableau2 et le code mentionne Tableau2019.

Sub TEST()
Dim cel As Range

   Application.ScreenUpdating = False
   For Each cel In Range("Tableau2")
      If IsDate(cel) Then cel = CDate(cel)
   Next cel
End Sub

ric

Slt quentinmgt,

Slt ric au passage,

un autre test

Sub ConvertirDate()
Dim LastRow As Long, r As Range
LastRow = Cells(Rows.Count, "D").End(xlUp).Row
On Error Resume Next
For i = 2 To LastRow
    Set r = Cells(i, "D")
    r.Value = CDate(r.Value)
Next i
End Sub

Bonjour RIC, m3ellem1,

tout d'abord merci pour votre aide.

Ric : ta solution a fait planter mon fichier

M3ellem1 : Ta solution a fonctionné mais contrairement à la macro initiale, elle met longtemps à s’exécuter (la plage de mon vrai fichier fait plus de 300 lignes et en finalité jusqu'à 1200) de plus, certaines lignes se convertissent en heure format personnalisé (hh:mm:ss).

Re,

essaie comme ca:

Sub ConvertirDate()
Dim LastRow As Long, r As Range
LastRow = Cells(Rows.Count, "D").End(xlUp).Row
Application.ScreenUpdating = False
On Error Resume Next
For i = 2 To LastRow
    Set r = Cells(i, "D")
    r.Value = CDate(r.Value)
Next i
End Sub

Les formats n'ont pas changés, et le temps d'exécution est toujours aussi long et dans les cellules vides est inséré :"12:00:00 AM"

Les formats n'ont pas changés, et le temps d'exécution est toujours aussi long et dans les cellules vides est inséré :"12:00:00 AM"

je comprend pas, moi ca va rapidement, j'ai même pas la possiblité de lui dire attend s'il te plaît

Le tableau initiale possède 42 colonne d'un tableau nommé, chaque colonnes est rempli.

Le fichier s'appuie sur ce tableau pour faire des tableaux de bord, avec des macros dans tout les sens et depuis un moment le fichier est un peu ralenti je pense par tout ceci ^^

Bonjour,

Peut-être comme ça !

Sub Conversion()
    Dim i As Long
    'Valeur 4 correspond à la colonne D
    Nblignes = ActiveSheet.Cells(65536, 4).End(xlUp).Row
    For i = 1 To Nblignes
        If IsDate(Cells(i, 4)) Then
            Cells(i, 4).Value = CDate(Cells(i, 4).Value)
        End If
    Next i
End Sub

Cordialement,

Même problème au niveau du temps, par contre quand je passe par l'outil de conversion l'action est quasiment instantanée!

Et les cellules vides sont toujours convertir au format "12:00:00 AM"

Re,

Sub ConvertirDate()
Dim LastRow As Long, r As Range
LastRow = Cells(Rows.Count, "D").End(xlUp).Row
Application.ScreenUpdating = False
On Error Resume Next
For i = 2 To LastRow
    If Cells(i, "D").Value <> vbNullString Then
        Set r = Cells(i, "D")
        r.Value = CDate(r.Value)
    End If
Next i
End Sub

pour le temps, montre nous ton code general que t'utilise ...

Essaye ceci:

Sub Conversion()
    Dim i As Long
    Dim Nblignes As Long
    Nblignes = ActiveSheet.Cells(65535, 4).End(xlUp).Row
    For i = 1 To Nblignes
        If IsDate(Cells(i, 4).Value) Then
            Cells(i, 4).Value = CDate(Cells(i, 4).Value)
            Cells(i, 4).NumberFormat = "m/d/yyyy"
        ElseIf Cells(i, 4) = 0 Then
            Cells(i, 4).Value = Null
            Cells(i, 4).NumberFormat = "General"
        Else
            Cells(i, 4).NumberFormat = "General"
        End If
    Next i
End Sub

Suite:

En effet, il est possible que les options du tableur désactivent l'affichage de la valeur 0 (zéro)

Dans ce cas la plage de cellules à traiter est peut-être très volumineuse, d'où le temps !

m3ellem1 : La macro fonctionne, il n'y a rien d'autre comme code, je me sert seulement de vos macros.

GNIN : ta macro fonctionne aussi, comment peut on alors modifier ces options sachant que toutes mes valeurs vides doivent rester vides.

Même problème au niveau du temps!

Comment puis-je lancer ces macros depuis une autre feuille sans pour autant devoir revenir à la feuille "TABLEAU 2019" ?

Il faut faire référence à l'onglet "TABLEAU 2019"

(Ci-après variable Objet F qui pointe sur "TABKEAU 2019")

Sub Conversion()
    Dim i As Long
    Dim F As Worksheet
    Set F = Sheets("Tableau 2019")
    Dim Nblignes As Long
    Nblignes = F.Cells(65535, 4).End(xlUp).Row
    For i = 1 To Nblignes
        If IsDate(F.Cells(i, 4).Value) Then
            F.Cells(i, 4).Value = CDate(F.Cells(i, 4).Value)
            Cells(i, 4).NumberFormat = "m/d/yyyy"
        ElseIf F.Cells(i, 4) = 0 Then
            F.Cells(i, 4).Value = Null
            F.Cells(i, 4).NumberFormat = "General"
        Else
            F.Cells(i, 4).NumberFormat = "General"
        End If
    Next i
End Sub

Concernant, les options d'affichage, il faut le faire à partir du menu principal d'excel (Outils-->Options). Là je ne peux pas trop t'aider, c'est selon ta version Excel. Personnellement je suis toujours sur "2003"

Petite correction:

Sub Conversion()
    Dim i As Long
    Dim F As Worksheet
    Set F = Sheets("Tableau 2019")
    Dim Nblignes As Long
    Nblignes = F.Cells(65535, 4).End(xlUp).Row
    For i = 1 To Nblignes
        If IsDate(F.Cells(i, 4).Value) Then
            F.Cells(i, 4).Value = CDate(F.Cells(i, 4).Value)
            F.Cells(i, 4).NumberFormat = "m/d/yyyy"
        ElseIf F.Cells(i, 4) = 0 Then
            F.Cells(i, 4).Value = Null
            F.Cells(i, 4).NumberFormat = "General"
        Else
            F.Cells(i, 4).NumberFormat = "General"
        End If
    Next i
End Sub

J'avais omis de corriger une ligne, désolé

Merci GNIN,

Tout fonctionne parfaitement hormis le temps bien sur

Du coup j'aimerai pouvoir lancer cette macro ("Conversion") dans un ordre bien précise un peu comme ceci :

Sub MISE_A_JOUR()
'
' Mise à jour du tableau 2019

    Call MAJ_TABLEAU_2019
    Call SUPP_TABLEAU_2019
    Call SUPP_DDEMCLIENT_TABLEAU_2019
    Call Conversion

End Sub

Mais lorsque j'ai tenté de la lancé elle s'est faite dans le désordre, et il est primordiale que l'exécution ce déroule dans l'ordre cité ci-dessus !

Rechercher des sujets similaires à "macro conversion date"