Bonjour =E0 tous,
Chez certains utilisateurs, lorsque j'importe des donn=E9es de type date de=
puis une table Access, le format devient MM/JJ/AAAA au lieu de JJ/MM/AAAA.
Le format du champs de la table access est DATE/ABREGE.
Le format de la cellule de ma feuille Excel est Date (dd/mm/yyyy)
J'ai v=E9rifi=E9 les param=E8tres r=E9gionaux - tout me semble correcte - f=
ormat date courte =3D JJ/MM/AAAA.
J'accède à la base de données via DAO et la commande d'insertion: range("A2")=rs.fields("MaDate")
Merci pour ton aide
Cordialement Charles
LSteph
Bonjour,
Cela pose-t-il le même souci si tu exporte au format excel depuis access et qu'ensuite tu l'ouvre depuis le menu d'excel?
Sinon si tu fais l'import depuis excel tu as menu données ou ruban la commande Convertir que tu peux appliquer à ta colonne date.
-- LSteph
a écrit dans le message de news: Bonjour à tous, Chez certains utilisateurs, lorsque j'importe des données de type date depuis une table Access, le format devient MM/JJ/AAAA au lieu de JJ/MM/AAAA. Le format du champs de la table access est DATE/ABREGE. Le format de la cellule de ma feuille Excel est Date (dd/mm/yyyy) J'ai vérifié les paramètres régionaux - tout me semble correcte - format date courte = JJ/MM/AAAA.
Y-a-t'il une solution à ce problème ?
Merci pour votre aide Cordialement Charles
Bonjour,
Cela pose-t-il le même souci si tu exporte au format excel depuis access
et qu'ensuite tu l'ouvre depuis le menu d'excel?
Sinon si tu fais l'import depuis excel tu as menu données ou ruban la
commande Convertir que tu peux appliquer à ta colonne date.
--
LSteph
<chschauss@gmail.com> a écrit dans le message de
news:f1451787-fa83-4185-a15e-a96d7203a145@googlegroups.com...
Bonjour à tous,
Chez certains utilisateurs, lorsque j'importe des données de type date
depuis une table Access, le format devient MM/JJ/AAAA au lieu de JJ/MM/AAAA.
Le format du champs de la table access est DATE/ABREGE.
Le format de la cellule de ma feuille Excel est Date (dd/mm/yyyy)
J'ai vérifié les paramètres régionaux - tout me semble correcte - format
date courte = JJ/MM/AAAA.
Cela pose-t-il le même souci si tu exporte au format excel depuis access et qu'ensuite tu l'ouvre depuis le menu d'excel?
Sinon si tu fais l'import depuis excel tu as menu données ou ruban la commande Convertir que tu peux appliquer à ta colonne date.
-- LSteph
a écrit dans le message de news: Bonjour à tous, Chez certains utilisateurs, lorsque j'importe des données de type date depuis une table Access, le format devient MM/JJ/AAAA au lieu de JJ/MM/AAAA. Le format du champs de la table access est DATE/ABREGE. Le format de la cellule de ma feuille Excel est Date (dd/mm/yyyy) J'ai vérifié les paramètres régionaux - tout me semble correcte - format date courte = JJ/MM/AAAA.
Y-a-t'il une solution à ce problème ?
Merci pour votre aide Cordialement Charles
MichD
Bonjour,
Voici un exemple avec ADO (activex data object)
Seulement ces 3 lignes de code de la procédure ont besoin d'être définies selon les paramètres de ton application.
ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE : 'Microsoft activex data objects 2.8 library
'------------------------------------------ Sub ImporterDesDonnéesDeAccess()
'Si ta table dans Access contient un champ "OleObject" 'Il faut l'exclure de la requête...sinon ça va planter !!!
'Les champs "date" de la table Access vont apparaître 'dans Excel sous leur forme numérique avec la méthode 'CopyFromRecordSet version Excel 2000 et plus. Au besoin 'prévoir quelques lignes de code pour formatage
Dim X As Integer, C As Integer Dim Cnt As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim Rg As Range, Sh As Worksheet Dim NbEnr As Long, CheminDb As String Dim NomTable As String, NomFeuille As String Dim Tblo As Variant, Requete As String
'------------------------VARIABLES À DÉFINIR----------------------------- CheminDb = "C:Mes documentsComptoir.mdb" NomTable = "Employés" Requete = "Select * From " & NomTable & "" '----------------------------------------------------------------------------------- 'La chaîne de connexion à une base de données Access Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & CheminDb & ";"
'Ouverture du recordset Rst.Open Requete, Cnt, adOpenStatic
'Si aucun enregistrement est trouvé lors de la requête If Rst.RecordCount = 0 Then MsgBox "Aucun enregistrement trouvé." & vbCrLf & _ "Fin de l'opération.", vbInformation + vbOKOnly, "Annulation" ' Ferme la connection et le recordset Rst.Close: Cnt.Close 'Libère la mémoire vive occupée par les objets Set Rst = Nothing: Set Cnt = Nothing Set Rg = Nothing: Set sh = Nothing Exit sub End If
'Éviter le rafraîchissement de l'écran Application.ScreenUpdating = False
'Conserve dans une variable le nom de la feuille active. NomFeuille = ThisWorkbook.ActiveSheet.Name
'Ajoute une nouvelle feuille où seront acheminées les données Set Sh = Worksheets.Add
'détermine la cellule supérieure gauche où 'le recordset va être copié With Sh Set Rg = .Range("A1") End With
'Si tu es intéressé de récupérer directement les noms 'des champs de ton recordset, tu peux utiliser ce 'qui suit :
Do Rg.Offset(, C) = Rst.Fields(C).Name C = C + 1 X = X + 1 Loop Until X = Rst.Fields.Count
'Section copiant le recordset dans Excel
'La procédure va pouvoir choisir selon la version 'd'Excel d'installer laquelle des méthodes choisir.
'Un test sur la version Excel en cours ... If Val(Application.Version)> 8 Then 'EXCEL 2000 or 2002: La méthode CopyFromRecordset Rg.Offset(1).CopyFromRecordset Rst Else 'EXCEL 97 ou antérieur: Méthode GetRows
' GetRows transforme le recordset en tableau de base 0 Tblo = Rst.GetRows 'Première dimension tableau = Champ du recordset 'Deuxième dimension Tableau = Données du recordset
'Détermine le nombre d'enregistrements 'Le +1 c'est pour tenir compte du tableau qui est de 'base 0 ... première cellule dans Excel est cells(1,1) NbEnr = UBound(Tblo, 2) + 1
'Transpose le tableau(tblo) pour que la première dimension 'devienne les données et que sa présentation soit 'conforme lorsqu'il sera copié dans Excel Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value = TransposeSpecial(Tblo) End If
'Redimensionnement des cellules. Rg.CurrentRegion.Columns.AutoFit Rg.CurrentRegion.Rows.AutoFit
'Sélection de la feuille au départ de la procédure Worksheets(NomFeuille).Select
' Ferme la connection et le recordset Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets Set Rst = Nothing: Set Cnt = Nothing Set Rg = Nothing: Set sh = Nothing End Sub '------------------------------------------
'Fonction requise par la procédure pour les 'versions antérieures à Excel 2000
'------------------------------------------ Function TransposeSpecial(ByRef Arr As Variant) As Variant Dim A As Integer, B As Integer, Arr1() As Variant Dim C As Integer, D As Integer A = UBound(Arr, 1): B = UBound(Arr, 2) ReDim Arr1(B, A) For C = 0 To A For D = 0 To B Arr1(D, C) = Arr(C, D) Next Next TransposeSpecial = (Arr1) End Function '------------------------------------------
ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.8 library
'------------------------------------------
Sub ImporterDesDonnéesDeAccess()
'Si ta table dans Access contient un champ "OleObject"
'Il faut l'exclure de la requête...sinon ça va planter !!!
'Les champs "date" de la table Access vont apparaître
'dans Excel sous leur forme numérique avec la méthode
'CopyFromRecordSet version Excel 2000 et plus. Au besoin
'prévoir quelques lignes de code pour formatage
Dim X As Integer, C As Integer
Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range, Sh As Worksheet
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String
'------------------------VARIABLES À DÉFINIR-----------------------------
CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""
'-----------------------------------------------------------------------------------
'La chaîne de connexion à une base de données Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"
'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic
'Si aucun enregistrement est trouvé lors de la requête
If Rst.RecordCount = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
Exit sub
End If
'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False
'Conserve dans une variable le nom de la feuille active.
NomFeuille = ThisWorkbook.ActiveSheet.Name
'Ajoute une nouvelle feuille où seront acheminées les données
Set Sh = Worksheets.Add
'détermine la cellule supérieure gauche où
'le recordset va être copié
With Sh
Set Rg = .Range("A1")
End With
'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count
'Section copiant le recordset dans Excel
'La procédure va pouvoir choisir selon la version
'd'Excel d'installer laquelle des méthodes choisir.
'Un test sur la version Excel en cours ...
If Val(Application.Version)> 8 Then
'EXCEL 2000 or 2002: La méthode CopyFromRecordset
Rg.Offset(1).CopyFromRecordset Rst
Else
'EXCEL 97 ou antérieur: Méthode GetRows
' GetRows transforme le recordset en tableau de base 0
Tblo = Rst.GetRows
'Première dimension tableau = Champ du recordset
'Deuxième dimension Tableau = Données du recordset
'Détermine le nombre d'enregistrements
'Le +1 c'est pour tenir compte du tableau qui est de
'base 0 ... première cellule dans Excel est cells(1,1)
NbEnr = UBound(Tblo, 2) + 1
'Transpose le tableau(tblo) pour que la première dimension
'devienne les données et que sa présentation soit
'conforme lorsqu'il sera copié dans Excel
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value =
TransposeSpecial(Tblo)
End If
'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit
'Sélection de la feuille au départ de la procédure
Worksheets(NomFeuille).Select
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
End Sub
'------------------------------------------
'Fonction requise par la procédure pour les
'versions antérieures à Excel 2000
'------------------------------------------
Function TransposeSpecial(ByRef Arr As Variant) As Variant
Dim A As Integer, B As Integer, Arr1() As Variant
Dim C As Integer, D As Integer
A = UBound(Arr, 1): B = UBound(Arr, 2)
ReDim Arr1(B, A)
For C = 0 To A
For D = 0 To B
Arr1(D, C) = Arr(C, D)
Next
Next
TransposeSpecial = (Arr1)
End Function
'------------------------------------------
ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE : 'Microsoft activex data objects 2.8 library
'------------------------------------------ Sub ImporterDesDonnéesDeAccess()
'Si ta table dans Access contient un champ "OleObject" 'Il faut l'exclure de la requête...sinon ça va planter !!!
'Les champs "date" de la table Access vont apparaître 'dans Excel sous leur forme numérique avec la méthode 'CopyFromRecordSet version Excel 2000 et plus. Au besoin 'prévoir quelques lignes de code pour formatage
Dim X As Integer, C As Integer Dim Cnt As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim Rg As Range, Sh As Worksheet Dim NbEnr As Long, CheminDb As String Dim NomTable As String, NomFeuille As String Dim Tblo As Variant, Requete As String
'------------------------VARIABLES À DÉFINIR----------------------------- CheminDb = "C:Mes documentsComptoir.mdb" NomTable = "Employés" Requete = "Select * From " & NomTable & "" '----------------------------------------------------------------------------------- 'La chaîne de connexion à une base de données Access Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & CheminDb & ";"
'Ouverture du recordset Rst.Open Requete, Cnt, adOpenStatic
'Si aucun enregistrement est trouvé lors de la requête If Rst.RecordCount = 0 Then MsgBox "Aucun enregistrement trouvé." & vbCrLf & _ "Fin de l'opération.", vbInformation + vbOKOnly, "Annulation" ' Ferme la connection et le recordset Rst.Close: Cnt.Close 'Libère la mémoire vive occupée par les objets Set Rst = Nothing: Set Cnt = Nothing Set Rg = Nothing: Set sh = Nothing Exit sub End If
'Éviter le rafraîchissement de l'écran Application.ScreenUpdating = False
'Conserve dans une variable le nom de la feuille active. NomFeuille = ThisWorkbook.ActiveSheet.Name
'Ajoute une nouvelle feuille où seront acheminées les données Set Sh = Worksheets.Add
'détermine la cellule supérieure gauche où 'le recordset va être copié With Sh Set Rg = .Range("A1") End With
'Si tu es intéressé de récupérer directement les noms 'des champs de ton recordset, tu peux utiliser ce 'qui suit :
Do Rg.Offset(, C) = Rst.Fields(C).Name C = C + 1 X = X + 1 Loop Until X = Rst.Fields.Count
'Section copiant le recordset dans Excel
'La procédure va pouvoir choisir selon la version 'd'Excel d'installer laquelle des méthodes choisir.
'Un test sur la version Excel en cours ... If Val(Application.Version)> 8 Then 'EXCEL 2000 or 2002: La méthode CopyFromRecordset Rg.Offset(1).CopyFromRecordset Rst Else 'EXCEL 97 ou antérieur: Méthode GetRows
' GetRows transforme le recordset en tableau de base 0 Tblo = Rst.GetRows 'Première dimension tableau = Champ du recordset 'Deuxième dimension Tableau = Données du recordset
'Détermine le nombre d'enregistrements 'Le +1 c'est pour tenir compte du tableau qui est de 'base 0 ... première cellule dans Excel est cells(1,1) NbEnr = UBound(Tblo, 2) + 1
'Transpose le tableau(tblo) pour que la première dimension 'devienne les données et que sa présentation soit 'conforme lorsqu'il sera copié dans Excel Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value = TransposeSpecial(Tblo) End If
'Redimensionnement des cellules. Rg.CurrentRegion.Columns.AutoFit Rg.CurrentRegion.Rows.AutoFit
'Sélection de la feuille au départ de la procédure Worksheets(NomFeuille).Select
' Ferme la connection et le recordset Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets Set Rst = Nothing: Set Cnt = Nothing Set Rg = Nothing: Set sh = Nothing End Sub '------------------------------------------
'Fonction requise par la procédure pour les 'versions antérieures à Excel 2000
'------------------------------------------ Function TransposeSpecial(ByRef Arr As Variant) As Variant Dim A As Integer, B As Integer, Arr1() As Variant Dim C As Integer, D As Integer A = UBound(Arr, 1): B = UBound(Arr, 2) ReDim Arr1(B, A) For C = 0 To A For D = 0 To B Arr1(D, C) = Arr(C, D) Next Next TransposeSpecial = (Arr1) End Function '------------------------------------------