Format date
Bonjour
J'aurais besoin de votre aide.
J'ai construit une macro qui lance un logiciel, fait tourner une requête puis recupère les données en faisant un copier-coller.
Le problème c'est que une fois que la macro a fini de tourner je remarque que das l'une des colonnes où il n'y a que des dates, certaines ne sont pas au même format (il inverse les mois et les jours...) si j'éssaie de modifier le format pour les cellules concernées ca ne fonctionne pas .
Le plus étrange est que si je fais le copier coller à la main toute les cellules sont au bon format ...
Ci-dessous je vous ai mis un bout du code que j'utilise.
Merci d'avance pour votre aide
Sub Recup_Symbad() ' Màj le 06/07/2015 requète "DateEvolutionGamme"
'
'déclaration des variables
Dim BIQ1 As Object
Dim DataMod As Object
Dim RequBI As Object
Dim Prompt_Mag, Prompt_DDeb, Prompt_DFin As Object
Dim Chart, idcpmat As String
Dim nbart, nbtranch, ligt As Integer
Dim cpmatinf, cpmatsup As Variant
'
'suppression filtres auto
Sheets("import").Select
Rows("1:1").Select
If ActiveSheet.AutoFilterMode = True Then
Selection.AutoFilter
End If
'
'Application.DisplayAlerts = False
'
'ouverture session Symbad Société
Set BIQ1 = CreateObject("BIQuery.user.Application")
BIQ1.Open ("c:\appinfoc\oper\symbprod\symbprod.gqu") '<--- nom du fichier de lancement de Symbad Prod
Set DataMod = BIQ1.DataModel
'
'
'RAZ zones d'extraction
Worksheets("import").Activate
If Range("B1048576").End(xlUp).Row > 1 Then
Range("A2:H" & Range("B1048576").End(xlUp).Row).ClearContents
End If
Range("B1").Select
'
'Sélection de la requête à lancer de BI-QUERY
Set RequBI = DataMod.queries("DateEvolutionGamme")
RequBI.submit '<--- soumission requête
Set resultRequ = DataMod.Windows("DateEvolutionGamme").ResultSet '<-- récupération résultat
'on peut tester pour voir s'il y a un résultat dans le cas où il n'est pas sûr qu'il y en ait un pour éviter une erreur macro
'syntaxe : if resultRequ.Count > 0 then ....
resultRequ.SelectAll '<--- copier-coller du résultat dans le presse-papier
resultRequ.Copy
'
'temps attente copie données
PauseTime = 10 ' Définit la durée en seconde
Start = Timer ' Définit l'heure de début.
Do While Timer < Start + PauseTime
DoEvents
Loop
'
'Collage dans la feuille excel
Worksheets("import").Activate
Range("B1").Select
ActiveSheet.Paste '<--- collage dans la feuille excel
Pepito
Bonjour,
j'ai rencontré le même problème avec mon fichier, manuellement cela fonctionnait, mais en utilisant la macro (Ouverture d'un fichier CSV, Conversion, Copier/Coller des informations et fermuture du CSV), certaines dates passaient au format de date anglais (mm JJ aaaa). Le problème venait qu'après le collage (sur un fichier CSV les données du classeur sont rassemblées dans la colonne A, séparées par un ";" pour représenter les différentes cellules).
Il s'est avéré que lorsque je convertissait, je ne forçais pas la colonne des dates à un format de cellule JMA d'entrée de jeu et certaines dates passaient de 09/07/2015 à 7/9/15.
En faisant la conversion avant le copier/coller (donc en imposant un format de date), cela a corrigé le problème.
Il faudrait peut être essayé de mettre une ligne de code mettant votre colonne date au même format avant le copier/coller?
Bonjour
Grâce à toi je commences a comprendre.
Je ne savais pas que pour le CSV tout était stocké dans une seule colonne ....
La ligne de code doit avoir pour but de forcer le format date de la colonne ou bien du code qui se trouve en gros dans le presse papier (après avoir fait "copier") ?
Tu avais réussi à t'en sortir au final ?
Merci
Pepito
J'ouvre un ou plusieurs fichiers (sur choix de l'utilisateur), je convertie ( et je force ma colonne 2 au format date :
Array(2, 4) , les autres reste au format standard, exemple Array(1,1) pour la colonne A).
J'ai obtenu le code de conversion en faisant un enregistrement de macro
Le code se présente un peu comme ça :
'ubound determine le nombre de fichiers sélectionnés
For i = 1 To UBound(Arr)
'Ouvre les fichiers au fur et à mesure
Workbooks.Open Arr(i)
'On met le nom du fichier dans une variable
myFile = ActiveWorkbook.Name
Workbooks(Wbc).Activate
If ExistWorkbookSheet(Wbc, myFile) = False Then
'ouverture du classeur Test
Workbooks(Wbc).Sheets.Add.Name = myFile
MaFeuille = ActiveSheet.Name
Workbooks(myFile).Activate
'Convertir le contenu
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 4), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1), Array(16, 1)), TrailingMinusNumbers:=True
'On retire les 2 dernières colonnes (Moy et E.T.) , pas utile pour toi
lastColT = Cells(4, Columns.Count).End(xlToLeft).Column
lastRowT = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, lastColT - 1), Cells(lastRowT, lastColT)).Clear
MiseEnForme
'On copie le tout sur le carton
Workbooks(myFile).Worksheets(1).Range(Cells(1, 1), Cells(lastRowT, lastColT + 2)).Copy Destination:=Workbooks(Wbc).Worksheets(myFile).Range("A1")
'Fermeture du classeur .csv
Workbooks(myFile).Close
Si j'effectuais le Copier/Coller des données avant la conversion et sans "forcer" la colonne en valeurs dates JMA, je me retrouvais avec des dates anglaises.
Du coup essaie peut être de placer une ligne de ce genre avant de copier tes données (on va voir si cela change quelque chose) :
Columns("B:B").Select
Selection.NumberFormat = "m/d/yyyy"
J'ai essayé avec ce code mais ça ne change rien ....
Pour la conversion je pense que c'est la bonne solution mais si je fais la conversion en demandant une date avant de coller mes données lorsque je vais ensuite coller les données ca va écraser la conversion !!
'Collage dans la feuille excel
Worksheets("import").Activate
Columns("E:E").NumberFormat = "m/d/yyyy"
Range("B1").Select
ActiveSheet.Paste '<--- collage dans la feuille excel
Bonjour,
Autant éviter les traitements ultérieurs.
Met-toi en enregistrement de macro, fait ton import en manuel et à l'étape 3 choisi le format Date : JMA sur les colonnes concernées.
Tu auras tous les paramètres qui t'intéressent.
eric
Bonjour
Fonctionner comme ça ne fonctionne pas malheuresement parce qu'une fois que j'ai collé mes valeurs la conversion n'a plus d'effet sur les valeurs... car il enregistre le mois comme un jour et le jour comme un mois pour certaines celulles.
La conversion doit être éffectuée avant de coller les valeurs ....
La changement devrait être fait avant de copier les valeurs. Une fois copiées, elles sont dans le presse-papier et donc les modifications sur le fichier ne se répercutent pas sur les valeurs que vous allez coller. Après comme l'a dit Eric, si vous arrivez à faire manuellement votre démarche en enregistrant sous forme de Macro, vous trouverez probablement d'où le problème viens.
Le problème c'est que:
- Avec Excel j'ouvre un logiciel dans lequel je fais tourner une requête
- J'obtient un résultat sous forme de tableau mais je ne l'ai pas sous format .csv
- Je doit le copier tel quel car à ce moment je ne suis toujours pas sur excel. Je ne peux donc pas faire de conversion JMA avant de copier les valeurs ...
L'enregistreur manuel ne m'aide pas non plus du coup ..
Dans ta macro tu ouvres bien un fichier que tu convertis à l'ouverture il me semble.
Et bien c'est ce fichier que tu ouvres manuellement avec l'enregistreur en route en faisant ce que je t'ai indiqué.
Ensuite tu remplaces la partie
'Convertir le contenu
Columns("A:A").Select
Selection.TextToColumns etc...
par ce que tu as obtenu.
eric