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 06/01/2012, 10h38   #1
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
Par défaut Probleme de conversion de dates

Bonjour,

J'ai un probleme de conversion de date. Je recois un fichier d'un logiciel exterieur dont une colonne est constituée de dates.

Je fais ceci pour la conversion

Code :
Cells(7 + dI, 1) = Format(Cells(7 + dI, 1), "jj/mm/aaaa hh:mm:ss")
La date à convertir est de ce type

Mais le résultat me donne des resultats de ce style

Par contre pour aout ça marche tres bien, de ceci

je passe bien en

Pourquoi cela ne marche t'il pas avec septembre au niveau des jours et des années !???

Merci
soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h47   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 919
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 919
Points : 7 232
Points : 7 232
Bonjour,

en VBA les formats sont en anglais (il me semble)
Code :
Cells(7 + dI, 1) = Format(Cells(7 + dI, 1), "dd/mm/yyyy hh:mm:ss")
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h49   #3
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
Normalement, dans le VBA, il faut mettre les format en anglais, donc dd/MM/yyyy. Mais je suis étonné que ça marche pour le mois d'août.

Le fichier que tu reçois est un fichier texte ?

Le mieux serait déjà de passer par une variable date intermédiaire pour être sûr qu'il la parse correctement. Ce sera plus simple ensuite pour l'affichage.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h32   #4
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
Merci pour vos réponses mais j'ai déja tenté le format anglais

de là

Code :
1
2
3
4
5
01/Sep/2011 12:57:40
01/Sep/2011 12:58:40
01/Sep/2011 12:59:40
01/Sep/2011 13:00:40
01/Sep/2011 13:01:40
ça donne ça


Code :
1
2
3
4
5
09/01/2011 12:57
09/01/2011 12:58
09/01/2011 12:59
09/01/2011 13:00
09/01/2011 13:01

il a inversé jour et mois car dans excel quand je clique sur "format de cellule", "nombre" pour le remettre dans d'autres formats de dates pour voir, il me met le 9 janvier 2011 au lieu du 1er septembre et si ça avait marché, j'aurais eu mes courbes mais elles ne sont pas là, je les vois quand je met 0 dans les abcisses donc problemes de dates

le format de données est de ce type, sauf qu'il y a bien plus de colonnes et de lignes...les colonnes correspondent à des mesures de capteurs sur un satellite et il y a un paquet de lignes car mesures sur 1 journée voir plus...et le but est d'afficher les courbes de ces données, il s'agit d'une macro dont je reprends le code, je n'en suis pas l'auteur. La conversion de la première colonne de dates ne se passe pas bien...

Code :
1
2
3
4
5
6
7
8
9
10
11
Origine	R1939 APS	R1940 APS	R1941 APS	R1942 APS
Libellé	z=1	z=1	z=1	z=1
NoPhase	ACQ	ACQ	ACQ	ACQ
NomPhase	HC2	HC2	HC2	HC2
NoTC				
LabelTC	A003	A034	A035	A036
Voie	2302	2332	2333	2334
01/Sep/2011 12:57:40	-21,68541527	-20,24226379	-18,59415245	-17,80001068
01/Sep/2011 12:58:40	-21,57033348	-20,2321701	-18,55813217	-17,78228569
01/Sep/2011 12:59:40	-21,52745056	-20,23110771	-18,56025124	-17,77196693
01/Sep/2011 13:00:40	-21,49123001	-20,22818565	-18,56554794	-17,77752304
soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h38   #5
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
Ce qu'il faut bien comprendre, c'est qu'à priori ta donnée initiale est du texte. Excel ne sait pas que c'est une date. Ensuite, quand tu lui demandes de le formater dans un format de date personnalisé, il attend une date en entrée pour appliquer ce format. Là j'ai envie de dire, on s'en fout du format que tu veux appliquer, le gros problème va être au niveau de la conversion du texte en date. Et là Excel part d'abord du principe que c'est en anglais et ne prendra un format français que si ça ne marche pas, c'est à dire, si le jour est supérieur à 12.
Je pense qu'il faut faire une conversion personnalisée pour être sûr de n'avior aucun problème.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 13h35   #6
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
En tentant la fonction CDate, ça semble passer

Code :
Cells(15, 1) = CDate(Cells(15, 1))
ceci
devient ça, ce qui me va
bizarre car la fonction CDate est la fonction de base que j'avais déja tenté sur d'autres fichiers et ça me générait un bug style incompatibilité de type...je vais voir à moyen terme si ça fonctionne dans tous les cas de figure...

