Convertir une colonne en date, importation d'une machine

Bonjour à tous.

J'ai un problème plutôt bizarre avec une colonne de date et heure venant d'un résultat de machine (fichier xlsx)

Ma macro importe un fichier xlsx (celui de la machine) puis traite l'ensemble selon m'a demande

à la fin je lui demande =MAX(A:A) et il m'affiche 0/1/00 :00 idem pour le Min :(
Du coup j'ai regardé la colonne A de plus prés et Excel ne l'a pas reconnu comme colonne Date, alors je créé une macro en convertissant en passant par le menu excel (Données==> Convertir) et là sur le coup ça marche.
Donc j'utilise cette macro chaque fois que j'importe mes fichiers xlsx, mais là la macro ne fonctionne pas ...

Essayez de vous même c'est une chose étrange ...
J'avais déjà eu se problème on m'avait conseillé d'utiliser Power Query, mais là pour le coup je ne peux pas l'utiliser (pour X raisons)
18colonne.xlsm (48.77 Ko)

Bonsoir

Une autre manière de faire

Merci Yal,

J'ai testé le traitement est un peu long, mais lorsque j'ajoute ta source à ma macro de manière à traiter l'opération à l'ouverture de ma macro cela ne fonctionne pas .

A peu près la même mais en utilisant un tableau en mémoire environ 6 fois plus rapide

Sub ConvertiColonne2()
Dim t#
t = Timer
  Dim tb()
  Dim dl!, i!

  dl = Sheets("Report").Cells(Rows.Count, 1).End(xlUp).Row
  tb = Sheets("Report").Range("A1:A" & dl).Value2
  For i = 1 To UBound(tb)
    If IsDate(tb(i, 1)) Then tb(i, 1) = CDate(tb(i, 1)) Else tb(i, 1) = ""
  Next i
  Sheets("Report").Range("A1:A" & dl) = tb

MsgBox Timer - t

End Sub

J'ai testé le traitement est un peu long, mais lorsque j'ajoute ta source à ma macro de manière à traiter l'opération à l'ouverture de ma macro cela ne fonctionne pas .

Désolé mais je ne comprends pas ce que tu veux dire.

Non marche pas snifff

Je te joint le fichier et tu verras le résultat à l'ouverture malgré qu'il a fait le traitement

Comme j'ai dit plus haut, c'est le résultat d'une machine. (serrage à la clé dynamométrique électronique et autres )

Ma macro relève plusieurs options, j'ai mis ta macro dans mon programme et il ne convertie pas la colonne.

Le problème semble venir du format AM/PM. Une version qui chez moi fonctionne. A savoir si les temps sont au format français ou américain (mois/jour)

Hello,

Merci on dirait que ça fonctionne parfaitement :)je vais faire des essais au boulot demain , un grand merci à toi :)

Avec plaisir

Parfait je garde ça marche super bien en plus c'est assez rapide :)

Merci à toi

Bonjour,

Je reviens vers vous pour un problème lié à la date

Après avoir bien appliqué ce que Yal à eu la gentillesse de me préparer et qui marche très bien

Mon problème est que dans la colonne (A)

Je voudrais récupérer la date la plus proche et la lus éloigné (voir fichier joint)

Et comme dans cette colonne j'ai des cellule autre que les dates soit des "---" soit des "0", du coup il me traduit la plus ancienne date en 30/12/1899

Pourriez vous m'aider à trouver la solution s'il vous plait.

1testdate.xlsm (21.58 Ko)
Sub TestDate()
Maxi = WorksheetFunction.Large(Range("Temps"), 2)
Maxi = Format(Maxi, "dd/mm/yyyy")
Mini = WorksheetFunction.Small(Range("Temps"), 3)
Mini = Format(Mini, "dd/mm/yyyy")
Range("E2").Value = Mini
Range("E3").Value = Maxi
End Sub

Bonjour

Pourquoi faire simple quand on peut faire compliqué, en lieu et place de l'autre macro du même nom.

