OVH Cloud OVH Cloud

erreur automation(erreur 440)

10 réponses
Avatar
ALF
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:\Fregate\MacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:\Fregate\MacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
.On = True
.Visible = True
.Move xLeft = 1500, yTop = 1200
.MoveWhenInTheWay = True
.TipOfDay = True
.Animation = msoAnimationGoodbye
.On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:\Fregate\1.txt" = "" Then GoTo Imi2
ChDir "U:\Fregate"
Workbooks.OpenText Filename:="U:\Fregate\1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True,
Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:\Fregate\1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:=False _
, CreateBackup:=False
Imi2:
If Dir() = "U:\Fregate\2.txt" = "" Then GoTo Imi3
ChDir "U:\Fregate"
Workbooks.OpenText Filename:="U:\Fregate\2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True,
Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:\Fregate\2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:=False _
, CreateBackup:=False ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF

10 réponses

Avatar
MichDenis
Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
.On = True
.Visible = True
.Move xLeft = 1500, yTop = 1200
.MoveWhenInTheWay = True
.TipOfDay = True
.Animation = msoAnimationGoodbye
.On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF
Avatar
ALF
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF





Avatar
MichDenis
Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF





Avatar
ALF
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF










Avatar
MichDenis
Bonjour Alf,

Tes fichiers sont-ils dans le même répertoire ?
Est-ce que tous les fichiers de ce répertoire ayant la même extension ont besoin d'être traité ?

Tous tes fichiers texte ont la même structure : Même nombre de colonnes , même nom des champs ? Quel est le séparateur utilisé dans
tes fichiers texte ? Est-ce que la somme des enregistrements de tes fichiers texte dépasse 65536 enregistrements ?

Il me semble qu'il est possible d'importer des fichiers texte directement dans Access ... Non ? Elle est où la difficulté ?


Salutations!




"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF










Avatar
MichDenis
Bonjour Alf,

Voici une procédure qui te permet d'importer directement dans une table d'une base de données Acces, tous les fichiers texte d'un
répertoire donné.

A ) Il ne te reste plus que les variables à renseigner.

B ) Tu devras ajuster le nombre de champs que ta table contient dans la procédure en fonction de la vrai table!

C ) Évidemment, Tu dois porter une attention particulière au type de données. Access est pointilleux sur ce point. Je t'ai fait un
exemple avec un champ texte et un champ double.Comment importer les données pour que tout se passe en douceur ! La procédure se
charge de modifier le séparateur décimale si ce dernier n'est pas le même entre le fichier texte et la table Access pour le champ
double.. L'Utilisation des fonctions de conversion permet de modifier la donnée texte selon le type approprié défin dans la table
Access.

D ) Même lors d'une importation, les critères de validation de la table "access" doivent être respectés. Sinon gare aux pépins.

Amuse-toi bien...!

'---------------------------------------------------------
Private Sub ImporterFichierTexte()

Dim Db As Database, Rst As Recordset
Dim X As Long, N As Long, Ligne As String
Dim MaTable As String, Sep As String, Fichier As String
Dim BaseDeDonnées As String, SepDec As String
Dim Répertoire As String, Ext As String

'*******VARIABLES À RENSEIGNER**********

'Nom et chemin de la base de données
BaseDeDonnées = "c:Atravailcomptoir.mdb"
'Nom de la table où les données aboutiront
MaTable = "Denis"
'Répertoire Où sont les fichiers texte à importer
Répertoire = "c:Atravail"
'Extension des fichiers texte
Ext = ".csv"
'Séparateur utilisé ds fichier texte
Sep = ";"

'****************************************