Bon weekend.
soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h03   #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
Vérifie quand même que c'est bon en faisant par exemple MOIS(A1) quelque part. Pour être sûr qu'il a vraiment la bonne date, car même si c'est bon à l'affichage, il ne faudrait pas qu'il y ait une erreur si tu fais des calculs sur les dates par exemple.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h28   #8
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
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 353
Points : 4 685
Points : 4 685
Bonjour,

Les dates sous Excel, c'est comme les styles et les listes à puces dans Word, soit on consacre 2 heures à comprendre comment ça marche, soit on souffre de nombreuses heures entières à tenter, sans espoir, de résoudre le foutoir induit par un léger changement
Pour les dates, ça ne résous pas tout, mais ça met sur la piste la plus rapide des test à faire pour analyser le comportement contextuel du pouvoir d'interprétation d'Excel.

Citation:
Envoyé par ZebreLoup
.../... Mais je suis étonné que ça marche pour le mois d'août.
non, ça ne marche pas pour le mois d'août, il suffit se tester avec

ça marche avec cette syntaxe :

car voir le tableau dans le tutoriel sur les dates, ce mois exprimé en lettres et en abrégé ne laisse pas de doutes à l'interpréteur d'Excel.

il n'en n'est pas de même pour tous, malheureusement comme va le montrer l'image des tableaux à suivre, mais encore une fois au niveau du pouvoir d'interprétation d'Excel, vu le nombre de langues sous lequel il est porté, on peut comprendre que la tâche n'est pas simple

OrmonthData1-2012.jpg

On peut constater, dans le 2éme tableau, que si on saisit la date en lettres et en entier tout est OK.


Citation:
Envoyé par soccersoft
.../... il a inversé jour et mois car dans excel quand je clique sur "format de cellule", "nombre" pour le remettre dans d'autres formats de dates pour voir, il me met le 9 janvier 2011 au lieu du 1er septembre
vois pourquoi ici dans le tutoriel

PS : à noter que les dates sont des nombres pour Excel et qu'à ce titre alignées à droite dans les cellules par défaut, un alignement à gauche indiquera toujours une saisie en format texte !

Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

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 10
Vieux 06/01/2012, 15h08   #9
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
Effectivement, c'est un truc de fou, j'ai testé du coup avec le mois d'aout et plantage alors que ça marchait pour septembre !

Incompatibilité 13 je crois, probleme de type alors que ça marche sur d'autres mois...et en regardant le tableau, ça fait peur de voir les interprétations d'excel...

Plantage sur cette ligne
Code :
Cells(7 + dI, 1) = CDate(Cells(7 + dI, 1))
je vais regarder ça mais si ça continue comme ça, je vais pas m'embeter, je vais mettre un switch pour tous les mois sur les 3 premieres lettres et remplacer leur valeur par le nombre correspondant...ça m'évitera peut être des fonctionnements aléatoires...

Je m'y remets...
soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h16   #10
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
Oui, c'est ce que je te conseillais au début, écrire toi même ta fonction de parsing...
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h38   #11
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
L'inconvenient, c'est que ça rajoute du temps de traitement et vu le nombre de lignes à traiter, j'ai un peu peur du résultat, je vais voir si c'est beaucoup plus lent ou non...
soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h42   #12
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
Si tu récupère ton Range dans un Variant, que tu travailles dessus, puis que te recolles le résultat d'un coup, il n'y a plus d'accès répétés à la feuille et ça doit être très rapide.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 16h54   #13
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
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 353
Points : 4 685
Points : 4 685
Citation:
L’inconvénient, c'est que ça rajoute du temps de traitement et vu le nombre de lignes à traiter, j'ai un peu peur du résultat, je vais voir si c'est beaucoup plus lent ou non...
Je pense qu'au vu de l'ensemble du fil, il faut utiliser un condensé de tout ce qui a été abordé qui pourrait se résumer à :

Vu que tu as d'origine des dates en texte avec les mois en abrégé US (donc pas des dates en fait pour Excel) .
Vu qu'aucun des mois n'est représenté par une chaîne qui se retrouve en entier dans un autre.
On peut faire sur cette colonne une série de 12 chercher remplacer pour convertir les mois courts en mois longs puisque comme vu dans mon tableau image, tu peux alors appliquer ta macro de format sans souci...

Au niveau vitesse, ça devrait aller très vite, un petit coup d'enregistreur de macros sur janvier te donnera le code voulu..

