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 28/11/2011, 11h02   #1
Membre du Club
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 43
Points : 43
Par défaut Changement du format de la date

Bonjour a tous,

Je suis confronté à un problème avec le format de la date.
J'ouvre un fichier texte séparé par des tabulations à l'aide d'une macro. Lorsque le fichier TXT s'ouvre sous excel la date qui est à l'origine sous le format jj/mm/aa devient mm/jj/aa.
Comment faire pour que le format de la date lors de l'importation des données issue du fichier TXT reste normal (c-à-d jj/mm/aa)

Merci pour votre aide
stefano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 17h51   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Tu l'ouvres comment ton fichier ?

Je dirais qu'il suffit de changer la mise en forme de tes cellules, mais ça dépend de comment tu charges tes données. Peux-tu donner plus de précisions ?
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h29   #3
Membre du Club
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 43
Points : 43
Bonjour,

Voila un extrait du fichier texte celui que j'ai a faire digérer avec la macro

P	08/11/2011	159804	73385
P	08/11/2011	159811	68875
P	08/11/2011	159811	68875
Le format des cellules pour la date est bien du type Date avec les bon paramètres régionnaux Français(France)
C'est la même chose dans le classeur Excel qui comporte la macro même paramétrage que ci-dessus.

Voila ce que j'ai en sortie après exécution de la macro
11/08/11	159804	73385
11/08/11	159811	68875
Pour remplir le fichier excel qui part chez mes clients je me base sur la première colonne en fonction de la lettre que je trouve, j'affecte les valeur que j'ai correspondant à la ligne sur une feuille du classeur.
par cette commande
Code :
Range("A" & Count) = sdate
sdate correspondant à la date
Count au N° de la ligne qui est en cours de remplissage

Quand je fait du pas à pas sdate est sous le bon format soit dans mon exemple 08/11/2011

J'espère avoir été assez explicite dans mes détails pour que tu puisse me donner un coup de main et si besoin est j'essayerai d'apporter un peu plus d'info.

Merci par avance pour ton aide c'est sympa car là je suis dans le brouillard le plus complet.
stefano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h12   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
C'est toujours compliqué les dates avec les différentes conventions existantes.

Première étape, vérifier que c'est la bonne date que tu récupères. Même si tu vois 8/11/2011 en mode pas à pas, ça va dépendre de la configuration de ton PC. Le mieux est de mettre en espion
Code :
1
2
Day(sdate)
Month(sdate)
Tu peux aussi faire des tests avec un jour du mois supérieur à 12 pour voir (Excel est parfois plus malin qu'on ne le pense, il peut prendre par défaut le premier nombre comme mois, mais basculer sur le deuxième si ça donne un mois qui n'existe pas). Après, si tu ne maîtrises pas le format de dates sur les postes clients, le mieux c'est sans doute de parser le texte pour le gérer à ta sauce (en utilisant inStr de "/")

Deuxième étape. Si tu es sûr que tu récupères la date que tu veux, quand tu la mets dans la cellule, utilises
Code :
Range("A" & Count).Value = sdate
Et pour le format des cellules, fais plutôt un format personnalisé "dd/mm/yyyy", comme ça ça ne dépendra pas du poste. Tu peux aussi le faire directement dans la macro :
Code :
Range("A" & Count).NumberFormat = "dd/mm/yyyy"
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h47   #5
Membre régulier
 
Avatar de Djohn
 
Inscription : février 2007
Messages : 247
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2007
Messages : 247
Points : 84
Points : 84
Citation:
Envoyé par stefano Voir le message
... Lorsque le fichier TXT s'ouvre sous excel ...
Bonjour, eventuellement peux tu ouvrir le fichier en csv en conservant les tabulations, puis utiliser les fonctions Right et Left ou Mid pour récupérer la date ?

Code :
1
2
Dim sdate As Date
sdate = Mid(Range("A" & Count), 2, 11)
Djohn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h01   #6
Membre du Club
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 43
Points : 43
Re,
Alors pour les valeurs de Day(sdate) et Month(sdate) effectivement j'ai une inversion a ce niveau déjà
Après un niveau du fichier d'export pour le logiciel a partir duquel il est générer pour lui c'est bien la bonne date.

Sinon pour ce que tu me dit avec InStr je connais pas cette fonction, je vais tenté de trouver des infos dessus
stefano est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h04   #7
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Quand tu remplis sDate, c'est après un Split ?
La question de Djohn m'a mis un doute, le fichier texte, tu l'ouvres directement sous excel ou c'est dans ta macro que tu fais un
Je t'envoie un exemple d'utilisation de InStr

Donc pour décortiquer toi-même ta date :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim dtStr As String
dtStr = "08/11/2001"
 
Dim firstSlash As Byte
Dim secondSlash As Byte
 
firstSlash = InStr(dtStr, "/")
secondSlash = InStr(firstSlash + 1, dtStr, "/")
 
Dim jour As Byte
Dim mois As Byte
Dim annee As Integer
 
jour = Mid(dtStr, 1, firstSlash - 1)
mois = Mid(dtStr, firstSlash + 1, secondSlash - firstSlash - 1)
annee = Mid(dtStr, secondSlash + 1, Len(dtStr) - secondSlash)
 
Dim dateReelle As Date
daterelle = DateSerial(annee, mois, jour)

ou plus simple si tu es sûr qu'il y a toujours 2 chiffres pour tes jours/mois et 4 chiffres pour tes années :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim dtStr As String
dtStr = "08/11/2001"
 
Dim jour As Byte
Dim mois As Byte
Dim annee As Integer
 
jour = Mid(dtStr, 1, 2)
mois = Mid(dtStr, 4, 2)
annee = Mid(dtStr, 7, 4)
 
Dim dateReelle As Date
daterelle = DateSerial(annee, mois, jour)
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 13h56   #8
Membre du Club
 
Inscription : janvier 2005
Messages : 230
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 230
Points : 43
Points : 43
Salut,

Pour ce qui est du format, c'est un txt qui m'est envoyé et je ne peux pas changer le format , c'est une contrainte de format que je peux pas contourner.

Pour ce qui est de l'ouverture du fichier, c'est directement la macro qui ouvre le fichier texte. la seul action qu'a à faire l'utilisateur c'est juste appuyer sur un bouton pour lancer la procédure.
Code :
Workbooks.OpenText Filename:=RepTravail + fichier
reptravail étant le répertoire ou j'ai le fichier à traiter.

Je vais tenter de voir avec ta 1ème solution qui me semble a prime abord être plus facile a adapter au reste du code.

D'après les tests que j'ai fait ça me semble bien fonctionner, reste a voir si dans la durée ça fonctionne ou pas

Dans tous les cas, merci beaucoup pour votre aide précieuse
stefano 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 +2. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web