Format date pour nuage de points

richert90

XLDnaute Occasionnel
Bonjour à tous

Pour tracer un graphique en fonction du temps, je dois avoir en abscisse des dates.
Au départ la colonne de date est sous la forme MM/JJ/AA, j'ai réussi à la modifier pour obtenir ce format JJ/MM/AAAA grâce à ce code:

Code:
Dim tmp As String
    Dim tmpBis As String
    Dim tmpFin As String
    Dim Annee As String

For boucle = 2 To i

        tmp = Left(Cells(boucle, 1), 2)
        tmpBis = Mid(Cells(boucle, 1), 4, 2)
        tmpFin = Right(Cells(boucle, 1), 2)
        Cells(boucle, 1).Value = tmpBis & "/" & tmp & "/" & Annee & tmpFin
    
    Next boucle

Puis je fais ça pour définir tout ça en date:

Code:
 Range("A2:A" & i).Select
    Selection.NumberFormat = "m/d/yyyy"
    Range("A2").Select

Mais en traçant le graphique, je n'ai pas de dates en abscisse mais des nombres : 500,1000 etc...


Comment faire pour résoudre cela??

Merci d'avance,
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Format date pour nuage de points

Bonjour

parce que tes dates n'en sont plus...
D'où viennent tes données ? Où sont elles quand tu commences ta macro : dans le classeur ? dans un fichier texte externe ?
Au départ tes dates sont sous forme de date reconnues comme telles par excel ou pas ?
Si quand elles arrivent dans ta macro elles sont au format américain, il suffit de formater au moment ou tu les injectes dans ta feuille :
par exemple si tu as une date américaine en A1
range("A2")=format(range("A1"),"dd/mm/aaaa") te la mets au bon format en A2

Si ta date est au départ sous un format texte, non reconnu comme une date par excel, il faut reconstituer en VBA une date avec la fonction
=dateserial(année,mois,jour)
ou avec une formule de feuille = date(année, mois, jour)
en extrayant comme tu l'as fait ces trois paramètres (tu peux utiliser split pour ça plutot que mid , droite gauche...)
 

richert90

XLDnaute Occasionnel
Re : [RESOLU] Format date pour nuage de points

Bonjour,
je reviens pour le même type de problème...

En fait j'importe un fichier texte avec l'assistant Excel (macro enregistré en VBA). La première colonne est une colonne avec la date et l'heure. Je l'ai laissé en "standard" (?) puis j'insère une colonne avant celle-ci et je récupère juste la date (qui est déjà sous la forme JJ/MM/AAA).
Cette colonne sera plus tard placé dans une zone de liste d'un UserForm.
Le problème c'est que sur ma version d'Excel en Francais j'ai bien les dates dans ma zone de liste sous le format JJ/MM/AAAA mais je l'ai testé sur un autre PC avec Excel en anglais et là j'ai dans la zone de liste le format des date suivant MM/JJ/AAAA ...

Comment résoudre cela ???
Merci d'avance de votre aide,

Misange, est-ce que cela peut marcher dans mon cas:

Code:
for i=2 to derniere_ligne
   Range("B" & i) = Format(Range("A" & i), "m/d/yyyy")
next i

Autrement dit est-ce que ça marchera aussi sur la version d'excel en anglais?? (je n'ai pas l'occasion de tester sur cette version aujourd'hui).
 

Misange

XLDnaute Barbatruc
Re : Format date pour nuage de points

Bonjour
Comment récupères tu la date sans l'heure après importation ? Par formule ? Laquelle ? Par macro ? Quel code. Je n'ai pas de boule de cristal.
A priori en tous cas excel voit bien que c'est une date puisque dans un excel en version US il la met au format américain (ce que l'on souhaite faire en général). Tu ne dis pas pourquoi tu veux ouvrir ton fichier dans un excel anglais, ni ce que tu souhaites y voir. Impossible de te répondre. Ca dépend aussi de la façon dont les paramètres régionaux sont réglés sur le PC en version anglaise.
 

richert90

XLDnaute Occasionnel
Re : Format date pour nuage de points

Re,

Je vais essayer d'être plus précis

Quant j'importe le fichier en VBA (depuis la source de données texte (c'est un fichier CSV)), la première colonne (date + heure: JJ/MM/AAAA HH:MM:SS) contient des valeurs de types "personnalisés" . Ensuite j'insère une colonne avant celle-ci et je récupère juste la date de cette manière:

Code:
Sub colonne_date()

    'Prg permettant à partir de la 1iere colonne du fichier d'avoir juste la date (sans l'heure..)
    
    Dim a As Integer
    Dim valeur As String
    
    Sheets(1).Select
    Cells(1, 1).Value = "Time"
 
    For a = 2 To i 'i dernière ligne occupée
        valeur = Cells(a, 2).Value
        Cells(a, 1).Value = Left(valeur, 10)
    Next a
    
End Sub

Ces nouvelles donénes sont en format "standard".


Je veux ensuite les renseignées dans une zone de liste en évitant les doublons: voici la méthode
d'abord je copie toute la colonne dans une autre en prenant soin de supprimer les doublons puis je les renseigne dans ma zone de liste:

Code:
'On renseigne les elements de la liste date day(sans doublons):
    Columns("A:A").Select
    Selection.Copy
    Range("K1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Columns("K:K").Select
    ActiveSheet.Range(Cells(1, 11), Cells(1000000, 11)).RemoveDuplicates Columns:=1, Header:=xlNo
    Selection.Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Fin = Range("K1").End(xlDown).Row
    
    Filtre.zl_date.Clear 'Nettoyage zone de liste zl_date
    For nb_item = 2 To Fin
           'Format date: voilà ce que je rajoute pour que ce qu'il y a dans la zone de liste soit en format date:
            Cells(nb_item, 11).Value = Format(Cells(nb_item, 11).Value, "mm/dd/yyyy")
            Filtre.zl_date.AddItem Cells(nb_item, 11)
    Next nb_item
    Filtre.zl_date.ListIndex = -1
    
    'Columns("K:K").Delete
    Cells(1, 1).Select


Cela marche sur Excel en Français.

Je souhaite que ça marche aussi sur excel en anglais car des personnes vont utiliser ce que je fais sur Excel et ils l'ont en Anglais.
Le but final de l'outil est d'obtenir des graphiques en fonction du temps ..

Sur Excel en Anglais, les seuls trucs que j'ai pu remarqué lors du test que j'ai réalisé, c'est que lors de l'import, les dates étaient écrites correctement JJ/MM/AAAA (format standard enfin c'était marqué "general" du coup en Anglais) , pareil lorsque je les copiaient dans la colonne "K", mais c'est ensuite dans la zone de liste que je retrouvais des formats MM/JJ/AAAA....
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Format date pour nuage de points

OK mais tu veux quoi ? Que ce soit écrit en format français dans un excel en anglais ? OU bien en français dans l'excel en français et en anglais dans excel en anglais (ce qui est plus logique)
regarde ça
Ce lien n'existe plus
 

richert90

XLDnaute Occasionnel
Re : Format date pour nuage de points

Plutôt en format français partout et donc même dans le excel en anglais ( ce sont des français qui vont l'utiliser, ils ont juste Excel en anglais ). De plus lors de l'import des données les dates sont de format standart mais ça reste de la forme "Française" :JJ/MM/AAAA.
Faut juste que je trouve le moyen pour que sur excel 2010 j'arrive à avoir dans la zone de liste les dtes telles qu'elles sont sur la feuille Excel.
 
Dernière édition:

richert90

XLDnaute Occasionnel
Re : Format date pour nuage de points

J'étais parti sur quelque chose de ce genre (avant de voir ton dernier msg):

Code:
    dim tmp as string 'variable qui récupère la date!

    'On copie colle la colonne date:
    Columns("A:A").Select
    Selection.Copy
    Range("K1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Columns("K:K").Select
    ActiveSheet.Range(Cells(1, 11), Cells(1000000, 11)).RemoveDuplicates Columns:=1, Header:=xlNo
    Selection.Sort Key1:=Range("K1"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Fin = Range("K1").End(xlDown).Row
    
'On renseigne la zone de liste
    Filtre.zl_date.Clear 'Nettoyage zone de liste zl_date
    For nb_item = 2 To Fin
            'Format date
            Cells(nb_item, 11).Value = Format(Cells(nb_item, 11).Value, "m/d/yyyy") 'm/d/yyyy en VBA= JJ/MM/AAAA sur Excel
            tmp = Cells(nb_item, 11).Value '11 correspondant à la 11 ième colonne: K --- tmp chaine de carac qui recup la date
            Filtre.zl_date.AddItem tmp 'On met les chaines de carac (=date) dans la zone de liste.
    Next nb_item
    Filtre.zl_date.ListIndex = -1

Voila, ensuite j'ai un code pour filtrer selon la date et là j'utilise le cdate() pour convertir la chaine de caractère de la zone de liste (chaine de caractère qui contient en réalité la date) en un format date:

Code:
  If Filtre.zl_date <> "" Then
        date1 = CDate(Filtre.zl_date.Value) 'cdate() convertit une chaine en date.
        ActiveSheet.Range("$A$1:$" & lettre1 & i1).AutoFilter Field:=1, Criteria1:="=" & date1
    Else 'Si le champ n'est pas rempli:
        Filtre.zl_date = ""
    End If

Voilà j'ai pu tester sur Excel en Anglais à l'instant, ça été concluant

Qu'en penses-tu ?
Je sais que c'est pas la super méthode mais bon on fait avec les moyens du bord :p
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal