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 :

Transformation de date en Nombre pour tri


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Transformation de date en Nombre pour tri
    Bonjour quelquun sait il pourquoi mon Excel ne veut pas transformer mes dates en Nombres afin que je puisse les trier ??

    Ya til un parametre a regler sous Excel ou en tout cas une solution?

    Voici le code utilisé ((Proposé par Ouskel)):
    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
     
    Sub TRIDATE()
    Sheets("Gestion").Activate
     
        Columns("K:K").Select
        Selection.NumberFormat = "0"
     
        DoEvents
        Cells.Select
        Selection.Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
       DoEvents
        Columns("K:K").Select
        Selection.NumberFormat = "dd/mm/yyyy"
    Merci à tout de suite

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Au lieu de donner le format 0, donne le format Général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Columns("K:K").NumberFormat = "General"
            '....
            '....
            Columns("K:K").NumberFormat = "m/d/yyyy"
    Et si je reprends ton exemple, tu obtiens bien pour le tri sur les cellules le classement de tes dates
    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
    Avant tri	 N° de série	Trié
    11/06/2008	39605	06/06/2008
    30/09/2008	39610	11/06/2008
    04/09/2009	39610	11/06/2008
    13/06/2008	39612	13/06/2008
    03/04/2009	39639	10/07/2008
    11/06/2008	39658	29/07/2008
    11/12/2009	39721	30/09/2008
    12/12/2008	39738	17/10/2008
    12/12/2008	39761	09/11/2008
    19/02/2009	39794	12/12/2008
    17/10/2008	39794	12/12/2008
    09/11/2008	39863	19/02/2009
    29/07/2008	39884	12/03/2009
    06/06/2008	39906	03/04/2009
    24/04/2009	39921	18/04/2009
    10/07/2008	39927	24/04/2009
    07/03/2010	40060	04/09/2009
    12/03/2009	40158	11/12/2009
    18/04/2009	40244	07/03/2010
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Marche pas...
    Voici mon code aprés modif:

    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
    Sub TRIDATE()
    Sheets("Gestion").Activate
     
        Columns("K:K").Select
        Selection.NumberFormat = "General"
     
     
        DoEvents
        Cells.Select
        Selection.Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
       DoEvents
        Columns("K:K").Select
        Selection.NumberFormat = "d/m/yyyy"
     
    End Sub

    Voici ma colonne de départ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    08/08/2009
    08/08/2008
    20/03/2009
    03/10/2008
    Et ma colonne a l'arrivé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    03/10/2008
    08/08/2008
    08/08/2009
    20/03/2009
    Sachant que si je met un Bloque au 1er DoEvents je constate que sur mon fichier excel rien ne change en apprence...la galere quoi!

    Merci quand meme pour ta proposition

  4. #4
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour tlm,

    Ya un truc qui m'échappe, pourquoi vouloir convertir les dates avant de les trier ? Si les cellules sont bien au format date le tri se fait sans problème.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu sembles bien avoir le résultat escompté, au final... Qu'est-ce qui te gène ? Qu'au pas à pas les modifs ne soient pas effectuées au fur et à mesure ?
    Si ce n'est que ça, c'est que tu dois avoir un "Application.screenupdating = false ailleurs dans ton code (?)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut On continu
    Il est en effet possible qu'un autre screenupdate soit dans le code,cependant le code ne fournit pas le résultat escompté, en effet

    en partant de ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    08/08/2009
    08/08/2008
    20/03/2009
    03/10/2008
    je devrais obtenir ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    08/08/2009
    20/03/2009
    03/10/2008
    08/08/2008
    or j'obtiens ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    03/10/2008
    08/08/2008
    08/08/2009
    20/03/2009
    Dans unn autre exemple voila ce que j'obtiens: (avant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    21/09/2008
    21/06/2008
    21/06/2008
    19/08/2008
    05/11/2008
    05/11/2008
    et après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    05/11/2008
    05/11/2008
    19/08/2008
    21/06/2008
    21/06/2008
    21/09/2008
    alors que je devrais avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    05/11/2008
    05/11/2008
    21/09/2008
    19/08/2008
    21/06/2008
    21/06/2008
    A plus

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Désolé mais avec ce code là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
            Columns("A:A").NumberFormat = "General"
            Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
            Columns("A:A").NumberFormat = "m/d/yyyy"
    End Sub
    J'obtiens ça
    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
    Avant traitement
    08/08/2009
    08/08/2008
    20/03/2009
    03/10/2008
    21/09/2008
    21/06/2008
    21/06/2008
    19/08/2008
    05/11/2008
    05/11/2008
    05/11/2008
    05/11/2008
    19/08/2008
    21/06/2008
    21/06/2008
    21/09/2008
    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
    Après traitement
    21/06/2008
    21/06/2008
    21/06/2008
    21/06/2008
    08/08/2008
    19/08/2008
    19/08/2008
    21/09/2008
    21/09/2008
    03/10/2008
    05/11/2008
    05/11/2008
    05/11/2008
    05/11/2008
    20/03/2009
    08/08/2009
    Un problème de version ? Quelle version as-tu ? dans quelle langue ?
    A+

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Et bien ca ne marche pas chez moi!!??
    Pour mes versions, je suis contraint de travailler sur Excel 2000 et donc VBA6.0.
    Après verif, aucun screenupdating n'interfere en effet siu je fais un Block a DoEvents, je constate qu'en apparence les dates nont pas changées de format mais lorsque je vais verif le Format de cellule, je constate que la cellule n'est plus au Format dat mais Standard (Qui correspond à general, je crois)
    Ainsi le probleme du tri reste le meme.

    Peut etre dois-je modifier une des options d'excel ou de vb. afin que la modif du format soit effecteué et le tri ensuite.

    Merci qd meme
    @ plus

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Attention ! si des dates sont au format standard, c'est peut etre parce que ces dates sont au format américain, du coupo tes dates sont "mal triées".
    De plus, vu qu'elles sont pas au format date, ça peut pas être triée par rapport à sa valeur nominale

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, je teste sur VBA97
    A+

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Sur 97, effectivement, il semble que le format appliqué à la colonne en sortie soit bien le format attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Columns("A:A").NumberFormat = "General" 'laisse General
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
        Columns("A:A").NumberFormat = NumberFormat = "dd/mm/yy"
    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
    Avant		Trié
    08/08/2009	21/06/08
    21/06/2008	21/06/08
    21/06/2008	21/06/08
    21/06/2008	21/06/08
    21/06/2008	08/08/08
    08/08/2008	19/08/08
    19/08/2008	19/08/08
    19/08/2008	21/09/08
    21/09/2008	21/09/08
    21/09/2008	03/10/08
    03/10/2008	05/11/08
    05/11/2008	05/11/08
    05/11/2008	05/11/08
    05/11/2008	05/11/08
    05/11/2008	20/03/09
    20/03/2009	08/08/09
    Je me souviens d'ailleurs que c'est ce que je faisais sur cette version.
    A+

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut precision
    En fait le format lors de louverture de mon fichier est :"standard"

    Si j'effectue une modification du format de la cellule, celle ci ne change pas .

    En effet je constate que lorsque je re check le format il est theorie chagé mais n'apparait pas sur l'ecran!

    Cependant si je double clik sur l'une des cellule concernée et que j'appuie ensuite sur entree, alors la le changement s'opere!!! Dingue!!

    J'ai donc fai une boucle censée "double cliquer sur chacune de mes cellule de ma colonne (activecell) mais ca ne marche pas....

    Et bien bonne aprem a vous tous
    A tres vite

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, je crois comprendre. Comment rentres-tu tes dates dans tes cellules ?

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Comment je les rentre
    Elles sont importées d'une autre feuil via une macro et atterissent au format standard dans la colonne en question.

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Passe le code de la ligne qui les copie

  16. #16
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Le code qui copie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim echeancemin As Date
    Dim echeancemax As Date
     
    lDerniereLigneReelle = Range("A1").End(xlDown).Address
    lDerniereLigneReelle = Range(lDerniereLigneReelle).Row
     
    For u = 2 To lDerniereLigneReelle
     
     If CDate(Range("K" & u)) <= CDate(UserForm1.echeancemax) And CDate(Range("K" & u)) >= CDate(UserForm1.echeancemin) Then
     
           Rows(u).Copy Destination:=Worksheets("Gestion").Rows(u).EntireRow         End If
     
    Next u
    En fait le User entre une date Min et une Max et si la date est entre ces deux date elle est copiée dans le fichier Gestion ou je souhaite faire un tri des dates!!

    En esperant que tu sois sur la bonne voie

    Merci d'avance pour ton prochain message!!

  17. #17
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    QUand j'ai un problème de date lors d'importations pour ma part qui se mettait au format américain, j'utilisais cette fonction :

    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
     
    Private Sub ChangeDate(ColonneChanges As Long)
    On Error GoTo gestionerreur
    Dim j As String
    Dim m As String
    Dim a As String
    Dim i As Integer
    Dim k As Integer
    Dim MaDate As Date
    Set f = Worksheets(1)
    k = 2
    While Cells(k, 1).Value <> ""
        k = k + 1
    Wend
    For i = 2 To k - 1
        If Cells(i, ColonneChanges).Value = "" Then
            Cells(i, ColonneChanges).Value = ""
        ElseIf Cells(i, ColonneChanges).NumberFormat = "General" Then
            j = Left(Cells(i, ColonneChanges).Value, 2)
            m = Mid(Cells(i, ColonneChanges).Value, 4, 2)
            a = Mid(Cells(i, ColonneChanges).Value, 7, 4)
            MaDate = DateSerial(a, m, j)
            Cells(i, ColonneChanges).Value = CDate(MaDate)
        Else
            m = Left(Cells(i, ColonneChanges).Value, 2)
            j = Mid(Cells(i, ColonneChanges).Value, 4, 2)
            a = Mid(Cells(i, ColonneChanges).Value, 7, 4)
            MaDate = DateSerial(a, m, j)
            Cells(i, ColonneChanges).Value = CDate(MaDate)
        End If
        Cells(i, ColonneChanges).NumberFormat = "dd/mm/yyyy"
    Next i
    Exit Sub
    gestionerreur:
    If Err.Number = 13 Then
        Resume Next
    End If
    End Sub
    Bon cette fonction date un peu, donc il faut que tu l'adapte (surtout pour avoir la dernière ligne )
    Mais si tu l'adapte bien, et que tu la fait passer sur la colonne où tu as tes dates, tu ne devrais plus avoir de souci par la suite pour trier

    D'ailleurs, si tu te penche un peu sur la question, tu verra que ma fonction est très simple

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Remplace
    Rows(u).Copy Destination:=Worksheets("Gestion").Rows(u).EntireRow
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Rows(u).Copy Worksheets("Gestion").Cells(u,1)
    A tout hasard.
    Le problème est en amont. Si tu est contraint de mettre
    If CDate(Range("K" & u)) <= ......
    C'est que la colonne K n'est déjà pas au format date.
    Pour vérifier, teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox IsDate(Range("K" & u))
    Si le format n'est pas un format date, tu copies (sans doute) du texte.
    Le phénomènes que tu observes vient sans doute de là. En tout cas, si tu as du texte à la place d'une date, c'est bien ce que l'on observe.
    Tu vois ce que tu peux faire...
    A+

  19. #19
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 50
    Points : 33
    Points
    33
    Par défaut Après coup
    Bon et bien j'ai changé ma ligne d'import et effectué le test et resultat vba me renvoie que mes cellules sont des dates alors que qd je fais clik droit, format de cellule, le format indiqué est Standard......c'est à ny rien comprendre
    Pourquoi, help!!!!
    Que faire?????????

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Essaie ça, chez moi ça fonctionne.
    Puisque ta colonne est au format date, tu ne change rien. Contente-toi de copier la plage et de la coller en tant que valeur sur place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Application.CutCopyMode = False
        Range("K1:K" & range("K65536").end(xlup).row).copy
        Range("K1").PasteSpecial Paste:=xlPasteValues
    Tes dates devraient se retrouver à droite dans leurs cellules.
    Si ça ne fonctionne toujours pas, j'ai une autre option
    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Transformer du text en nombre pour une progressbar
    Par HCKstudio dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 06/04/2015, 03h04
  2. Somme de nombre pour une date maximum
    Par HurGeek dans le forum SQL
    Réponses: 7
    Dernier message: 22/05/2012, 17h30
  3. [MySQL] Transformer une date française pour insérer dans mysql
    Par boubou_s dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/10/2008, 15h50
  4. [SQL] Transformer une date d'un calendrier en timestamp pour trie
    Par Seta-san dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/10/2007, 20h37
  5. Excel:probleme pour transformer du texte en nombre par macro
    Par pcheval dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/11/2005, 22h18

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