'Identifier le séparateur décimale
SepDec = Left(Format(0#, ".00"), 1)

Set Db = CurrentDb
Set Db = DBEngine(0).OpenDatabase(BaseDeDonnées)
On Error Resume Next
Set Rst = Db.OpenRecordset(MaTable, dbOpenTable)

Fichier = Dir(Répertoire & Ext)
Do While Fichier <> ""
N = FreeFile
Open Répertoire & Fichier For Input As N
' Cette ligne permet de sauter la permière ligne :
'Nom des champs inscrit dans les fichiers texte
Line Input #N, Ligne

Do While Not EOF(N)
Line Input #N, Ligne
X = X + 1
S = Split(Ligne, Sep)
Rst.AddNew
'rs (0) -> COMPTEUR NUMÉRO AUTOMATIQUE
'Pour s'assurer du bon séparateur décimale
S(0) = Replace(S(0), ".", SepDec)
If IsNumeric(S(0)) Then
Rst(1) = CDbl(S(0)) 'champ numérique double
End If
If IsDate(S(1)) Then
Rst(2) = CDate(S(1)) 'champ date
End If
Rst(2) = S(2) ' champ texte
Rst.Update
Loop
Close #N
X = 0
Fichier = Dir
Loop
Rst.Close: Db.Close
Set Rst = Nothing: Set Db = Nothing

End Sub
'---------------------------------------------------------


Salutations!





"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF










Avatar
MichDenis
Évidemment, cette procédure doit être copié dans un module standard de ta base de données.
Elle utilise Dao comme support.


Salutations!



"MichDenis" a écrit dans le message de news: %
Bonjour Alf,

Voici une procédure qui te permet d'importer directement dans une table d'une base de données Acces, tous les fichiers texte d'un
répertoire donné.

A ) Il ne te reste plus que les variables à renseigner.

B ) Tu devras ajuster le nombre de champs que ta table contient dans la procédure en fonction de la vrai table!

C ) Évidemment, Tu dois porter une attention particulière au type de données. Access est pointilleux sur ce point. Je t'ai fait un
exemple avec un champ texte et un champ double.Comment importer les données pour que tout se passe en douceur ! La procédure se
charge de modifier le séparateur décimale si ce dernier n'est pas le même entre le fichier texte et la table Access pour le champ
double.. L'Utilisation des fonctions de conversion permet de modifier la donnée texte selon le type approprié défin dans la table
Access.

D ) Même lors d'une importation, les critères de validation de la table "access" doivent être respectés. Sinon gare aux pépins.

Amuse-toi bien...!

'---------------------------------------------------------
Private Sub ImporterFichierTexte()

Dim Db As Database, Rst As Recordset
Dim X As Long, N As Long, Ligne As String
Dim MaTable As String, Sep As String, Fichier As String
Dim BaseDeDonnées As String, SepDec As String
Dim Répertoire As String, Ext As String

'*******VARIABLES À RENSEIGNER**********

'Nom et chemin de la base de données
BaseDeDonnées = "c:Atravailcomptoir.mdb"
'Nom de la table où les données aboutiront
MaTable = "Denis"
'Répertoire Où sont les fichiers texte à importer
Répertoire = "c:Atravail"
'Extension des fichiers texte
Ext = ".csv"
'Séparateur utilisé ds fichier texte
Sep = ";"

'****************************************

