Remise en forme colonne date

Bonjour à tous.

Je suis néophyte en VBA. J'ai démarré il y a une semaine.

Je cherche à nettoyer un fichier (ci-joint) qui m'est transmis par un système automatisé.

ce fichier peut varier en nombre de ligne à tout moment.

les colonnes B et C contiennent la même date . Cette date est au format jj/MM/AAAA HH:MM:SS

Dans la colonne B, j'aimerai supprimer HH:MM:SS et ne conserver que JJ:MM:AAAA

Dans la colonne C , j'aimerai supprimer JJ/MM/AAAA et ne conserver que l'heure.

Pourriez-vous m'aider svp car je galère depuis plusieurs jours?

Ps: Dans le fichier il y a d'autre colonne à traiter de la même façon mais une fois que vous m'aurez mis sur la voie, je me débrouillerai.

Cordialement.

25gpl-xls.xlsx (12.84 Ko)

Bonjour,

tu as bien essayé de changer le format d'affichage de tes colonnes ... tout simplement ?

Bonjour,

Essaie cette macro

Sub Test()
Dim DerLig As Long, Ligne As Long
    With Worksheets("Report")
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row
        For Ligne = 2 To DerLig
            .Range("B" & Ligne) = Int(.Range("B" & Ligne).Value)
            .Range("C" & Ligne) = .Range("C" & Ligne).Value - .Range("B" & Ligne)
        Next Ligne
    End With
End Sub

A+

Bonjour,

si tu veux vraiment tu vba, essaye ceci sur un feuille de test MAIS de grâce pas de cellules fusionnées, c'est toujours source d'ennui !

j'ai défusionné avant de tester ici

Sub DateHeure()
For Each c In Range("b2:b" & [b65000].End(xlUp).Row)
    dat = Left(c, 8)
    hor = Right(c, 8)
    Cells(c.Row, 2) = dat
    Cells(c.Row, 3) = hor
Next
End Sub
frangy a écrit :

Bonjour,

Essaie cette macro

Sub Test()
Dim DerLig As Long, Ligne As Long
    With Worksheets("Report")
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row
        For Ligne = 2 To DerLig
            .Range("B" & Ligne) = Int(.Range("B" & Ligne).Value)
            .Range("C" & Ligne) = .Range("C" & Ligne).Value - .Range("B" & Ligne)
        Next Ligne
    End With
End Sub

A+

Bonjour.

ça marche impeccable. En revanche, deux petites questions.

  • Le traitement est un peu long. Est-ce normal? ça consomme tant de ressources que ça ?
  • Comment faire pour reprendre cette même macro dans la continuité de celle-ci pour traiter deux autres colonne ? Il vaut mieux faire plusieurs macro qui se suivent ou une grosse macro ?
cordialement.

pierre.jy a écrit :

Bonjour,

tu as bien essayé de changer le format d'affichage de tes colonnes ... tout simplement ?

Bonjour.

Modifier le format de la date ne suffisait pas car ça n'enlève pas ce que la cellule contient.

Cordialement.

Bonjour,

Le traitement est un peu long. Est-ce normal ? Ça consomme tant de ressources que ça ?

« Un peu long », ça fait combien de « pas trop long » ?

Le temps de traitement dépend tout d’abord du volume de données.

Ensuite, il y a des astuces pour optimiser cette durée :

1) désactiver le rafraîchissement de l'écran avant la macro avec la propriété Application.ScreenUpdating = False

Sub Test()
Dim DerLig As Long, Ligne As Long
    Application.ScreenUpdating = False
    With Worksheets("Report")
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row
        For Ligne = 2 To DerLig
            .Range("B" & Ligne) = Int(.Range("B" & Ligne).Value)
            .Range("C" & Ligne) = .Range("C" & Ligne).Value - .Range("B" & Ligne)
        Next Ligne
    End With
End Sub

2) utiliser un tableau.

C’est la solution la plus efficace.

Voici un code qui permet de convertir l’ensemble des colonnes "Date de création","Date du statut", "Date", "Date d'affectation", "Début réel" et "Fin réelle". Cela répond à ta deuxième question.

Pour chacune de ces colonnes, la procédure « Corriger » fait appel à la procédure « Convertir » qui est chargée d’effectuer la conversion.

Sub Corriger()
Dim Cel As Range
    With Worksheets("Report")
        For Each Cel In .Range(.Cells(1, 1), .Cells(1, Columns.Count).End(xlToLeft))
            If Cel.Value = "Date de création" Or Cel.Value = "Date du statut" Or Cel.Value = "Date" Or _
            Cel.Value = "Date d'affectation" Or Cel.Value = "Début réel" Or Cel.Value = "Fin réelle" Then
                Convertir Cel
            End If
        Next Cel
    End With
End Sub

Sub Convertir(C As Range)
Dim DerCel As Range
Dim Tablo()
    Application.ScreenUpdating = False
    With Worksheets("Report")
        Set DerCel = .Cells(Rows.Count, C.Column).End(xlUp)
        Tablo = .Range(C.Offset(1), DerCel).Resize(, 2).Value
        For i = 1 To UBound(Tablo)
            Tablo(i, 1) = Int(Tablo(i, 1))
            Tablo(i, 2) = Tablo(i, 2) - Int(Tablo(i, 2))
        Next i
    .Range(C.Offset(1), DerCel).Resize(, 2) = Tablo
    End With
End Sub

A+

Bonjour Frangy.

J'avais déjà fait la désactivation par blocage du rafraîchissement. Ce n'est pas très concluant. Le problème c'est que mon fichier fait en moyenne 1500 lignes. ça fait du boulot à traiter. ça fonctionne en tout cas. Je vais tenter la méthode du tableau. Je te dirais. Je vais regarder sur le forum pour mettre un message de patience pendant le traitement.

En tout cas, merci beaucoup à tous pour votre aide. c'est super sympa.

Bon weekend. je vous tiens au jus la semaine prochaine.

Bonjour Frangy.

J'avais déjà fait la désactivation par blocage du rafraîchissement. Ce n'est pas très concluant. Le problème c'est que mon fichier fait en moyenne 1500 lignes. ça fait du boulot à traiter. ça fonctionne en tout cas. Je vais tenter la méthode du tableau. Je te dirais. Je vais regarder sur le forum pour mettre un message de patience pendant le traitement.

En tout cas, merci beaucoup à tous pour votre aide. c'est super sympa.

Bon weekend. je vous tiens au jus la semaine prochaine.

Bonjour à tous,

ça serait bien, bcbg974, de ne pas remettre chaque fois la citation précédante, ça fait des écrans extrêmement longs et on ne sais plus où lire le nouveau texte de chacun

P.

Bonsoir.

ça fonctionne bien en mode tableau.

En revanche, ça ne change pas vraiment le temps de traitement. ça m'ira tout à fait cependant.

Merci à tous.

Rechercher des sujets similaires à "remise forme colonne date"