Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 04/02/2010, 12h05   #1
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
Par défaut Convertir une colonne en date apres import CSV

Bonjour,

j'ai un petit problème suite à l'import d'un fichier CSV.
une de mes colonne importée contient des dates, et dans le fichier excel, les dates sont aléatoirement conciderer comme date ou string ce qui empeche de faire des filtres automatiques.
Le parcours de chacune des ligne avec
Code :
 range("h" & ligne)=cdate(range("h" & ligne))
est impossible car le fichier contient plus de 15 000 ligne...
Avez vous une solution ?

Dernière modification par Philippe JOCHMANS ; 04/02/2010 à 12h16. Motif: Ajout des balises codes (sélection du code + bouton # dans la fenêtre de rédaction des messages)
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 12h23   #2
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 716
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 716
Points : 2 108
Points : 2 108
Citation:
Envoyé par imaril Voir le message
Bonjour,
...
Le parcours de chacune des ligne avec
Code :
 range("h" & ligne)=cdate(range("h" & ligne))
est impossible car le fichier contient plus de 15 000 ligne...
Avez vous une solution ?
Pourquoi n'est-ce pas possible ?

Sinon, en fonction de ta méthode d'import du CSV, tu peux peut-être directement travailler sur les lignes CSV.

A+
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 12h28   #3
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
je dit que ce n'est pas possible car cette manip prend a peu près 10minutes...
pour les condition dans l'import, en fait quand je fais le workbooks.open et que je met mon fichier CSV, il l'ouvre directement en format excel ( pas toutes les colonnes dans la même cellule) donc je peux pas faire tu convertir...
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 12h35   #4
Membre Expert
 
Avatar de Fvandermeulen
 
Frédéric Vandermeulen
Inscription : juillet 2007
Messages : 1 716
Détails du profil
Informations personnelles :
Nom : Frédéric Vandermeulen
Âge : 36
Localisation : Belgique

Informations forums :
Inscription : juillet 2007
Messages : 1 716
Points : 2 108
Points : 2 108
Citation:
Envoyé par imaril Voir le message
je dit que ce n'est pas possible car cette manip prend a peu près 10minutes...


As tu essayé en mettant le sreenupdating à False et/ou en désactivant les calculs automatiques?
Ca me parrait énorme pour "seulement" 15000 lignes?
__________________
N'oubliez pas le si votre problème est solutionné.
Fvandermeulen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 12h38   #5
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
oui oui je le fais toujours le screen update
mais vu qu'il y a pas de formule, j'avais pas mis le calculate, je test apres manger avec le calculate et je te tiens au courant
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 13h13   #6
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 201
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 201
Points : 4 235
Points : 4 235
Bonjour,

par vba ou autre...
tu ajoutes une colonne en vba à côté de la tienne (la C ajoutée par exemple à gauche de la D qui contient tes données) et tu appliques :

Code :
1
2
3
4
5
6
Sub Trans()
With Columns("C:C")
    .FormulaR1C1 = "=RC[1]*24/24"
   .NumberFormat = "m/d/yyyy" 'ou format voulu...
End With
End Sub

Sans vba..
tu ajoutes la colonne, tu la sélectionnes, tu tapes =, clic sur la cellule de la m^me ligne de la colonne voulue, *24/24 et tu valides par CTRL+Entrée

tu supprimes l'ancienne ensuite...

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 13h46   #7
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
Je souhaite que se soit fait par macro (car ensuite il y a un autre traitement)
mais a quoi sert le *24/24 ??
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 13h58   #8
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 201
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 201
Points : 4 235
Points : 4 235
Bonjour,
en premier lieu, le soucis est de savoir si ça marche chez toi ?

Sinon, c'est trop long à expliquer en 2 lignes, ça tient de l'interprétation des dates sous Excel (différente en vba), de la notion de numéro de série et de la représentation décimale d'une durée...

Citation:
Ainsi, pour Excel, la base de temps unitaire retenue est la journée, ce qui fait que pour une durée donnée le numéro de série sera identique en valeur à sa représentation décimale C'est fondamental aussi pour comprendre l'interprétation des nombres convertis en date-heure et pour les ambiguïtés des calculs horaires basiques. Le chiffre qui intervient est toujours exprimé en jour
la multiplication par 24 fait qu'Excel interprète tout ce qu'il peut en date, en divisant pas 24, on rétablit notre valeur d'origine qui nous retourne le numéro de série qui sera correctement formaté suivant le format qu'on applique à la colonne...

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h02   #9
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
bon ca a l'air de marcher
je te remercie beaucoup et le traitement est rapide (même pour les 15Kligne)

edit : juste un petit problème dans toute les case vide de la colonne il me met 00/01/1900
ce n'est pas un problème très grave mais bon si il y a un moyen simple de l'éviter

Dernière modification par imaril ; 04/02/2010 à 14h13.
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h38   #10
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 201
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 201
Points : 4 235
Points : 4 235
Bonjour,

c'est logique, vois comme ceci :

Code :
1
2
3
4
5
6
Sub Trans()
With Columns("C:C")
   .FormulaR1C1 = "=IF(RC[1]<>"""",RC[1]*24/24,"""")"
   .NumberFormat = "m/d/yyyy"
End With
End Sub

sinon pour mieux comprendre tu peux répliquer le tableau ci-dessous dans une feuille



ps : les formules sont à relativiser par lignes...

cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !

Dernière modification par Ormonth ; 04/02/2010 à 15h45. Motif: ménage suite post suivant
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h55   #11
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
Merci beaucoup et merci ² pour ta petite explication tres claire

a plus sur le forum
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h44   #12
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 201
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 201
Points : 4 235
Points : 4 235
Bonjour,

voici plus propre, ça te rajoute une colonne transitoire, te fait le traitement voulu, recopie les valeurs de la colonne obtenue sur elle-même et supprime la colonne originelle... (car si tu supprimes la colonne tout court, les formules à côté ne vont pas aimer...)

attention => suppression colonne !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Trans2()
With Columns("D:D")
   .Insert Shift:=xlToRight
   '.select '' ne pas mettre dans le code surtout, à activer pour compréhension de la suite si besoin...
   ''le with column("D:D") pointe vers la colonne E apparente suite à l'insertion, mais qui représente toujours l'objet d'origine
   '' à savoir la colonne pointée via l'instruction With...
   .Offset(0, -1).FormulaR1C1 = "=IF(RC[1]<>"""",RC[1]*24/24,"""")"
   .Offset(0, -1).NumberFormat = "m/d/yyyy"
   .Offset(0, -1).Copy
   .Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   .Delete
End With
End Sub
cordialement,

Didier
__________________
Didier Gonard

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 15h48   #13
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 73
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 73
Points : 30
Points : 30
je t'ai devancé sur ce point je pense voici le code que j'ai fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub convert_date(num_col As Integer) 
 
Columns(num_col).Insert Shift:=xlToRight 
With Columns(num_col) 
    .FormulaR1C1 = "=if(RC[1]<>"""",RC[1]*24/24,"""")" 
    .NumberFormat = "dd/mm/yyyy hh:mm" 
    .Copy 
    .PasteSpecial Paste:=xlPasteValues 
End With 
Cells(1, num_col) = Cells(1, num_col + 1) 
Columns(num_col + 1).EntireColumn.Delete 
End Sub
cela reviens au même je pense
par rapport au formule, je n'en ai pas besoin, vu que par la suite je vais copier tt les valeur de mon CSV dans un nouveau fichier et il n'y a pas de formule dans un CSV ^^
imaril est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 15h13.


 
 
 
 
Partenaires

Hébergement Web