'Identifier le séparateur décimale
SepDec = Left(Format(0#, ".00"), 1)

Set Db = CurrentDb
Set Db = DBEngine(0).OpenDatabase(BaseDeDonnées)
On Error Resume Next
Set Rst = Db.OpenRecordset(MaTable, dbOpenTable)

Fichier = Dir(Répertoire & Ext)
Do While Fichier <> ""
N = FreeFile
Open Répertoire & Fichier For Input As N
' Cette ligne permet de sauter la permière ligne :
'Nom des champs inscrit dans les fichiers texte
Line Input #N, Ligne

Do While Not EOF(N)
Line Input #N, Ligne
X = X + 1
S = Split(Ligne, Sep)
Rst.AddNew
'rs (0) -> COMPTEUR NUMÉRO AUTOMATIQUE
'Pour s'assurer du bon séparateur décimale
S(0) = Replace(S(0), ".", SepDec)
If IsNumeric(S(0)) Then
Rst(1) = CDbl(S(0)) 'champ numérique double
End If
If IsDate(S(1)) Then
Rst(2) = CDate(S(1)) 'champ date
End If
Rst(2) = S(2) ' champ texte
Rst.Update
Loop
Close #N
X = 0
Fichier = Dir
Loop
Rst.Close: Db.Close
Set Rst = Nothing: Set Db = Nothing

End Sub
'---------------------------------------------------------


Salutations!





"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF










Avatar
ALF
un grand Merci Pour cette foule d information enrichissante...
si j ai bien compris ,j abandonne l automation et je n utilise que procedure
access avec DAO comme support??..
etant neophyte j ai besoin de plus de precision..N
,X,S,EOF,SPLIT,Rst.AddNew,Fichier=Dir, Rst.Update, N=FreeFile correspondent a
quoi..
et si je copie cette procedure sur access..le code visual basic access va t
il accepter le code visual basic excel??

AUTRE REMARQUE importante: la ligne des noms de champs correspond a la 4eme
ligne..les 3 premieres lignes etant simplement de l information.il faudrait
donc sauter les 4 premieres lignes....c est pour cela que j utilisais excel
car la specification d importation d access ne permet pas de commencer a la
ligne que l on desire...
..

CELA fait beaucoup de question a la fois mais au moins on y revient pas...

Encore Merci pour ton soutien...





--
ALF



Évidemment, cette procédure doit être copié dans un module standard de ta base de données.
Elle utilise Dao comme support.


Salutations!



"MichDenis" a écrit dans le message de news: %
Bonjour Alf,

Voici une procédure qui te permet d'importer directement dans une table d'une base de données Acces, tous les fichiers texte d'un
répertoire donné.

A ) Il ne te reste plus que les variables à renseigner.

B ) Tu devras ajuster le nombre de champs que ta table contient dans la procédure en fonction de la vrai table!

C ) Évidemment, Tu dois porter une attention particulière au type de données. Access est pointilleux sur ce point. Je t'ai fait un
exemple avec un champ texte et un champ double.Comment importer les données pour que tout se passe en douceur ! La procédure se
charge de modifier le séparateur décimale si ce dernier n'est pas le même entre le fichier texte et la table Access pour le champ
double.. L'Utilisation des fonctions de conversion permet de modifier la donnée texte selon le type approprié défin dans la table
Access.

D ) Même lors d'une importation, les critères de validation de la table "access" doivent être respectés. Sinon gare aux pépins.

Amuse-toi bien...!

'---------------------------------------------------------
Private Sub ImporterFichierTexte()

Dim Db As Database, Rst As Recordset
Dim X As Long, N As Long, Ligne As String
Dim MaTable As String, Sep As String, Fichier As String
Dim BaseDeDonnées As String, SepDec As String
Dim Répertoire As String, Ext As String

'*******VARIABLES À RENSEIGNER**********

'Nom et chemin de la base de données
BaseDeDonnées = "c:Atravailcomptoir.mdb"
'Nom de la table où les données aboutiront
MaTable = "Denis"
'Répertoire Où sont les fichiers texte à importer
Répertoire = "c:Atravail"
'Extension des fichiers texte
Ext = ".csv"
'Séparateur utilisé ds fichier texte
Sep = ";"

'****************************************

