IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Convertir une date format texte en format date


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut Convertir une date format texte en format date
    Bonjour,

    je vous expose mon problème.
    j'ai une macro qui me permet de copier la partie que je veux de plusieurs fichiers Excel sont les ouvrir d'un dossier.
    jusqu'à là tout va bien.
    mon soucis est que la première colonne de mon fichier est une date mais qui est sous la forme "le 1 janvier" ou bien "le 25 janvier". je souhaite transformer cette date en format date.
    j'ai procéder de la façon suivante:
    1) je copie d'abord tout mes fichiers
    2) j’enlève "le" de chaque cellule
    3) j'essaye de transformer en format date avec la fonction CDate!!! mais ne marche pas!!
    sachant que je cherche à transformer par exemple "le 1 janvier" en 01/01/2012
    il faudra à chaque fois ajouter l'année en cours.
    voilà merci beaucoup pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Sub Compilation()
     
    Dim Fichier As String
    Dim Chemin As String
    Dim ClasseurSource As Workbook
     
     
    Application.DisplayAlerts = False 'Evite les messages d'Excel
    Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
     
    Chemin = "C:\Documents and Settings\Bureau\Dossier\" 'Chemin du répertoire contenant les fichiers
    Fichier = Dir(Chemin & "*.xls")
     
    Sheets("Feuil1").Select
    Cells.Clear ' tout effacer
    Cells(1, 2) = "Date"
    Cells(1, 3) = "Appels reçus en état ouverts"
    Cells(1, 4) = "Appels reçus en état bloqué"
    Cells(1, 5) = "Appels reçus en état renvoi général"
    Cells(1, 6) = "Appels reçus par entraide"
    Cells(1, 7) = "Nombre maximum d'appels simultanés"
    Cells(1, 8) = "Débordements pendant sonnerie"
    Cells(1, 9) = "Appels servis sans attente"
    Cells(1, 10) = "Appels servis avec attente"
    Cells(1, 11) = "Appels envoyés en entraide"
    Cells(1, 12) = "Appels redirigés hors ACD"
    Cells(1, 13) = "Appels dissuadés"
    Cells(1, 14) = "Appels traités par un GT Guide"
    Cells(1, 15) = "Appels envoyés à un GT remote"
    Cells(1, 16) = "Appels rejetés pour manque de ressources"
    Cells(1, 17) = "Appels servis par un agent"
    Cells(1, 18) = "Servis par un agent conformément à la QS"
    Cells(1, 19) = "Appels servis sans code de transaction"
    Cells(1, 20) = "Appels servis avec code de transaction"
    Cells(1, 21) = "Redistributions ACD"
     
    'Cells(1, 22) = "Appels reçus en état bloqué"
    'Cells(1, 23) = "Appels reçus en état bloqué"
    'Cells(1, 24) = "Appels reçus en état bloqué"
    'Cells(1, 25) = "Appels reçus en état bloqué"
     
     
     
    'lig = 2
     
    Do While Fichier <> ""
        'Range("A2") = Dir
        Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
        ClasseurSource.Worksheets("General").Select 'nom de la feuille source (commune à tous les fichiers sources)
     
        Range("B8:Y8").Select
        Range("Y8").Activate
     
     
     
        Range(Selection, Selection.End(xlDown)).Select 'selection de la zone à copier
        'Date = CDate(Range("A8"))
     
        Selection.Copy
     
        ThisWorkbook.Activate
     
        Sheets("Feuil1").Select
        fin = Cells(65535, 2).End(xlUp)(2).Select 'recherche de la première ligne vide
     
        ActiveSheet.Paste
     
        ClasseurSource.Close
     
        Fichier = Dir
    Loop
    Dim i As Variant
     
    Dim j As Variant
     
    i = 2
    j = 2
    ' boucle pour enlever "LE" de la date
    Do While i <> fin And i < 374
    Sheets("Feuil1").Cells(i, 2) = Right((Sheets("Feuil1").Cells(i, 2)), 10)
    i = i + 1
    Loop
     
    ' boucle pour transformer en format date
    j = 2
    Do While j <> fin And j < 374
       Sheets("Feuil1").Cells(j, 2) = CDate(Cells(j, 2).Value)
        ' i = i + 1
         j = j + 1
    Loop
     
    Application.EnableEvents = True
    Application.DisplayAlerts = True
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Utilise DateValue

    Exemple tiré du de l'aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyDate = DateValue("12 février 1969")    ' Renvoie une date.
    EDIT
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    C'est cette ligne qui n'est pas correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Cells(i, 2) = Right((Sheets("Feuil1").Cells(i, 2)), 10)
    Elle n'enlève "LE" que pour les mois d'au moins 7 lettres.
    Une meilleure formule pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Cells(i, 2) = Mid(Sheets("Feuil1").Cells(i, 2), 4)
    Cette expression prend tout le contenu de la cellule à partir du 4e caractère.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    oui j'avais vu cette exemple , mais je ne peux pas l'utiliser dans mon cas
    dans mes fichiers de base j'ai pas l'année!

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Exemple pour ton cas, l'année en cours est ajoutée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub MonTest()
    Dim Str As String
    Dim Dte As Date
     
    Str = "le 25 janvier"
    Str = Replace(Str, "le ", "")
    Dte = DateValue(Str)
    MsgBox Dte 'Donne 25/01/2012
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    @tedo02: pour enlever "le" j'y arrive bien, mais j'ai suivi ton conseil en utilisant le mid et ça marche bien aussi
    par contre j'ai toujours un soucis avec le Cdate

  7. #7
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-bonjour,
    Sinon, la fonction CDate prend l'année courante.
    Exemple dans la fenêtre d'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?CDate("25 avril")
    25.04.2012
    Citation Envoyé par arni63 Voir le message
    @tedo02: pour enlever "le" j'y arrive bien, mais j'ai suivi ton conseil en utilisant le mid et ça marche bien aussi
    par contre j'ai toujours un soucis avec le Cdate
    Ma remarque concernait les mois plus courts.
    Par exemple, avec mars,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?Right("le 25 mars", 10) 
    le 25 mars

  8. #8
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Re bonjour,
    je n'arrive toujours pas à trouver mon erreur!!
    Merci de me donner vos idées
    mercii

  10. #10
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Comment est ton code maintenant ?
    Qu'est-ce qui ne marche pas ? Est-ce qu'un message d'erreur s'affiche ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Bonjour,
    je vous redonne mon code
    je n'est pas d'erreur mais par contre, je n'arrive pas à convertir ma date en format date
    merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Sub Compilation()
     
    Dim Fichier As String
    Dim Chemin As String
    Dim ClasseurSource As Workbook
     
     
    Application.DisplayAlerts = False 'Evite les messages d'Excel
    Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
     
    Chemin = "C:\Documents and Settings\Bureau\Dossier\" 'Chemin du répertoire contenant les fichiers
    Fichier = Dir(Chemin & "*.xls")
     
    Sheets("Feuil1").Select
    Cells.Clear ' tout effacer
    Cells(1, 2) = "Date"
    Cells(1, 3) = "Appels reçus en état ouverts"
    Cells(1, 4) = "Appels reçus en état bloqué"
    Cells(1, 5) = "Appels reçus en état renvoi général"
    Cells(1, 6) = "Appels reçus par entraide"
    Cells(1, 7) = "Nombre maximum d'appels simultanés"
    Cells(1, 8) = "Débordements pendant sonnerie"
    Cells(1, 9) = "Appels servis sans attente"
    Cells(1, 10) = "Appels servis avec attente"
    Cells(1, 11) = "Appels envoyés en entraide"
    Cells(1, 12) = "Appels redirigés hors ACD"
    Cells(1, 13) = "Appels dissuadés"
    Cells(1, 14) = "Appels traités par un GT Guide"
    Cells(1, 15) = "Appels envoyés à un GT remote"
    Cells(1, 16) = "Appels rejetés pour manque de ressources"
    Cells(1, 17) = "Appels servis par un agent"
    Cells(1, 18) = "Servis par un agent conformément à la QS"
    Cells(1, 19) = "Appels servis sans code de transaction"
    Cells(1, 20) = "Appels servis avec code de transaction"
    Cells(1, 21) = "Redistributions ACD"
     
    'Cells(1, 22) = "Appels reçus en état bloqué"
    'Cells(1, 23) = "Appels reçus en état bloqué"
    'Cells(1, 24) = "Appels reçus en état bloqué"
    'Cells(1, 25) = "Appels reçus en état bloqué"
     
     
     
    'lig = 2
     
    Do While Fichier <> ""
        'Range("A2") = Dir
        Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
        ClasseurSource.Worksheets("General").Select 'nom de la feuille source (commune à tous les fichiers sources)
     
        Range("B8:Y8").Select
        Range("Y8").Activate
     
     
     
        Range(Selection, Selection.End(xlDown)).Select 'selection de la zone à copier
        'Date = CDate(Range("A8"))
     
        Selection.Copy
     
        ThisWorkbook.Activate
     
        Sheets("Feuil1").Select
        fin = Cells(65535, 2).End(xlUp)(2).Select 'recherche de la première ligne vide
     
        ActiveSheet.Paste
     
        ClasseurSource.Close
     
        Fichier = Dir
    Loop
    Dim i As Variant
     
    Dim j As Variant
     
    i = 2
    j = 2
    ' boucle pour enlever "LE" de la date
    Do While i <> fin And i < 374
    Sheets("Feuil1").Cells(i, 2) = Mid((Sheets("Feuil1").Cells(i, 2)), 4)
    DateValue (Sheets("Feuil1").Cells(i, 2))
    i = i + 1
    Loop
     
    ' boucle pour transformer en format date
    j = 2
    'Do While j <> fin And j < 374
      ' Sheets("Feuil1").Cells(j, 2) = CDate(Sheets("Feuil1").Cells(j, 2))
        'i = i + 1
         'j = j + 1
    'Loop
     
    Application.EnableEvents = True
    Application.DisplayAlerts = True
     
    End Sub
    je n'est pas d'erreur, mais contre j'ai pas le bon résultat
    par exemple pour 1 Janvier j'ai 40909
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ' boucle pour transformer en format date
    j = 2
    Do While j <> fin And j < 374
      Sheets("Feuil1").Cells(j, 2) = CDate(Sheets("Feuil1").Cells(j, 2))
     
         j = j + 1
    Loop
    j'ai essaye avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' boucle pour transformer en format date
    j = 2
    Do While j <> fin And j < 374
      Sheets("Feuil1").Cells(j, 2) = Format(CDate(Sheets("Feuil1").Cells(j, 2)), "dd/mm/yyyy")
     
         j = j + 1
    Loop
    mais par contre toutes les dates entre le 01 et le 12, ne sont pas transformées comme il faut???

    j'ai ce résultat:
    40909
    40940
    40969
    41000
    41030
    41061
    41091
    41122
    41153
    41183
    41214
    41244
    13/01/2012
    14/01/2012
    15/01/2012
    16/01/2012
    17/01/2012
    18/01/2012
    19/01/2012
    20/01/2012
    21/01/2012
    22/01/2012
    23/01/2012
    24/01/2012
    25/01/2012
    26/01/2012
    27/01/2012
    28/01/2012
    29/01/2012
    30/01/2012
    31/01/2012

    je ne voie ps d'ou peut venir mon erreur
    merci pour votre aide

  12. #12
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Bonjour,
    Le résultat est juste, le problème vient simplement du format.
    En effet, les dates sont stockées sous forme de nombre, par exemple 40909 est la valeur numérique du 1er janvier...
    Il suffit d'appliquer le format date aux cellules avec les valeurs 4xxxx et tout rentrera dans l'ordre.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    merci tedo01.
    merci par contre j'aimerais avoir un peu plus de détails
    je dois refaire un autre format date aprés mon format(cdate)
    ??

  14. #14
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-Bonjour,
    Il ne faut pas utiliser la fonction Format car elle transforme la donnée en chaîne de caractères.
    Le formatage sans toucher à la valeur se règle par la propriété .NumberFormat. Il suffit donc de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("Feuil1").Cells(j, 2)
       .Value = CDate(.Value)
       .NumberFormat="dd/mm/yyyy"
    End With

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    Re-bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    j = 2
    Do While j <> fin And j < 374
      NumberFormat = "dd/mm/yyyy"
      Sheets("Feuil1").Cells(j, 2) = CDate(Sheets("Feuil1").Cells(j, 2))
     
         j = j + 1
    Loop
    mon résultats:
    40933
    40934
    40935
    40936
    40937
    40938
    40939
    40909
    40910
    40911
    40912
    40913
    40914
    40915
    40916


    je suis un peu perdue, je cherche depuis 2 jours une solution à ça!!!!!

  16. #16
    Membre expérimenté
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Points : 1 580
    Points
    1 580
    Par défaut
    Re-Bonjour,
    Pour arriver au bon résultat il faut recopier correctement le code !
    Celui que je propose est à mettre tel quel (les 4 lignes) dans le bloc Do While, avant la ligne j = j + 1.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 64
    Points : 34
    Points
    34
    Par défaut
    désolée, je voulais adapter le code.
    mille merci
    ça marche à la perfection.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Problème de conversion d'une chaine de texte en format date.
    Par Axe_Débutant dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/01/2015, 03h29
  2. [AC-2007] Requete_transformer une date format texte en format date
    Par jj4822 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/11/2011, 19h23
  3. [XL-2003] Convertir format texte en format date
    Par Sibuxian dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/09/2010, 14h07
  4. [SQL] Comparaison d'une date au format FR avec la date du jour au format US
    Par delcada dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/10/2007, 15h22
  5. [Requête]Convertir une chaine de texte en format date
    Par emjie dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/04/2007, 00h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo