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"
conversion

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 ...
D'ou mon problème ...

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

Rechercher des sujets similaires à "format date"