'Identifier le séparateur décimale
SepDec = Left(Format(0#, ".00"), 1)

Set Db = CurrentDb
Set Db = DBEngine(0).OpenDatabase(BaseDeDonnées)
On Error Resume Next
Set Rst = Db.OpenRecordset(MaTable, dbOpenTable)

Fichier = Dir(Répertoire & Ext)
Do While Fichier <> ""
N = FreeFile
Open Répertoire & Fichier For Input As N
' Cette ligne permet de sauter la permière ligne :
'Nom des champs inscrit dans les fichiers texte
Line Input #N, Ligne

Do While Not EOF(N)
Line Input #N, Ligne
X = X + 1
S = Split(Ligne, Sep)
Rst.AddNew
'rs (0) -> COMPTEUR NUMÉRO AUTOMATIQUE
'Pour s'assurer du bon séparateur décimale
S(0) = Replace(S(0), ".", SepDec)
If IsNumeric(S(0)) Then
Rst(1) = CDbl(S(0)) 'champ numérique double
End If
If IsDate(S(1)) Then
Rst(2) = CDate(S(1)) 'champ date
End If
Rst(2) = S(2) ' champ texte
Rst.Update
Loop
Close #N
X = 0
Fichier = Dir
Loop
Rst.Close: Db.Close
Set Rst = Nothing: Set Db = Nothing

End Sub
'---------------------------------------------------------


Salutations!





"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF
















Avatar
MichDenis
Bonjour Alf,

La procédure proposée n'est qu'un exemple d'une possibilité qui s'ouvre à toi pour importer des fichiers "texte" ayant exactement la
même structure dans un répertoire donné, dans une table d'une base de données. Cette procédure ne crée pas la table où seront
insérées les données. Elle est réputée exister avant le début de la procédure.

Cette procédure s'exécute directement à partir d'un module Access, nul besoin d'utliser Excel pour faire cela. (C'est une question
de choix). Je ne l'ai pas testé sous Excel, mais à quelques détails près, il est sûrement possible de l'utiliser sans problème sous
Excel. Tu copies la procédure dans un module standard d'access et tu ajoutes la référence suivante si ce n'est pas déjà fait :
"Microsoft DAO 3.6 Object Librairy" .
Pour ce faire, à partir de la barre des menus lorsque ton module dans access est ouvert : Outils / réferences / et tu coches la
référence mentionnée dans la liste.

Pour ce qui est des précisions que tu demandes, elles sont beaucoup trop exhaustives dans le cadre de ce forum. Tu peux cependant
mettre le curseur sur un de ces mots clé, et si tu appuies sur F1 tu devrais avoir un début d'explication. Pour plusieurs de ces
notions,
Rst = variable représentant un Recordset
Eof , AddNew, Update, ce sont des méthodes associées à un objet Recordset
Tu as le "Forum Access" qui peut t'apporter un complément d'informations si tu as une question précise.

S = c'est une variable dont j'ai oublié de faire la déclaration
tu peux l'ajouter : Dim S as Variant

X = Variable , N = variable de type Long

FreeFile = Tu vas trouver de l'information dans le chapitre d'un bouquin traitant de la gestion des fichiers texte. Ouvrir , lire ,
écrire et fermer un fichier texte ...Il y a peut être un début d'explication sur le site de Misange.

La fonction Split n'est disponible qu'à partir de la version Excel 2000, je suppose que cela doit être la même chose pour access, je
n'ai pas vérifié.

Pour débuter l'importation à la ligne 5, tu insères dans la boucle qui lit le fichier texte une variable qui compte le nombre de
boucles et lorsque la variable est égale à 5, elle exécute la procédure. La lecture du fichier texte se fait une ligne à la fois.
C'est ce que représente la variable Ligne dans la procédure.

Si tu es vraiment néophyte, cela va te faire beaucoup de pain sur la planche car c'est une procédure plutôt complexe pour ton
niveau.

Bon travail!


Salutations!


"ALF" a écrit dans le message de news:
un grand Merci Pour cette foule d information enrichissante...
si j ai bien compris ,j abandonne l automation et je n utilise que procedure
access avec DAO comme support??..
etant neophyte j ai besoin de plus de precision..N
,X,S,EOF,SPLIT,Rst.AddNew,Fichier=Dir, Rst.Update, N=FreeFile correspondent a
quoi..
et si je copie cette procedure sur access..le code visual basic access va t
il accepter le code visual basic excel??

AUTRE REMARQUE importante: la ligne des noms de champs correspond a la 4eme
ligne..les 3 premieres lignes etant simplement de l information.il faudrait
donc sauter les 4 premieres lignes....c est pour cela que j utilisais excel
car la specification d importation d access ne permet pas de commencer a la
ligne que l on desire...
..

CELA fait beaucoup de question a la fois mais au moins on y revient pas...

Encore Merci pour ton soutien...





--
ALF



Évidemment, cette procédure doit être copié dans un module standard de ta base de données.
Elle utilise Dao comme support.


Salutations!



"MichDenis" a écrit dans le message de news: %
Bonjour Alf,

Voici une procédure qui te permet d'importer directement dans une table d'une base de données Acces, tous les fichiers texte d'un
répertoire donné.

A ) Il ne te reste plus que les variables à renseigner.

