Comment définir le type de donnée d'une colonne excel

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - Modifié par pijaku le 9/08/2016 à 13:50
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 2 août 2016 à 11:47
Bonjour,
Je pilote excel via le vb.net
j'ai une liste de string que je remplis avec des strings représentant une date
dd/mm/yy
quand je copie la liste dans le classeur j'obtiens certains string sans les /
27/9/2015
28/9/2015
29/9/2015
30/9/2015
10 01 2015
10 02 2015
10 03 2015
10 04 2015
10 05 2015
10 10 2015

le code
private list1 as new list (of string)
Private gr As New CultureInfo("en-US")
 gr.DateTimeFormat.Calendar = New GregorianCalendar()
 Private Function SetGregorianDate(lastdate As DateTime) As String
        Dim y, m, d As Integer
       y = gr.DateTimeFormat.Calendar.GetYear(lastdate)
        m = gr.DateTimeFormat.Calendar.GetMonth(lastdate)
        d = gr.DateTimeFormat.Calendar.GetDayOfMonth(lastdate)
         Return (d.ToString & "/" & m.ToString & "/" & y.ToString).ToString
     End Function
private sub FillList1
dim d1 as datetime
for iter = 1 to 10
  d1 = date.now
  list1.add(SetGregorianDate(d1))
  d1 =  d1.AddDays(1)
next
end sub

  With xlworksheet
                     indexcol = 1
                indexrow = 3
                For Each item As string  In list1
                    .Cells(indexrow, indexcol) = item
                       indexrow += 1
                Next

2 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
2 août 2016 à 00:01
Bonsoir

et si au lieu d'envoyer une liste de string tu envoyais une liste de DateTime?


Et ton code est bien compliqué pour pas grand chose au final.

d.ToString & "/" & m.ToString & "/" & y.ToString

Ça c'est un string, y ajouter ToString ne sert à rien

D'ailleurs ta fonction SetGregorianDate ne sert à rien.
d1.ToShortDateString()

Fait presque la même chose, en effet d1.ToShortDateString() retourne "01/08/2016", au lieu de "1/8/2016" (c'est d'ailleurs peut être ça qu'excel n'aime pas).

Et si vraiment tu veux "1/8/2016", et bien
d1.ToString("d/M/yyyy")


Et quand bien même, si tu veux le numéro du jour, du moi ou de l'année, pas la peine de passer par tous ces artifices,
            y = d1.Year
            m = d1.Month
            d = d1.Day



Enfin dans la méthode FillList1, d1 est initialisé à aujourd'hui en début de boucle, puis ajouté dans la liste et ensuite passé à demain, et on réintère,
Ajourd'hui, liste, demain
Ajourd'bui....

Donc dans la liste c'est toujours aujourd'hui.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 2/08/2016 à 01:40
salut
Et quand bien même, si tu veux le numéro du jour, du moi ou de l'année, pas la peine de passer par tous ces artifices,
  y = d1.Year
m = d1.Month
d = d1.Day


c'est vrai je me complique

il suffit d'ajouter
 cells1 = "C1:C" & (list1.Count + 2).ToString
Range(cells1).NumberFormat = "@"
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
2 août 2016 à 10:35
Oui écrire un string, puis lui dire "en fait c'est une date" ça marche.
Mais lui donner directement une date aussi.


With xlworksheet 
indexcol = 1 
indexrow = 3 
For i = 0 to 10
   .Cells(indexrow, indexcol) = DateTime.Now.AddDays(i) 
    indexrow += 1 
Next

0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 août 2016 à 11:26
D'accord mais ce que je voulais c'est d'écrire un string et qu'excel
le considère comme un string pas comme une date
pour cela
Range(cells1).NumberFormat = "@"


aussi pourquoi je préferre

 y = d1.Year
m = d1.Month
d = d1.Day
Return d.ToString.ToString.PadLeft(2, "0"c) & "/" & m.ToString.PadLeft(2, "0"c) & "/" & y.ToString


si j'écris
d1.ToShortDateString() 
'ou
d1.ToString("d/M/yyyy")


et que le format de la date courte du windows n'est pas dd/mm/yy
je n'obtiens pas ce que je veux
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019
2 août 2016 à 11:47
Si avec d1.ToString(Description du format) tu peux choisir complètement le format que tu veux.

https://msdn.microsoft.com/fr-fr/library/zdtaw1bw(v=vs.110).aspx
0
Rejoignez-nous