Dates en valeur : procédure qui fonctionne manuellement mais pas en VBA

Bonjour le forum,

Je souhaite transformer des dates textes en date valeur dans 2 colonnes, dans un fichier qui d'origine fait 18.000 lignes
Donc autant vous dire qu'un traitement ligne par ligne même en passant par un tableau est très looonng...

J'utilise manuellement une procédure qui est rapide et efficace en général
Je mets le chiffre 1 dans une cellule que je copie et je fais ensuite un collage spécial valeur par multiplication, et hop c'est fait

En revanche cette procédure ne fonctionne pas en VBA et je ne m'explique pas pourquoi

Si quelqu'un pouvait me dire SVP

Bonjour

Par vba il y a plus simple :

Sub MàJDate2()
  Sheets("Sheet1").Range("E:E").NumberFormat = "@"
End Sub

Et ce serait encore mieux si les données étaient sous forme de tableau structuré.

sub MajDate3()
   range("nomTableau[Date de saisie]").NumberFormat = "@"
End Sub

Cordialement

Bonjour Yal_excel et merci pour la réponse

Je n'ai pas compris le code du fait que cela transforme les cellules au format texte, ce n'est pas ce que je recherche

Le fichier est un export SAP juste pour un traitement spécifique de quelques secondes, donc pas besoin de tableau structuré

Pour être plus explicite, nous avons des soucis avec les dates dont les jours et les mois sont <= 12 nous avons une inversion date/mois

Le traitement que nous faisons manuellement fonctionne bien (du moins je pense) mais impossible de le faire fonctionner correctement en VBA

Voili, voilà

Ok, je n'avais pas compris. Le problème d'inversion des dates est effectivement bien pénible. Voici un code qui semble marcher :

Sub MàJDate5()
  Dim tb(), i!
  Dim dLig As Long
  With Sheets(1)
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    tb = .Range("E2:F" & dLig).Value2
    For i = 1 To UBound(tb)
      If tb(i, 1) <> "" Then tb(i, 1) = CDate(Format(CStr(tb(i, 1)), "dd/mm/yyyy"))
      If tb(i, 2) <> "" Then tb(i, 2) = CDate(Format(CStr(tb(i, 2)), "dd/mm/yyyy"))
    Next i
    .Range("E2:F" & dLig) = tb
  End With
End Sub

Bonjour,

Cette macro fonctionne

@+

5fallout45.xlsm (17.89 Ko)

effectivement les deux fonctionnent mais la mienne est deux fois plus rapide. Etant donné les temps mis en jeu c'est pas très important.

Testé sur 17640 lignes (dans le message original il est question de 18000 lignes) pour l'une 0,671875 s et pour l'autre 0,34375 s.

Bonsoir Messieurs et merci pour vos réponses

0,34375s pour 17.640 lignes ça m'irait très très bien, il faut que je teste sur mon vrai fichier, je vais tester ça demain matin

Je vous tiens au courant

A+

Bonjour Messieurs,

Alors je viens de tester vos codes sur mon vrai fichier et le code de yal_excel est vraiment plus rapide

Ca m'a permis de découvrir que ce qui ralenti aussi considérablement ma mise à jour, est ce code

    ' Ajouter la colonne de date de réception
    Application.StatusBar = "Veuillez patienter, application de la formule en colonne J"
    .Range("J1").Value = "Date de réception"
    With .Range("J2:J" & dLig)
      .FormulaLocal = "=SI(NB.SI(I$1:I2;I2)>1;"""";SI(F2<>"""";F2;E2))"
      .NumberFormat = "dd/mm/yyyy"
      .HorizontalAlignment = xlCenter
      .Columns.AutoFit
    End With

Je ne peux pas faire autrement, mais sur 18.000 ligne je ne vous raconte pas

Il faut que je puisse voir avec l'équipe si ils ne veulent pas remplacer cette formule par une date fixe

En tout cas merci à vous deux pour tout

Au plaisir

Rechercher des sujets similaires à "dates valeur procedure qui fonctionne manuellement pas vba"