[VBA] utilisation de "Left" ; ne fonctionne pas sur chaque lignes
Bonjour,
Lorsque j'importe mes données .csv dans mon document de travail Excel, j'ai souhaité ajouter un code qui permette de supprimer une partie des caractères qui ne m'intéressent pas.
En l’occurrence, il s'agit de dates au format texte qui affichent : (jj/mm/aaaa hh:mm:ss) ; n'ayant pas besoin des heures, je supprime tout ce qui est après l'année.
Ça fonctionne sur la majorité des lignes, sauf certaines, lesquelles se trouvent modifiées (l'heure passe de 23:00:00 à 00:00:00 par exemple). Certaines cellules continuent d'afficher la date comme initialement.
Savez-vous d'où cela peut provenir ?
Je joins deux documents ; "BDD" correspond à la base de données que j'importe dans Excel ; c'est dans cet import que mon code est exécuté. Je m'y prends ainsi dans mon exemple pour coller au mieux à la réalité ; parfois si je pars d'une base de données déjà collée dans mon document de travail, je n'ai pas de problème...
Bonne journée !
A plus tard.
Bonjour,
Ça fonctionne sur la majorité des lignes, sauf certaines, lesquelles se trouvent modifiées (l'heure passe de 23:00:00 à 00:00:00 par exemple). Certaines cellules continuent d'afficher la date comme initialement.
Je ne comprend pas bien. Si tu supprimes les heures elles doivent toutes être à 0:00, c'est normal.
Par contre, lors de l'importation précise le format de date si tu ne veux pas que certaines se transforment.
04/01 deviendrait 01/04 par exemple.
Dim datas
'...
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & myfile, _
Destination:=Range("$A$1"))
.TextFileParseType = xlDelimited
.TextFileColumnDataTypes = _
Array(xlGeneralFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlDMYFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlDMYFormat, xlTextFormat, xlDMYFormat)
.TextFilePlatform = 65001 '1252 '850
.TextFileSemicolonDelimiter = True
.Refresh
End With
'...
datas = [G1].Resize(Cells(Rows.Count, "G").End(xlUp).Row).Value
For tbl = 2 To UBound(datas)
datas(tbl, 1) = Int(datas(tbl, 1))
Next tbl
[G1].Resize(UBound(datas)).Value = datasLes dates étant devenues des vraies dates excel, il suffit de prendre la partie entière pour éliminer les heures.
lrfb = fb.Cells(Rows.Count, 1).End(xlUp).Row
'Nettoyer le tableau avant calculs
fb.Cells(1).CurrentRegion.Offset(1).ClearContentsTu comptes ton nombre de ligne avant l'importation ???
eric
Bonsoir,
Merci pour votre intervention sur mon soucis.
Malgré vos indications, j'en arrive au même résultat. Ce code n'engendre aucun changement dans mes données.
datas = [G1].Resize(Cells(Rows.Count, "G").End(xlUp).Row).Value
For tbl = 2 To UBound(datas)
datas(tbl, 1) = Int(datas(tbl, 1))
Next tbl
[G1].Resize(UBound(datas)).Value = datasCe code ( je modifie cette partie : Left(fb.Cells(tbl, 7), 11) ) supprime bien la partie qui ne m'intéresse pas dans les dates, mais pas pour chaque ligne de la colonne G...
Exemple : ligne 2 : 30/09/2019
ligne 14 : 11/01/2019 00:00:00
Je ne vois pas ce que cette ligne (et quelques autres) à de spécial pour ne pas être traitée de la même manière.
datas = [G1].Resize(Cells(Rows.Count, "G").End(xlUp).Row).Value
For tbl = 2 To UBound(datas)
datas(tbl, 1) = Left(fb.Cells(tbl, 7), 11)
Next tbl
[G1].Resize(UBound(datas)).Value = datasEn effet, inutile de compter le nombre de ligne avant importation, j'avais oublié de le retirer.
Je m'en sert pour faire plusieurs importations à la suite si besoin des données déjà présentes.
A plus tard !
Re,
tu as sans doute oublié d'ajouter :
.TextFileColumnDataTypes = _
Array(xlGeneralFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlDMYFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlTextFormat, xlDMYFormat, xlTextFormat, xlDMYFormat)dans With ActiveSheet.QueryTables.Add que les dates soient de vraies dates.
Là où tu as 11/01/2019 00:00:00 c'est qu'excel a bien reconnu une date et la met au format que tu as choisis pour la colonne, à toi de changer ce format. Les autres sont restées en texte.
eric
Bonsoir,
Merci pour votre aide !
@Jean-Eric : Le code que vous proposez donne le même résultat que celui que j'utilisais, mais sans les incohérences. J'ai pu finalement me rendre compte qu'en changeant le format les "hh:mm:ss" disparaissent si je ne souhaite pas qu'ils s'affichent.
@eriiic : Tout comme pour le document de Jean-Eric, votre proposition marche très bien en fait, il s'agit simplement du format final qu'il faut modifier.
En l'occurrence j'écris simplement ceci :
fb.Range(Cells(2, 7), Cells(lrfb, 7)).NumberFormat = "m/d/yyyy"A partir de là, tout rentre dans l'ordre !
Je vous remercie de votre aide !
Bonne fin de soirée