B ) Tu devras ajuster le nombre de champs que ta table contient dans la procédure en fonction de la vrai table!

C ) Évidemment, Tu dois porter une attention particulière au type de données. Access est pointilleux sur ce point. Je t'ai fait un
exemple avec un champ texte et un champ double.Comment importer les données pour que tout se passe en douceur ! La procédure se
charge de modifier le séparateur décimale si ce dernier n'est pas le même entre le fichier texte et la table Access pour le champ
double.. L'Utilisation des fonctions de conversion permet de modifier la donnée texte selon le type approprié défin dans la table
Access.

D ) Même lors d'une importation, les critères de validation de la table "access" doivent être respectés. Sinon gare aux pépins.

Amuse-toi bien...!

'---------------------------------------------------------
Private Sub ImporterFichierTexte()

Dim Db As Database, Rst As Recordset
Dim X As Long, N As Long, Ligne As String
Dim MaTable As String, Sep As String, Fichier As String
Dim BaseDeDonnées As String, SepDec As String
Dim Répertoire As String, Ext As String

'*******VARIABLES À RENSEIGNER**********

'Nom et chemin de la base de données
BaseDeDonnées = "c:Atravailcomptoir.mdb"
'Nom de la table où les données aboutiront
MaTable = "Denis"
'Répertoire Où sont les fichiers texte à importer
Répertoire = "c:Atravail"
'Extension des fichiers texte
Ext = ".csv"
'Séparateur utilisé ds fichier texte
Sep = ";"

'****************************************

