Simple conversion des données par le VBA

Bonjour !

Ma demande vient d'un problème fréquent du logiciel que j'utilise pendant mon stage. Quand j'extrais des données du logiciel et que je les mets sur excel, si ce sont des dates, elles ne sont pas directement reconnues comme telles.

Il faut donc que je passe par un simple " convertir les données" en sélectionnant la colonne avec les dates puis directement je clique sur le bouton " terminer " et ça me les transforme en date.

( ça ne marche pas avec en changeant le format des cellules, quand ça ne marche pas, ça se voit facilement car le tri proposé par excel dans le tableau ne se fait que date par date

1

alors que quand c'est bien converti : excel propose un tri par année

2

)

Et donc j'ai souhaité créer une macro pour convertir toutes les données de la colonne D, en utilisant l'enregistrement de macros, ça m'a donné ce code :

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

Mais ça ne marche pas, comme vous pourrez le voir sur le fichier, quand on utilise le bouton et donc la macro, ça ne les convertit pas tous. ( même si ça marche pour la plupart )

Si quelqu'un connait une macro qui pourrait tout convertir dans la colonne 4 ça m'aiderait beaucoup !

Merci d'avoir lu !

PS : Cinq minutes après avoir posté le fichier, j'ai remarqué que j'avais mal mis les données, donc j'ai remis le bon fichier ^^

Bonjour,

Essaie avec :

FieldInfo:=Array(1, 4)

Merci de la réponse !

ça marche parfaitement merci beaucoup

PS : par contre j'ai un petit soucis, quand on clique deux fois sur la macro, ça convertir la date en format américain, est ce qu'il y a une solution ?

Bonjour,

Essaie ainsi.

Je ne comprends pas le pourquoi de la chose.

Cdlt.

Public Sub ConvertTextToDate()
Dim rng As Range
    Set rng = ActiveSheet.ListObjects(1).ListColumns(4).DataBodyRange
    If VarType(rng.Cells(1, 1)) <> 7 Then
        rng.TextToColumns _
                DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, _
                FieldInfo:=Array(1, 4)
    End If
End Sub

ça marche parfaitement merci beaucoup !

Question Post-résolu :

Pour le code, si je veux le changer pour l'appliquer à la colonne 7

Est ce qu'il faut juste changer le numéro dans ListColumns ?

Dim rng As Range
    Set rng = ActiveSheet.ListObjects(1).ListColumns(4).DataBodyRange
    If VarType(rng.Cells(1, 1)) <> 7 Then
        rng.TextToColumns _
                DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, _
                FieldInfo:=Array(1, 4)
    End If

Bonjour,

ListColumns(4) représente la 4e. du tableau.

Si tu veux travailler avec la colonne 7, tu modifies en conséquence.

Cdlt.

Ah, je n'ai donc qu'à changerle numéro dans

ListColumns(4)

C'est parfait !

Mais je ne comprends pas pourquoi je ne dois pas changer également le numéro dans

 FieldInfo:=Array(1, 4)

? ( car ça marche si je ne modifie pas cette ligne )

Merci encore !

Bonjour,

Conserve cette ligne, par précaution :

 FieldInfo:=Array(1, 4)

Elle spécifie le type de retour que tu souhaites.

Cdlt.

Super, merci beaucoup !

Rechercher des sujets similaires à "simple conversion donnees vba"