Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Inversion de dates (vba)

3 réponses
Avatar
j-pascal
Bonjour,

En copiant les valeurs d'une feuille à l'autre, les formats de dates
changent (format à l'américaine et autre ...).

1 - récupération de données :
'-------------
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

If Right(NomFichierImport, 3) = "xls" Then
Workbooks.Open NomFichierImport
Else
Workbooks.OpenText NomFichierImport, Tab:=True,
semicolon:=True, local:=True
End If

With ActiveSheet
.Cells.Copy
End With

Sheets("import").[a1].Select
.Paste
'-------------



2 - Transfert des données précédemment copiées :
'-------------
Set PlageImport = Range(Cells(x, 1), Cells(y, 7)) 'plage à copier
PlageImport.Copy
'-------------



3 - Collage des données dans une autre feuille.
'-------------
Worksheets(NomFeuilActivePlus1).Activate
ActiveSheet.Paste
'-------------



J'ai mis le minimun du code, en espérant que ça suffise ...

Lorsque je suis sur la feuille, dans "Format/Cellule/Nombre/Date" j'ai
bien le même format qq soient les feuilles aux différentes étapes de
transfert de données. A l'arrivée, les dates sont inversées, et j'ai
l'impression que ça dépend des postes (PC) sur lesquels on lance la
macro.

A noter qu'une date comme 18/02/09 restera au même format car il n'y a
pas 18 mois dans l'année (!) alors que la date au dessous du même
tableau changera si on a 04/03/09 (pour 3 avril !).

Merci pour vos lumières,

jp

3 réponses

Avatar
j-pascal
Bonsoir Denis,

'Rappel du code (je précise plus loin où j'ai fait une modif) :
'----
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Application.ScreenUpdating = False
Stop
If NomFichierImport = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Exit Sub
Else
réponse = MsgBox("Vous avez sélectionné le fichier : " &
NomFichierImport & Chr(10) _
& Chr(10) & "Confirmez-vous ce choix ?", vbYesNo +
vbQuestion, "validation en cours")
If réponse = vbNo Then Exit Sub
End If

If Right(NomFichierImport, 3) = "xls" Then
Workbooks.Open NomFichierImport
Else
'Workbooks.OpenText NomFichierImport, Tab:=True,
semicolon:=True, local:=True
Workbooks.OpenText NomFichierImport, FieldInfo:=Array(Array(7,
4)), Tab:=True, semicolon:=True, local:=True
End If
'----


J'ai modifié comme ceci :

'---
'Workbooks.OpenText NomFichierImport, Tab:=True, semicolon:=True,
local:=True
Workbooks.OpenText NomFichierImport, FieldInfo:=Array(Array(7,
4)), Tab:=True, semicolon:=True, local:=True
'---

(7ème colonne, format JMA)

Le pb, c'est que tu me dis : "Tu places ton curseur sur la méthode :
"OpenText" dans ta ligne de code workbooks.opentext
"

Mais ceci est la 2ème condition ; si le fichier importé est un fichier
"*.csv".

La méthode OpenText n'est pas dans la ligne :

'----
If Right(NomFichierImport, 3) = "xls" Then
Workbooks.Open NomFichierImport
'----

Si mon fichier importé est au format "xls", cette adaptation du code ne
change rien.

JP

Bonjour J-Pascal,

Petite correction... peu importe la version d'excel,
voici le numéro à utiliser pour le format des champs
pour chaque champ de ton tableau
A = année , M = Mois , J = Jour

Nom Valeur Description

xlGeneralFormat 1 Général.
xlTextFormat 2 Texte.
xlMDYFormat 3 Format de date MJA.
xlDMYFormat 4 Format de date JMA.
xlYMDFormat 5 Format de date AMD
xlMYDFormat 6 Format de date MAJ.
xlDYMFormat 7 Format de date JAM.
xlYDMFormat 8 Format de date AJM.
xlSkipColumn 9 La colonne n'est pas analysée.
xlEMDFormat 10 Format de date AMJ.


Tu places ton curseur sur la méthode : "OpenText" dans ta ligne de code
workbooks.opentext et tu appuies sur F1

Si tu as une version plus ancienne qu'excel 2002, tu n'as pas de paramètre
"Local" à définir dans la méthode OpenText. Si oui, tu n'as qu'à l'utiliser
dans ta ligne de code