'Identifier le séparateur décimale
SepDec = Left(Format(0#, ".00"), 1)

Set Db = CurrentDb
Set Db = DBEngine(0).OpenDatabase(BaseDeDonnées)
On Error Resume Next
Set Rst = Db.OpenRecordset(MaTable, dbOpenTable)

Fichier = Dir(Répertoire & Ext)
Do While Fichier <> ""
N = FreeFile
Open Répertoire & Fichier For Input As N
' Cette ligne permet de sauter la permière ligne :
'Nom des champs inscrit dans les fichiers texte
Line Input #N, Ligne

Do While Not EOF(N)
Line Input #N, Ligne
X = X + 1
S = Split(Ligne, Sep)
Rst.AddNew
'rs (0) -> COMPTEUR NUMÉRO AUTOMATIQUE
'Pour s'assurer du bon séparateur décimale
S(0) = Replace(S(0), ".", SepDec)
If IsNumeric(S(0)) Then
Rst(1) = CDbl(S(0)) 'champ numérique double
End If
If IsDate(S(1)) Then
Rst(2) = CDate(S(1)) 'champ date
End If
Rst(2) = S(2) ' champ texte
Rst.Update
Loop
Close #N
X = 0
Fichier = Dir
Loop
Rst.Close: Db.Close
Set Rst = Nothing: Set Db = Nothing

End Sub
'---------------------------------------------------------


Salutations!





"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate1.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse
Imi2:
If Dir() = "U:Fregate2.txt" = "" Then GoTo Imi3
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate2.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,
Comma:úlse _
, Space:úlse, Other:úlse, FieldInfo:=Array(Array(1, 2), Array(2,
2), _
Array(3, 2), Array(4, 2), Array(5, 5), Array(6, 1), Array(7, 1),
Array(8, 2), Array(9, 2), _
Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 1))
Application.Run.Range ("EssOnSheetChange")
Cells.Select
Selection.Replace What:="MONTANT_ACI",
Replacement:="MONTANT_FREGATE", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse
ActiveWindow.LargeScroll ToRight:=1
ActiveWorkbook.SaveAs Filename:="U:Fregate2.xls", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="",
ReadOnlyRecommended:úlse _
, CreateBackup:úlse ....etc....
Imi31:
Application.DisplayAlerts = True

End Sub
ALF

--
ALF
















Avatar
ALF
mille fois merci pour ces precisions qui vont m etre utile...vraiment un
boulot de professionnel...je me met au boulot...salutations.
--
ALF



Bonjour Alf,

La procédure proposée n'est qu'un exemple d'une possibilité qui s'ouvre à toi pour importer des fichiers "texte" ayant exactement la
même structure dans un répertoire donné, dans une table d'une base de données. Cette procédure ne crée pas la table où seront
insérées les données. Elle est réputée exister avant le début de la procédure.

Cette procédure s'exécute directement à partir d'un module Access, nul besoin d'utliser Excel pour faire cela. (C'est une question
de choix). Je ne l'ai pas testé sous Excel, mais à quelques détails près, il est sûrement possible de l'utiliser sans problème sous
Excel. Tu copies la procédure dans un module standard d'access et tu ajoutes la référence suivante si ce n'est pas déjà fait :
"Microsoft DAO 3.6 Object Librairy" .
Pour ce faire, à partir de la barre des menus lorsque ton module dans access est ouvert : Outils / réferences / et tu coches la
référence mentionnée dans la liste.

Pour ce qui est des précisions que tu demandes, elles sont beaucoup trop exhaustives dans le cadre de ce forum. Tu peux cependant
mettre le curseur sur un de ces mots clé, et si tu appuies sur F1 tu devrais avoir un début d'explication. Pour plusieurs de ces
notions,
Rst = variable représentant un Recordset
Eof , AddNew, Update, ce sont des méthodes associées à un objet Recordset
Tu as le "Forum Access" qui peut t'apporter un complément d'informations si tu as une question précise.

S = c'est une variable dont j'ai oublié de faire la déclaration
tu peux l'ajouter : Dim S as Variant

X = Variable , N = variable de type Long

FreeFile = Tu vas trouver de l'information dans le chapitre d'un bouquin traitant de la gestion des fichiers texte. Ouvrir , lire ,
écrire et fermer un fichier texte ...Il y a peut être un début d'explication sur le site de Misange.

La fonction Split n'est disponible qu'à partir de la version Excel 2000, je suppose que cela doit être la même chose pour access, je
n'ai pas vérifié.

Pour débuter l'importation à la ligne 5, tu insères dans la boucle qui lit le fichier texte une variable qui compte le nombre de
boucles et lorsque la variable est égale à 5, elle exécute la procédure. La lecture du fichier texte se fait une ligne à la fois.
C'est ce que représente la variable Ligne dans la procédure.

Si tu es vraiment néophyte, cela va te faire beaucoup de pain sur la planche car c'est une procédure plutôt complexe pour ton
niveau.

Bon travail!


Salutations!


"ALF" a écrit dans le message de news:
un grand Merci Pour cette foule d information enrichissante...
si j ai bien compris ,j abandonne l automation et je n utilise que procedure
access avec DAO comme support??..
etant neophyte j ai besoin de plus de precision..N
,X,S,EOF,SPLIT,Rst.AddNew,Fichier=Dir, Rst.Update, N=FreeFile correspondent a
quoi..
et si je copie cette procedure sur access..le code visual basic access va t
il accepter le code visual basic excel??

