Valider un format "Date" copié d'un format texte

Bonjour au forum,

Dans le fichier joint, j'importe des données qui sont toutes au format texte (non modifiable car géré par un logiciel externe).

Par une macro et lors de l'importation, je convertis les cellules non vides de le colonne B contenant les dates au format "Date".

Ces cellules sont bien au format "Date" mais je suis obligé de les "valider" une par une avec la touche "Entrée" pour que le format attribué soit pris en compte (les cellules B2:B6 ont étés validées manuellement par la touche "entrée et se placent automatiquement à droite de la cellule, donc le format Date est bien pris en compte).

Sauriez-vous pourquoi cette validation est nécessaire et surtout, comment l'automatiser par VBA ?

Merci d'avance !

24fof.xlsx (8.83 Ko)

Bonjour,

Pourrais-tu nous montrer la macro que tu utilises pour l'importation?

Bonjour cousinhub,

Merci pour ta réponse.

Voici ma macro d'importation :

Sub Copy()

    Dim dl1 As Long, dl2 As Long, dl3 As Long 'déclaration des dernières lignes
    Dim wb1 As Workbook, wb2 As Workbook 'déclaration des classeurs
    Dim ws1 As Worksheet, ws2 As Worksheet 'déclaration des feuilles

If MsgBox("blabla" _
& Chr(10) & "Ce fichier se trouve dans le dossier : P:\blabla\Données brutes\", vbInformation + vbOKCancel, "Convertion") = vbCancel Then
Exit Sub

Else:

On Error GoTo Erreur 'si erreur, va directement à Erreur en fin de code

    ChDrive "P"
    ChDir "P:\blabla\Extraction\" 'chemin par défaut

    Set wb1 = ThisWorkbook 'définition du classeur 1 (ce classeur)
    Set ws1 = wb1.Sheets("Import") 'définition de la feuille 1 (Import de ce classeur)
    Set wb2 = Workbooks.Open(Application.GetOpenFilename) 'définition du classeur 2 (classeur à importer)
    Set ws2 = wb2.Worksheets(1) 'définition de la feuille 2 (1er feuille du classeur à importer)

    dl1 = ws1.Range("A" & Rows.Count).End(xlUp).Row + 1
    dl2 = ws2.Range("A" & Rows.Count).End(xlUp).Row

If MsgBox("blabla ?", vbQuestion + vbYesNo, "Importation") = vbNo Then
    wb2.Close False
Exit Sub

Else:

Application.ScreenUpdating = False

    ws1.Unprotect "mdp"
    ws2.Range("A3:I" & dl2).Copy
    ws1.Range("A" & dl1).PasteSpecial Paste:=xlPasteValues
    wb2.Close False

    With ws1

    dl3 = ws1.Range("A" & Rows.Count).End(xlUp).Row

        .Range("A11:A" & dl3).NumberFormat = "@"
        .Range("B11:B" & dl3).NumberFormat = "dd/mm/yyyy"
        .Range("C11:C" & dl3).NumberFormat = "@"
        .Range("D11:D" & dl3).NumberFormat = "@"
        .Range("E11:E" & dl3).NumberFormat = "@"
        .Range("F11:F" & dl3).NumberFormat = "@"
        .Range("G11:G" & dl3).NumberFormat = "@"
        .Range("H11:H" & dl3).NumberFormat = "@"
        .Range("I11:I" & dl3).NumberFormat = "@"
        .Range("A11:I" & dl3).WrapText = True
        .Range("A11:I" & dl3).HorizontalAlignment = xlCenter
        .Range("A11:I" & dl3).VerticalAlignment = xlCenter
        .Range("A11:I" & dl3).EntireRow.AutoFit
        .Range("A11:I" & dl3).Borders.Value = 1
        .Range("A11:I" & dl3).Borders(xlEdgeLeft).Weight = xlThick
        .Range("A11:I" & dl3).Borders(xlEdgeRight).Weight = xlThick
        .Range("A11:I" & dl3).Borders(xlEdgeTop).Weight = xlMedium
        .Range("A11:I" & dl3).Borders(xlEdgeBottom).Weight = xlThick
        .Range("A11:I" & dl3).Sort key1:=Range("A11"), Order1:=xlAscending
        .Range("A11:I" & dl3).Locked = True
        .Protect "mdp", True, True, False, AllowFormattingCells:=False, _
            AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
    End With
End If
End If

Application.ScreenUpdating = True

MsgBox "blabla !", vbInformation, "Importation réussie !"

Exit Sub 'Permet de sortir de la procédure et évite la gestion d'erreur (Erreur), si la macro
's'est déroulée sans encombre.
Erreur:
MsgBox "Aucun fichier sélectionné !", vbExclamation, "Annulation !"
ws1.Protect "mdp", True, True, False, AllowFormattingCells:=False, _
            AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

Bonjour,

tu aurais dû rester sur ton fil original...

https://forum.excel-pratique.com/viewtopic.php?f=2&t=138644&p=853418#p853418

Si c'est bien toujours le même souci...

Re,

C'est le même principe mais ce ne sont pas les mêmes fichiers (à importer et le destinataire)

Ici, le fichier d'importation est bien un fichier .xlsx mais formaté automatiquement par le logiciel en "Texte" pour toutes les cellules.

Bonjour au forum,

J'essaie toujours d'avancer mais impossible de trouver une solution.

Ce code ne modifie rien...

For Each c In Range("B11:B" & dl3)
                c.NumberFormat = "0"
                c.Value = c.Value
            Next c
        .Range("B11:B" & dl3).NumberFormat = "dd/mm/yyyy"

Et celui-ci me rend une erreur sur

c.Value = c.Value * 1
For Each c In Range("B11:B" & dl3)
                c.NumberFormat = "0"
                c.Value = c.Value * 1
            Next c
        .Range("B11:B" & dl3).NumberFormat = "dd/mm/yyyy"

Dur dur...

Bonjour,

En regardant ton fichier mis dans la première question, on peut voir que les "dates" sont au format jj.mm.aaaa hh:mm (donc avec des points...)

Si tu remplaces ces points par des "/", on convertit automatiquement

Columns("B:B").Replace ".", "/", xlPart

Peut-être?

Re,

Merci pour ta réponse.

Je pense avoir trouvé une solution :

.Range("A11:A" & dl3).NumberFormat = "@"
            For Each c In Range("B11:B" & dl3)
                c.Value = CDate(c)
            Next c
        .Range("B11:B" & dl3).NumberFormat = "dd/mm/yyyy hh:mm:ss"

Ça semble fonctionner, il faut que je fasse plusieurs tests pour vérifier

Bonjour,

si je ne m'abuse avec CDate(c) tu perds les heures.

Il faut les traiter en partie décimale à ajouter, ou bien regarder la proposition de cousinhub.

eric

Bonjour Eric,

CDate me conserve bien les heures

Tant mieux, mais c'est environ 100 fois plus lent que la proposition de cousinhub

Bonjour au forum,

Merci pour vos réponses.

J'ai testé la méthode de Cousinhub et c'est effectivement bien plus rapide...

Un tout grand merci à vous

Rechercher des sujets similaires à "valider format date copie texte"