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 :

Conversion format Date


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut Conversion format Date
    Bonjour,

    j'ai vu plusieurs discussions sur des problèmes de format mais je n'ai pas réussi à trouver chaussure à mon pied...
    Je suis très loin d'être une brute en VBA donc j'explique.
    J'ai des dates dans une colonne sous ce format: 07/12/2007. J'aimerais modifié ce format date et le mettre en Value ou String...
    Je sais pas si j'ai été très clair Bref il me faudrait n'importe quel format autre qu'un format date... Si c'est faisable!

    Merci de votre aide

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Str(ladate) transformera en chaîne de caractère n'importe quelle ladate typée en date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim ladate As Date
      ladate = #1/1/2001#
      MsgBox Str(ladate)
    si toutefois tu veux éviter certaines surprises (invsersion de mois et du jour) , il vaudra mieux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Day(ladate) & "/" & Month(ladate) & "/" & Year(ladate)

  3. #3
    Membre Expert
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Billets dans le blog
    14
    Par défaut
    Bonsoir
    tu veux en faire quoi aprés de ta date?
    L'imagination est plus importante que le savoir.... A . Einstein. :pastaper:
    https://www.developpez.net/forums/blogs/179588-cb_60/
    Merci de cliquer sur :resolu:pour clore cette discussion.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Il faudrait déjà comprendre ce que tu souhaites obtenir...

    Est-ce le format d'affichage qui té dérange, ou veux-tu que ce soit la valeur qui, de date, soit transformée en texte? Comme ta question est imprécise, les réponses risquent d'être imprécises. Et si tu nous expliquais le but de la manoeuvre, nous pourrions sûrement mieux t'aider.

    Dans le premier cas, va voir le format de la cellule. Tu fais afficher ta date sous différents formats, en gardant la valeur comme une date, et donc en pouvant effectuer des calculs, des tris et des filtres sur une valeur date.

    Si tu veux transformer la valeur Date en valeur Texte, sans VBA, tu peux utiliser dans une autre cellule, la formule
    adaptée à ta cellule, en adaptant également le format de retour. Après, un petit copier/collage spécial sur la celluel d'origine et le tour est joué.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Bonsoir

    Il faudrait déjà comprendre ce que tu souhaites obtenir...

    Est-ce le format d'affichage qui té dérange, ou veux-tu que ce soit la valeur qui, de date, soit transformée en texte? Comme ta question est imprécise, les réponses risquent d'être imprécises. Et si tu nous expliquais le but de la manoeuvre, nous pourrions sûrement mieux t'aider.

    Dans le premier cas, va voir le format de la cellule. Tu fais afficher ta date sous différents formats, en gardant la valeur comme une date, et donc en pouvant effectuer des calculs, des tris et des filtres sur une valeur date.

    Si tu veux transformer la valeur Date en valeur Texte, sans VBA, tu peux utiliser dans une autre cellule, la formule
    adaptée à ta cellule, en adaptant également le format de retour. Après, un petit copier/collage spécial sur la celluel d'origine et le tour est joué.
    Et bien! C'est plutôt le format en VBA qui me dérange... En fait j'ai créer un filtre. Dans chaque ComboBox j'ai une liste déroulante de chaines de caractère toutes bêtes... Mon filtre trie très bien ces données! En revanche lorsque je souhaite trier par date je perd toutes mes sélections qui sont dans mes autres ComboBox (qui sont du texte) Je me suis donc dit que ce problème était dû au format Date qu'il fallait changer... Mais je ne suis sur de rien! J'essaye...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Avec le code vba que tu utilises, c'est plus simple pour comprendre...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Alors attention c'est lourd...

    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
    Dim Cplt As Boolean
    Dim n As Integer
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 1, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt1_Click()
    Call Filtre(Me, Flt1, ColLotp)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 2, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt2_Click()
    Call Filtre(Me, Flt2, ColDec)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 4, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt4_Click()
    Call Filtre(Me, Flt4, ColNat)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 5, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt5_Click()
    Call Filtre(Me, Flt5, ColLib)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 6, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt6_Click()
    Call Filtre(Me, Flt6, ColText)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 7, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt7_Click()
    Call Filtre(Me, Flt7, ColDatF)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 8, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt8_Click()
    Call Filtre(Me, Flt8, ColDatC)
    End Sub
    'Lorsque l'on sélectionne une donnée dans la liste défilante du filtre 9, alors la macro "Filtre"
    'est appelée:
    Private Sub Flt9_Click()
    Call Filtre(Me, Flt9, ColB)
    End Sub
    ----------------------------------------------------------------------
    Sub Filtre(MaForm, Flt, xCol)
    If Activate = True Then Exit Sub
    Activate = False
    Call ChoixTag(Flt)
    For n = ColLotp To ColB
        Select Case n
            Case xCol
                GoTo Suite
            Case ColLotp To ColDec
                Call ListEDEFlt(MaForm.Controls("Flt" & n), Flt.Tag, xCol, n)
            Case ColNat To ColB
                Call ListEDEFlt(MaForm.Controls("Flt" & n), Flt.Tag, xCol, n)
        End Select
    Suite:
    Next n
    End Sub
    -------------------------------------------------------------------
    Static Sub ChoixTag(CHOIX)
    'Transforme la valeur "Tous" d'une ListeBox ou d'un ComboBox en .Tag "**"
    'utilisé pour comparer des chaines de caractére à l'aide de "Like"
    If CHOIX = "Tous" Then
        CHOIX.Tag = "*" & "*"
    Else
        CHOIX.Tag = CHOIX
    End If
    End Sub
    --------------------------------------------------------------------
    Sub ListEDE(EDE, FltLotp, DECP)
    ReDim TabNCol(LnMax, 4)
    i = 0
    For nLnD = LnMin To LnMax
        If shD.Cells(nLnD, ColLib) <> "" _
        And shD.Cells(nLnD, ColLotp) Like FltLotp.Tag _
        And shD.Cells(nLnD, ColDec) Like DECP.Tag _
        And shD.Cells(nLnD, ColB) <> "non" Then
            Call ConstTabNCol(i, shD.Cells(nLnD, ColLotp), _
            shD.Cells(nLnD, ColLib), shD.Cells(nLnD, ColText), _
            shD.Cells(nLnD, ColNat), shD.Cells(nLnD, ColObj))
            i = i + 1
        End If
    Next nLnD
    EDE.List() = TabNCol
    Call CleanList(EDE)
    End Sub
    Voila très courtement mon charabia...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Désolé. Ton code ne m'aide pas à comprendre...

    Tu dis
    (...)
    lorsque je souhaite trier par date je perd toutes mes sélections qui sont dans mes autres ComboBox (qui sont du texte)
    (...)
    Comment tries-tu sur la date? Nulle part dans ton code je ne vois de tri...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Parce que j'essayais de pas trop en mettre mais j'en ai oublié...

    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
    Sub ValidFiltre()
    'Permet de figer l'écran pendant la réalisation de tri de mon filtre:
    Application.ScreenUpdating = False
    'Si la zone de texte "N° d'Objet" est vide, alors:
    If Obj.Value = "" Then
        'Boucles pour les lignes (nLn) allant de "LnMin" (=14) jusqu'à "LnMax" (=Variable):
        For nLn = LnMin To LnMax
            'Boucles sur les colonnes allant de "ColLotp" (=1) jusqu'à "ColB" (=9):
            For n = ColLotp To ColB
            'Lorsque la boucle arrive à la colonne 3 alors elle passe directement à la 4. La colonne 3 ne nous
            'intéresse pas dans ce cas car c'est la colonne des N° d'Objet:
            If n = 3 Then GoTo Suite5
                'Appel de la macro "ChoixTag":
                Call ChoixTag(EDEFltForm.Controls("Flt" & n))
                'Si la valeur de ma collection de cellule dans ma feuille D est la même que celle choisie
                'dans mon filtre, alors "MaVerif = True":
                If shD.Cells(nLn, n) Like EDEFltForm.Controls("Flt" & n).Tag Then
                    MaVerif = True
                Else
                    MaVerif = False
                    Exit For
                End If
    Suite5:
            Next n
            'Si "MaVerif = True" alors:
            If MaVerif = True Then
                'Boucles sur chaque ligne de la feuille D en comptant les cellules mergées de façon
                'à ne pas cacher des valeurs qui seraient dans ces mêmes cellules. Cela est nécessaire
                'lorsque l'on cache les lignes qui ne sont pas cibles. Ainsi il ne reste plus que les
                'lignes en rapport avec la selection du filtre:
                For n = nLn To nLn + shD.Cells(nLn, ColLotp).MergeArea.Count - 1
                    shD.Rows(n).EntireRow.Hidden = False
                Next n
            Else
                'Appel de la macro "CpltTrue":
                Call CpltTrue(nLn)
            End If
        nLn = nLn + shD.Cells(nLn, ColLotp).MergeArea.Count - 1
        Next nLn
    'Sinon si la zone de texte "N° d'Objet" n'est pas vide, alors:
    Else
    '    Boucles sur les lignes allant de LnMin jusqu'à LnMax:
        For nLn = LnMin To LnMax
            'Si la valeur de la cellule (Matrice: Colonne "ColObj"/Ligne "nLn") est égale à la valeur rentrée
            'dans la zone de texte "N° d'objet" alors "MaVerif = True":
            If shD.Cells(nLn, ColObj) = Obj.Value Then
                MaVerif = True
    '            Une fois la valeur trouvée dans ma liste, "xln" garde en mémoire le numéro de la ligne
    '            "nln" où se situe ma valeur recherchée:
                xLn = nLn
                Exit For
            Else
                MaVerif = False
            End If
        Next nLn
    '    Si "MaVerif" est égale à "vrai", alors:
        If MaVerif = True Then
    '        Boucles sur les lignes allant de LnMin jusqu'à LnMax:
            For nLn = LnMin To LnMax
    '            Si "nln" a en mémoire "xln", alors:
                If nLn = xLn Then
                'Boucles sur les lignes. La ou les ligne(s) contenant les valeurs recherchées ne doi(ven)t
                'pas être cachée(s):
                    For n = nLn To nLn + shD.Cells(nLn, ColLotp).MergeArea.Count - 1
                        shD.Rows(n).EntireRow.Hidden = False
                    Next n
                Else
    '                Appel de la macro "CpltTrue":
                    Call CpltTrue(nLn)
                End If
                nLn = nLn + shD.Cells(nLn, ColObj).MergeArea.Count - 1
            Next nLn
        Else
    '        Message d'erreur demandant à l'utilisateur de saisir un autre numéro d'objet:
                Rep = MsgBox("Entrez un autre N° d'objet", vbOKOnly, "N° d'objet non valide")
        End If
    End If
    'Permet de défiger l'écran après la réalisation de tri de mon filtre:
    Application.ScreenUpdating = True
    End Sub
    ------------------------------------------------------------------------
    Sub CpltTrue(nRow)
    'S'il s'agit d'une recherche complementaire (Cplt = True),les lignes qui sont
    'deja affichées doivent le rester:
    If Cplt = True And shD.Rows(nRow).EntireRow.Hidden = False Then
        shD.Rows(nRow).EntireRow.Hidden = False
    Else
        'Sinon dans tous les autres cas, les lignes non cibles doivent être masquées:
        For n = nRow To nRow + shD.Cells(nRow, ColLotp).MergeArea.Count - 1
            shD.Rows(n).EntireRow.Hidden = True
        Next n
    End If
    End Sub

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je pense que c'est impossible de pouvoir comprendre ton code sans le classeur qui va avec.

    Cela étant dit, si je reprends ta question initiale:
    J'ai des dates dans une colonne sous ce format: 07/12/2007. J'aimerais modifié ce format date et le mettre en Value ou String...
    A quel moment souhaites-tu modifier ce format?

    De façon définitive dans la feuille? J'ai donné une solution sans vba, et voici une solution avec VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub DatesEnTexte(Plage As Range, FormatDate As String)
        Dim Cellule As Range
     
        For Each Cellule In Plage.Cells
            If IsDate(Cellule.Value) Then Cellule.Value = Format(Cellule.Value, FormatDate)
        Next Cellule
    End Sub
    Lors d'un chargement de combobox? Utilise alors la méthode AddItem du combo et passe la valeur en la transformant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combobox1.additem format(cellule.Value,"dd/mm/yy")
    A un autre moment? Précise ton souhait.

    A bientôt...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 35
    Par défaut
    Merci l'ami j'essaie et puis je vois ce que ça donne...

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Pourais tu nous indiquer dans quel parti de ton code le format date pose un probleme? si c'est juste un probleme de format de date qui n'est pas reconnu par ton filter, pourquoi vouloir modifier toutes tes cellules autant trouver le bon formatage au moment voulu.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Conversion format date
    Par cobra02 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2009, 11h49
  2. Conversion format date
    Par charliejo dans le forum C#
    Réponses: 4
    Dernier message: 12/01/2009, 23h52
  3. conversion format dates
    Par NATOU2 dans le forum VBA Access
    Réponses: 7
    Dernier message: 23/01/2008, 10h02
  4. CONVERSION FORMAT DATE SPECIAL
    Par plutonium719 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/11/2007, 09h49
  5. Conversion format Date
    Par Swaks dans le forum DB2
    Réponses: 1
    Dernier message: 09/11/2006, 14h55

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