AUTRE REMARQUE importante: la ligne des noms de champs correspond a la 4eme
ligne..les 3 premieres lignes etant simplement de l information.il faudrait
donc sauter les 4 premieres lignes....c est pour cela que j utilisais excel
car la specification d importation d access ne permet pas de commencer a la
ligne que l on desire...
...

CELA fait beaucoup de question a la fois mais au moins on y revient pas...

Encore Merci pour ton soutien...





--
ALF



Évidemment, cette procédure doit être copié dans un module standard de ta base de données.
Elle utilise Dao comme support.


Salutations!



"MichDenis" a écrit dans le message de news: %
Bonjour Alf,

Voici une procédure qui te permet d'importer directement dans une table d'une base de données Acces, tous les fichiers texte d'un
répertoire donné.

A ) Il ne te reste plus que les variables à renseigner.

B ) Tu devras ajuster le nombre de champs que ta table contient dans la procédure en fonction de la vrai table!

C ) Évidemment, Tu dois porter une attention particulière au type de données. Access est pointilleux sur ce point. Je t'ai fait un
exemple avec un champ texte et un champ double.Comment importer les données pour que tout se passe en douceur ! La procédure se
charge de modifier le séparateur décimale si ce dernier n'est pas le même entre le fichier texte et la table Access pour le champ
double.. L'Utilisation des fonctions de conversion permet de modifier la donnée texte selon le type approprié défin dans la table
Access.

D ) Même lors d'une importation, les critères de validation de la table "access" doivent être respectés. Sinon gare aux pépins.

Amuse-toi bien...!

'---------------------------------------------------------
Private Sub ImporterFichierTexte()

Dim Db As Database, Rst As Recordset
Dim X As Long, N As Long, Ligne As String
Dim MaTable As String, Sep As String, Fichier As String
Dim BaseDeDonnées As String, SepDec As String
Dim Répertoire As String, Ext As String

'*******VARIABLES À RENSEIGNER**********

'Nom et chemin de la base de données
BaseDeDonnées = "c:Atravailcomptoir.mdb"
'Nom de la table où les données aboutiront
MaTable = "Denis"
'Répertoire Où sont les fichiers texte à importer
Répertoire = "c:Atravail"
'Extension des fichiers texte
Ext = ".csv"
'Séparateur utilisé ds fichier texte
Sep = ";"

'****************************************

