Comment définir le type de donnée d'une colonne excel [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 1 août 2016 à 23:08 - Dernière réponse : Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 2 août 2016 à 00:01
0
Utile
1
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.
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 2 août 2016 à 01:35
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 = "@"
Commenter la réponse de Whismeril
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 2 août 2016 à 10:35
0
Utile
2
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

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 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
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention > cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 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
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.