Workbooks.opentext filename:=MonFichier.xls, Local:=True
(évidemment tu définis les autres paramètres nécessaires ...

Pour pouvoir définir le paramètre d'une colonne (champ) particulière
dans un tableau, tu dois utiliser le paramètre FieldInfo.
Workbooks.opentext filename:=MonFichier.xls, FieldInfo:=array(array(1,4))
(évidemment tu définis les autres paramètres nécessaires ...

FieldInfo:=array(array(1,4))
le 1 = Numéro de la colonne(champ) de ton tableau
le 4 = le format retenu pour cette colonne
(4 -> c'est un exemple, il faut aller voir dans l'aide le vrai numéro)

Tu peux te contenter de définir seulement les champs ayant un
format spécifique.





"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,

En copiant les valeurs d'une feuille à l'autre, les formats de dates
changent (format à l'américaine et autre ...).

1 - récupération de données :
'-------------
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

If Right(NomFichierImport, 3) = "xls" Then
Workbooks.Open NomFichierImport
Else
Workbooks.OpenText NomFichierImport, Tab:=True,
semicolon:=True, local:=True
End If

With ActiveSheet
.Cells.Copy
End With

Sheets("import").[a1].Select
.Paste
'-------------



2 - Transfert des données précédemment copiées :
'-------------
Set PlageImport = Range(Cells(x, 1), Cells(y, 7)) 'plage à copier
PlageImport.Copy
'-------------



3 - Collage des données dans une autre feuille.
'-------------
Worksheets(NomFeuilActivePlus1).Activate
ActiveSheet.Paste
'-------------



J'ai mis le minimun du code, en espérant que ça suffise ...

Lorsque je suis sur la feuille, dans "Format/Cellule/Nombre/Date" j'ai
bien le même format qq soient les feuilles aux différentes étapes de
transfert de données. A l'arrivée, les dates sont inversées, et j'ai
l'impression que ça dépend des postes (PC) sur lesquels on lance la
macro.

A noter qu'une date comme 18/02/09 restera au même format car il n'y a
pas 18 mois dans l'année (!) alors que la date au dessous du même
tableau changera si on a 04/03/09 (pour 3 avril !).

Merci pour vos lumières,

jp


Avatar
MichDenis
Tu demandes de l'information sur l'ouverture un fichier "TEXTE"
le code que tu utilises "OpenText" laisse à penser qu'il
s'agit d'un fichier ayant l'extension .txt . Le message suivant,
tu dis que ton fichier a une extension .csv. Il faut te faire
une idée avant de poser ta question !

pour ouvrir un fichier .CSV, tu dois utiliser la méthode
Workbooks.Open filename:=chemin & fichier.xls,Local:=True

cela était pour une version Excel 2002 ou plus récent.

Si ta version d'Excel est moins récente que 2002, pour utiliser
la méthode OpenText pour ouvrir un fichier .csv, tu dois d'abord
modifier l'extension du fichier dans l'explorateur Windows avant de l'ouvrir.
Avatar
j-pascal
Dans le code suivant, qui semble avoir toujours fonctionné (!), si le
fichier importé est en "*.csv", le fichier se "convertit" (tout au
moins, c'est ce que je comprends, puisque les valeurs se placent bien
dans des colonnes respectives et donc sans séparations avec des ";", ce
qui me fait dire que ça ressemble à de l'Excel (...).

Si le fichier importé est déjà du "*.xls", il reste en l'état !

'----
NomFichierImport = Application.GetOpenFilename(typeFichier, , Titre)

Application.ScreenUpdating = False
Stop
If NomFichierImport = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Exit Sub
Else
réponse = MsgBox("Vous avez sélectionné le fichier : " &
NomFichierImport & Chr(10) _
& Chr(10) & "Confirmez-vous ce choix ?", vbYesNo +
vbQuestion, "validation en cours")
If réponse = vbNo Then Exit Sub
End If

If Right(NomFichierImport, 3) = "xls" Then
Workbooks.Open NomFichierImport
Else
'Workbooks.OpenText NomFichierImport, Tab:=True,
semicolon:=True, local:=True
Workbooks.OpenText NomFichierImport, FieldInfo:=Array(Array(7,
4)), Tab:=True, semicolon:=True, local:=True
End If
'----

Ma question est de savoir si l'on peut (sur la base que tu m'as proposé
tout à l'heure) "forcer" le format des dates afin qu'il reste le même
d'un bout à l'autre des "copier/coller" (et a fortiori qu'il soit
"*.xls" ou "*.csv".

Je n'ai pas l'impression d'avoir formulé ma "demande" autrement !

Désolé si je me suis mal exprimé.

JP

Tu demandes de l'information sur l'ouverture un fichier "TEXTE"
le code que tu utilises "OpenText" laisse à penser qu'il
s'agit d'un fichier ayant l'extension .txt . Le message suivant,
tu dis que ton fichier a une extension .csv. Il faut te faire
une idée avant de poser ta question !

pour ouvrir un fichier .CSV, tu dois utiliser la méthode
Workbooks.Open filename:=chemin & fichier.xls,Local:=True

cela était pour une version Excel 2002 ou plus récent.

Si ta version d'Excel est moins récente que 2002, pour utiliser
la méthode OpenText pour ouvrir un fichier .csv, tu dois d'abord
modifier l'extension du fichier dans l'explorateur Windows avant de l'ouvrir.