Citation:
Je vais regarder ça mais si ça continue comme ça, je vais pas m'embeter, je vais mettre un switch pour tous les mois sur les 3 premieres lettres et remplacer leur valeur par le nombre correspondant
L'idée du nombre, je ne suis pas sûr que ce soit une bonne idée par contre vois ce que tu as dis sur les inversions en #5...

Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

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 06/01/2012, 18h28   #14
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
Finalement, je lis vos réponses après l'avoir fait

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim varmois As String
 
varmois = ""
 
 
        varmois = Mid(Cells(7 + dI, 1), 4, 3)
 
        Select Case varmois
          Case "Jan": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Jan", "01"))
          Case "Feb": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Feb", "02"))
          Case "Mar": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Mar", "03"))
          Case "Apr": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Apr", "04"))
          Case "May": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "May", "05"))
          Case "Jun": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Jun", "06"))
          Case "Jul": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Jul", "07"))
          Case "Aug": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Aug", "08"))
          Case "Sep": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Sep", "09"))
          Case "Oct": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Oct", "10"))
          Case "Nov": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Nov", "11"))
          Case "Dec": Cells(7 + dI, 1) = CDate(Replace(Cells(7 + dI, 1), "Dec", "12"))          
        End Select

ça marche très bien sur tous les fichiers que j'ai à ma disposition aout et septembre....je n'ai pas pensé à le faire mais faudra que je m'en prenne un et que je modifie quelques dates en remplacant le mois par un que j'ai pas testé histoire de tous les faire pour voir si la ligne passe bien en date, en tout cas, comme ça il a pas bugué et il m'a bien aligné les dates à droite, donc bien converties...à voir si ça marche sur tous les mois quand je le stresserai un peu...

En fait, les fichiers sont fournies par l'équipe thermique et c'est quand le satellite entre en vide thermique (voir photo) que les tests sont faits, il a lieu dans 10 jours pour une durée de 3 semaines, donc ça me laisse du temps pour la finir vu que c'est sur la dernière semaine, je travaille dessus quand j'ai un peu de temps de dispo mais excel et vbs, c'est pas trop ma tasse de thé...la macro sera lancée du poste présent à gauche sur la photo pour traiter les données. Me reste le pdf des courbes à debuguer et une autre partie mais ça avance .


soccersoft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 18h37   #15
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
Tant que tu ne fais pas du VBA pour des trajectoires de vol habité !

Sinon, pour tes tests, le plus important est de tester des jours supérieurs à 12, c'est là que ça peut poser problème, ce n'est pas une question de août ou septembre.

Sinon, une petite fonction pour t'aider :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Public Function DateFromText(strDate As String) As Date
    Dim tmpTab() As String
    Dim partieHeure As String
    Dim partieDate As String
    Dim mois As Integer
 
    tmpTab = Split(strDate, " ")
    partieDate = tmpTab(0)
    partieHeure = tmpTab(1)
 
    tmpTab = Split(partieDate, "/")
 
    Select Case LCase(tmpTab(1))
        Case "jan": mois = 1
        Case "feb": mois = 2
        Case "mar": mois = 3
        Case "apr": mois = 4
        Case "may": mois = 5
        Case "jun": mois = 6
        Case "jul": mois = 7
        Case "aug": mois = 8
        Case "sep": mois = 9
        Case "oct": mois = 10
        Case "nov": mois = 11
        Case "dec": mois = 12
    End Select
 
    DateFromText = DateSerial(tmpTab(2), mois, tmpTab(0)) + TimeValue(partieHeure)