Sub ConvertiColonne2()
Dim t#
t = Timer
  Dim tb()
  Dim dl!, i!

  dl = Sheets("Report").Cells(Rows.Count, 1).End(xlUp).Row
  tb = Sheets("Report").Range("A1:A" & dl).Value2
  For i = 1 To UBound(tb)
    If IsDate(tb(i, 1)) Then tb(i, 1) = CDate(tb(i, 1)) Else tb(i, 1) = Empty
  Next i
  Sheets("Report").Range("A1:A" & dl) = tb
  Sheets("Report").Range("E2") = Format(Application.Max(Range("Temps")), "dd/mm/yyyy")
  Sheets("Report").Range("E3") = Format(Application.Min(Range("Temps")), "dd/mm/yyyy")
MsgBox Timer - t

End Sub

Et voilà

Ceci dit normalement ma macro n'insère que des vides dans la colonne A. Je ne vois pas d'où viennent des 0

Merci pour ton aide Yal

ça ne marche pô :(

Min=30/12/1899
Max=30/12/1899

Par contre si je lui demande d'afficher le resultat en colonne B

Sheets("Report").Range("B1:B" & dl) = tb

Voilà ce que j'obtiens, il y a un mieux ...

Min=07/01/2022 00:00:00
Max=07/01/2022 00:00:0

Bon ben on va reprendre à la base. Déjà je me suis un peu emmêlé dans mes fichiers et ce que je t'ai proposé n'utilisait pas le dernière version donc nulle et non avenue.

Je penses que le mieux serait que tu poste la feuille originale quitte à anonymiser ou supprimer les données confidentielles sans changer les noms de colonnes s'il y en a.

En attendant je regardes en prenant la bonne version.

Merci à toi,

Voici une feuille que je charge via ma macro

Bien sur j'ai effacé les colonnes que l'on a pas besoin.

1resultats.xlsx (36.99 Ko)

Les noms des colonnes je les ajoutes via ma Macro

Je n'ai pas nommé la colonne dans le fichier mais elle deviendra "Temps"

Et dans la macro il y a la tiennes :

Sub ConvertirDate()
  Dim tb()
  Dim dl!, i!
  Application.Goto Reference:="Temps"
  Lettre = Split(ActiveCell.Offset(0, Selection.Columns.Count - 1).Address, "$")(1)
  dl = Sheets("Report").Cells(Rows.Count, Selection.Columns.Count).End(xlUp).Row
  tb = Sheets("Report").Range(Lettre & "4:" & Lettre & dl).Value2 ' Adresse à adapter selon le contexte
  For i = 1 To UBound(tb)
    If IsDate(tb(i, 1)) Then
      tb(i, 1) = CDate(tb(i, 1))
      tb(i, 1) = CDbl(tb(i, 1))
    Else
      tb(i, 1) = ""
    End If
  Next i
  Sheets("Report").Select
  If tb(1, 1) <> "" Then Sheets("Report").Range(Lettre & "4:" & Lettre & dl) = tb ' Adresse à adapter selon le contexte
  Sheets("Report").Range(Lettre & "4:" & Lettre & dl).NumberFormat = "dd/mm/yyyy hh:mm:ss" ' Adresse à adapter selon le contexte
Worksheets("Accueil").Select
End Sub

sauf que ton fichier est totalement vide.

Une version basée sur la macro 3 qui semblait fonctionnelle. On oublie la plage nommée "Temps" qui risque de d'embrouiller les choses vu qu'elle peut être variable ce qui obligerait à la redéfinir à chaque import.

La colonne garde son nom "Temps" et les données se trouve à partir de la ligne 2.

En "E2" il y a le max et en "E3" le min

Si les données sont conformes tout devrait bien se passer.

Non regarde en colonne Q

ok mais si tu fais des ruses je ne vais pas m'en sortir. Ca aurait été beaucoup mieux si comme je te l'avais demandé tu n'avais pas supprimé les noms de colonnes.

Dans la feuille que tu importe il n'y a pas de noms aux colonnes et les données commencent en ligne 4?

C'est normal que les données commencent à la ligne 4 avec les noms de colonnes en ligne 3?

Où faut il écrire les résultats? Pour les données je suppose en lieu et place des données d'origines mais pour le min et le max?

Peu importe le principale est de trouver ce gros problème pour moi :)

Voilà un nouveau fichier avec la zone "Temps" en colonne A

1resultats.xlsm (37.40 Ko)

Tu as le temps hein, dans la semaine c'est bon ;)

1resultats.xlsm (37.63 Ko)
Rechercher des sujets similaires à "convertir colonne date importation machine"