'Identifier le séparateur décimale
SepDec = Left(Format(0#, ".00"), 1)

Set Db = CurrentDb
Set Db = DBEngine(0).OpenDatabase(BaseDeDonnées)
On Error Resume Next
Set Rst = Db.OpenRecordset(MaTable, dbOpenTable)

Fichier = Dir(Répertoire & Ext)
Do While Fichier <> ""
N = FreeFile
Open Répertoire & Fichier For Input As N
' Cette ligne permet de sauter la permière ligne :
'Nom des champs inscrit dans les fichiers texte
Line Input #N, Ligne

Do While Not EOF(N)
Line Input #N, Ligne
X = X + 1
S = Split(Ligne, Sep)
Rst.AddNew
'rs (0) -> COMPTEUR NUMÉRO AUTOMATIQUE
'Pour s'assurer du bon séparateur décimale
S(0) = Replace(S(0), ".", SepDec)
If IsNumeric(S(0)) Then
Rst(1) = CDbl(S(0)) 'champ numérique double
End If
If IsDate(S(1)) Then
Rst(2) = CDate(S(1)) 'champ date
End If
Rst(2) = S(2) ' champ texte
Rst.Update
Loop
Close #N
X = 0
Fichier = Dir
Loop
Rst.Close: Db.Close
Set Rst = Nothing: Set Db = Nothing

End Sub
'---------------------------------------------------------


Salutations!





"ALF" a écrit dans le message de news:
un grand merci,

c etait bien une erreur de syntaxe...
effectivement je cherche a raccourcir cette procedure macro par une boucle .
cette macro sert essentiellement a mettre en forme un fichier .txt et l
enregistrer en xls pour faciliter l importation dans access.les fichiers en
questions sont des fichiers mensuels identiques sur leur
structure(1.txt,2.txt,3.txt..etc..) et leur chemin qui est U:Fregate. leur
nombre peut varier.
y aurait il un moyen de les appeller en utilisant des raccourcis comme le
signe * etc..

encore merci.
--
ALF



Bonjour Alf,

| If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2

devrait plutôt se lire :

If Dir("U:Fregate1.txt") = "" Then GoTo Imi2

En français, cette ligne de code se traduit : Si la fonction "Dir" ne trouve pas le fichier situé dans ce répertoire
"U:Fregate1.txt", moi, la fonction "dir" renvoie "" et tu te rends à Imi2

Cependant, j'ai remarqué que tu avais répété plusieurs fois le même traitement mais à un fichier ayant un nom différent...Si tu
décrivais ce que tu essaies de faire, peut être il y a moyen de faire plus court que de répéter x fois le même code !


Salutations!





"ALF" a écrit dans le message de news:
SALUT,
en fait a partir d un formulaire access j ai creé une procedure access qui
execute par automation les macro excel MacroRE5txt1 puis MacroRE5txt1 issues
du classeur MacroRE5txt.xls sur U:Fregate.
j ai un 1er message d erreur qui apparait sur excel "Erreur d execution 5
:argument ou appel de procedure incorrect" et apres debogage se positionne
sur la ligne"If Dir()=""U:Fregate1.txt" = Then..de la macro MacroRE5txt1 et
aprés fermeture d excel un 2eme message apparait sur access "erreur
automation"..
--
ALF



Bonjour Alf,

| je ne comprends pas pourquoi il y a ce message d erreur...

Quel est-t-il ? Et si ta macro plante sur une ligne en particulier.. tu devrais l'indiquer.... !

Est-ce que tes macros appelés sont dans le classeur que tu viens d'ouvrir ou dans le premier classeur que tu ouvres ?


Salutations!



"ALF" a écrit dans le message de news:
bonjour,
je vous laisse ci joint la procedure automation...
je ne comprends pas pourquoi il y a ce message d erreur...
pouvez vous m eclairer a ce sujet??...MERCI
--
porocedure access:
Private Sub MIS_EN_FORME_DblClick(Cancel As Integer)
On Error GoTo MIS_EN_FORME_Err

Dim XL_APP As Object
Set XL_APP = CreateObject("Excel.Application")
XL_APP.Visible = True
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt1")
XL_APP.Workbooks.Open ("U:FregateMacroRE5txt.xls")
XL_APP.Run ("MacroRE5txt2")
XL_APP.activeworkbook.Close
XL_APP.Quit
Set XL_APP = Nothing
MsgBox "TRAITEMENT TERMINE", vbInformation, "Mis en Forme Fichiers Fregate
Mensuels avant Import"
With Assistant
..On = True
..Visible = True
..Move xLeft = 1500, yTop = 1200
..MoveWhenInTheWay = True
..TipOfDay = True
..Animation = msoAnimationGoodbye
..On = False
End With
MIS_EN_FORME_Exit:
Exit Sub

MIS_EN_FORME_Err:
MsgBox Error$
Resume MIS_EN_FORME_Exit

End Sub

LA MACRO EXCEL est la suivante:
Sub MacroRE5txt1()
'
' MacroRE5txt1 Macro
' Macro enregistrée le 22/04/2005 par LOID6291
'
Application.DisplayAlerts = False
Imi1:
If Dir() = "U:Fregate1.txt" = "" Then GoTo Imi2
ChDir "U:Fregate"
Workbooks.OpenText Filename:="U:Fregate1.txt", Origin:=xlWindows, _
StartRow:=4, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:úlse, Tab:úlse, Semicolon:=True,