End Function
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 19h33   #16
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
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 353
Points : 4 685
Points : 4 685
Super la photo ( j'ai cru à une machine à laver au départ) !

Sinon, dans le post, je te disais de remplacer les mois courts texte par des mois longs en texte, vu que ton code était OK ainsi, tu évitais sans coup férir les soucis d'inversion de dates

Sinon tu l'utilises comment ton code, car via une boucle la performance temps = pas terrible. Mais en 10 jours, ça passe

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 09/01/2012, 09h12   #17
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
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 353
Points : 4 685
Points : 4 685
Bonjour,

A tester - Sub Remplacement2() - sur ton poste, chez moi c’est OK et ça traite les 10 000 données en moins de 1 sec sous 2003 (plus sous 2010). Je précise le contexte car il induit la nature du résultat.
  • A la base la colonne A avec 10 000 lignes en dates-heure de jan à dec les mois étant en US abrégé, le format en texte et la conversion en N° de série directe impossible.
  • Le principe est de transformer les mois texte US abrégés en mois texte US Longs pour pouvoir faire un formatage Dates-heure sans ambiguïtés. En évitant les mois en chiffres donc et en évitant d’utiliser une boucle qui s’avèrera toujours chronophage.
  • On travaille sur la colonne A uniquement.
  • Après traitement on obtient les données formatées en dates-heure correctes selon le paramétrage du poste. On peut les passer en N° de série en passant le format en Standard et faire des calculs dessus.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
Option Base 1
 
Sub moteur() 'crée une plage de 10 000 lignes à partir de 12 lignes de base avec les dates/heures en mois texte abrégé US pour le test
 Selection.AutoFill Destination:=Range("A1:A10000"), Type:=xlFillDefault
End Sub
 
 
Sub Remplacement2() '- Ormonth 2012
Dim objMaRange As Range
Dim varMoisAbrev As Variant
Dim varMoisLong As Variant
Dim I As Byte
Dim Chrono1 As Single, Chrono2 As Single
 
Application.ScreenUpdating = False
Chrono1 = Timer
Set objMaRange = Range("A1:A10000")
varMoisAbrev = Array("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sept", "oct", "nov", "dec")
varMoisLong = Array("january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december")
 
With objMaRange
   For I = 1 To 12 'on est en Option Base 1
       Application.ReplaceFormat.NumberFormat = "@" 'attention ensuite à la mémorisation des paramètres employés par Replace
       .Replace What:=varMoisAbrev(I), Replacement:=varMoisLong(I), LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
   Next I
   .NumberFormat = "dd/mm/yyyy hh:mm:ss"
   .HorizontalAlignment = xlGeneral
End With
Set objMaRange = Nothing
Application.ScreenUpdating = True
Chrono2 = Timer
MsgBox Chrono2 - Chrono1 & "   secondes" ':)
End Sub
Cordialement,

Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

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 10
Vieux 09/01/2012, 22h48   #18
Futur Membre du Club
 
Inscription : mai 2002
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 37
Points : 16
Points : 16
Merci à vous deux pour les réponses. Je vais regarder ça quand j'aurai un peu de temps. Je l'ai quasiment fini, j'ai débugué l'enregistrement des courbes sous pdf, me reste donc à regarder plus en détails vos réponses et un module de classe à revoir pour faire du dynamique ou au moins agrandir le nombre de champs.

Pour répondre à une question, ça n'est pas une macro qui tourne en temps réel, les tests se font, les thermiciens nous retournent deux fichiers text de données + un autre fichier de mesures de chez nous en radiofréquences et avec la macro, je passe tous ces fichiers dans la moulinette (macro), y a une barre de progression qui indique où on en est et ça créé un fichier excel d'une 20aine d'onglets dont la majorité composées de courbes avec possibilité de répondre oui quand il a fini à un enregistrement au format pdf en plus de l'enregistrement en xls classique; la durée de traitement max est d'environ 3-5mn.

Par contre, je ne fais pas de calculs de dates ensuite, c'est juste pour tracer les courbes en fonction du temps

Code :
1
2
3
4
5
6
7
8
9
10
11
12
serie = Charts(SSI).SeriesCollection.Count + 1
            Charts(SSI).SeriesCollection.NewSeries
            Charts(SSI).SeriesCollection(serie).XValues = Range(LaFeuille & "!A8" & ":A" & LigneFin)
            Charts(SSI).SeriesCollection(serie).Values = Range(LaFeuille & "!" & Col & "8" & ":" & Col & LigneFin)
            Charts(SSI).SeriesCollection(serie).Name = BoxCode & " (°C)"
            'Charts(SSI).SeriesCollection(serie).Border.ColorIndex = 8
            
            'Graphe de temps sur l'axe 2
            Charts(SSI).SeriesCollection(serie).AxisGroup = 2
            Charts(SSI).Axes(xlValue, xlSecondary).HasTitle = True
            Charts(SSI).Axes(xlValue, xlSecondary).AxisTitle.Characters.Text = "Temperatures"

Et ma colonne, je ne connais pas le nombres de lignes donc c'est une boucle for de 65000 mais je sors dès qu'il n'y a plus de dates avec quelque chose de ce style

Code :
If Cells(7 + dI, 1) = "" Then Exit For
soccersoft 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 21h21.


 
 
 
 
Partenaires

Hébergement Web