Date : En manuel OK, en macro NOK

Bonjour, malgré quelques recherches, impossible de trouver une solution.

Après avoir chargé puis trié un .TXT dans Excel. Il faut que je supprime 1 espace devant toutes les dates de la colonne H, puis à l'aide du filtre je tri par ordre croissant.

Quand je fais la manip manuel ( Donnée, Convertir, Largeur fixe, Colonne non distribué etc. ) : aucun problème.

Quand j'enregistre la manip et que je l'appel à la suite d'une macro, à partir d'un certain nombre de ligne, les cellules ont une erreur " Cette cellule contient une date dont l'année comprend uniquement deux chiffres" ( Chose que je n'ai pas si je fais en manuelle ).

Si vous avez une idée je suis preneur !

Voici le code :

Sub date_MAJ1()

    Application.ScreenUpdating = 0
    Columns("H:H").Select
    Selection.TextToColumns Destination:=Range("H1"), DataType:=xlFixedWidth, _
        OtherChar:="|", FieldInfo:=Array(Array(0, 9), Array(1, 1)), _
        TrailingMinusNumbers:=True
    Range("H1").Select
    ActiveCell.FormulaR1C1 = " Dte trans."
    Range("H2").Select
    ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort.SortFields.Add Key:= _
        Range("H1:H6398"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
        :=xlSortNormal
    With ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    Application.ScreenUpdating = 1
    End With
End Sub

Salut Geoffrey,

Alors le Select de l'enregistreur de macro, faut s'en débarrasser, ça sert à rien et ça fait perdre de la mémoire!

Donc juste un petit clean de ton code pour le moment :

Sub date_MAJ1()

    Application.ScreenUpdating = 0
    'Columns("H:H").Select ___Regroupé en dessous
    Columns("H:H").TextToColumns Destination:=Range("H1"), DataType:=xlFixedWidth, _
        OtherChar:="|", FieldInfo:=Array(Array(0, 9), Array(1, 1)), _
        TrailingMinusNumbers:=True
    'Range("H1").Select ____Inutile (en dessous)
    Range("H1").FormulaR1C1 = " Dte trans."
    'Range("H2").Select ____Inutile
    ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort.SortFields.Add Key:= _
        Range("H1:H6398"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
'Pour remplir ton range, je te conseille de faire une variable string pour plus de souplesse 
'(aller chercher automatiquement la dernière ligne remplie)
    With ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    Application.ScreenUpdating = 1
    End With
End Sub 

Et ça te donne une erreur de code ton truc ou pas?

Parce que je vois pas trop là tout de suite...

Non le code ne me renvoie aucune erreur !

Effectivement le code n'est pas très propre, en plein apprentissage ! Merci pour tes conseils

Si c'est pas le code, c'est Excel qui te donne le message?

Regarde ce que tu peux mettre d'autre que xlFixedWidth pour le DataType... Sinon j'avoue que ça me saute pas aux yeux....

Pour le code, c'est normal, faut commencer!

Oui c'est excel, à partir d'un certain nombre de lignes selon le fichier, par exemple ligne 13 550, toutes les cellules suivantes ont le coin en haut à gauche vert indiquant une erreur, étrange ! Je vais poursuivre l'investigation...

Tu peux joindre ton fichier, ça pourrait nous aider!

Bonjour,

Petite idée ?

Mettre la colonne H au format Date

Je pense que les dates ne comportant que 2 chiffres seront traduites en 4 chiffre et devrait annuler les erreurs.

Mais bon, ce n'est qu'un essais.

A+

ça peut venir de cette ligne effectivement :

   Range("H1:H6398"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _

je peux utiliser ce genre de formule à la place ?

fin = .Range("H" & Rows.Count).End(xlUp).Row, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _

Oui si vraiment je bloque, je mettrai une partie du tableau

lermite : oui la colonne H est bien en format JJ/MM/AAAA, mais en y pensant, peut-être qu'en la mettant en JJ/MM/AA ça pourrait marcher vu que les données importer sont sous cette forme !


Non ça ne marche pas peu importe le format de la date...

Rectificatif:

Si les cellules concernées sont au format Texte ça va rien changer

J'ai fait un essais et avec ce code c'est ajusté...

    Columns("H:H").TextToColumns Destination:=Range("H1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True

A+

Pour remplir ton range, je te conseille de faire une variable string pour plus de souplesse (aller chercher automatiquement la dernière ligne remplie), donc quelque chose du genre :

Dim RangeTotal as String
RangeTotal = "H1:H" & Worksheets("Mouvements").Cells(Rows.Count,8).End(xlUp).Row

[....]

ActiveWorkbook.Worksheets("Mouvements").AutoFilter.Sort.SortFields.Add Key:= _
        Range(RangeTotal), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 

[....]

ça fonctionne avec ton bout de code lermite... merci !

Effectivement c'est mieux de chercher la dernière ligne que de sélectionner toute la colonne ReuK.

Encore merci

De nada!

Bonne continuation!

Rechercher des sujets similaires à "date manuel macro nok"