Talzatior
Nouveau membre
Bonjour à tous
J'explose mon obstacle actuel ... j'ai une feuille dun de mes fichiers, une facture pour être plus précis, dont je souhaite exporter quelques données dans un classeur d'archives ...
J'ai pratiquement réussi, mais je bute sur un obstacle ... Je vous présente dans un premier temps le code usité :
[cpp]Sub ArchiveFact()
Dim conn As Object
Dim requete As Object
Dim fact_num As Long
Dim fact_date As Date
Dim cmd_num As String
Dim cmd_date As Date
Dim nom_clt As String
Dim ech_date As Date
Dim tot_HT As Double
Dim texte_SQL As String
Dim classeur As String
Dim fichier As String
Sheets("Facture").Activate
'collecte les infos de la facture
fact_num = Range("A14")
fact_date = Range("A16")
cmd_num = CStr(Range("C16"))
cmd_date = Range("D16")
nom_clt = CStr(Range("F9"))
ech_date = Range("H16")
tot_HT = Range("F43")
'connexion à la base dans fichier archives.xls
classeur = "Archives_test.xls"
fichier = ThisWorkbook.Path & "\" & classeur
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""
' travail demandé: insère dans les champs de "Archives_fact" les données collectées
texte_SQL = "INSERT INTO Archives_fact (num_fact,date_fact,num_cmd,date_cmd,nom_clt,tot_HT,ech_date) VALUES ('" & (fact_num) & "','" & (fact_date) & "', '" & (cmd_num) & "','" & (cmd_date) & "','" & (nom_clt) & "','" & (ech_date) & "','" & (tot_HT) & "')"
' éxécute le travail demandé
Set requete = CreateObject("ADODB.recordset")
Set requete = conn.Execute(texte_SQL)
Set requete = Nothing
Set conn = Nothing
MsgBox "archivage de la facture n° " & fact_num & " effectué avec succès"
End SubCordialement.
[/cpp]
Il fonctionne bien presque parfaitement
Mon souci est le suivant : pour la première facture exportée, pas de souci, tout roule
Par contre pour la seconde, il me sort une erreur :
"Erreur d'exécution '-2147467259 (80004005)' :
Impossible d'agrandir la plage nommée."
J'ai regardé d'où cela pouvait venir, et en fait, il s'agit de la plage de données définie par "Archives_fact" dans ma ligne de sql ... en effet, si je veux que ce code fonctionne, je n'ai d'autre choix, pour le moment, que d'ouvrir après chaqeu enregistrement le classeur cible et de redéfinir ma plage de données ...
Existerait-il un moyen pour que cette plage de données s'étende d'une ligne en plus à chaque enregistrement ?
Je m'explique : J'aimerai savoir si :
[cpp]ActiveWorkbook.Names.Add Name:="ex", RefersToR1C1:="=Feuil1!R1C1:R7C7"[/cpp]
peut être programmé pour qu'à chaque ajout d'une ligne dans le classeur archive, RefersToR1C1:="=Feuil1!R1C1:R7C7" devienne RefersToR1C1:="=Feuil1!R1C1:R7(+1)C7(+1)" ???
Merci à vous par avance ...
Talzatior.
A très bientôt
Cordialement,
J'explose mon obstacle actuel ... j'ai une feuille dun de mes fichiers, une facture pour être plus précis, dont je souhaite exporter quelques données dans un classeur d'archives ...
J'ai pratiquement réussi, mais je bute sur un obstacle ... Je vous présente dans un premier temps le code usité :
[cpp]Sub ArchiveFact()
Dim conn As Object
Dim requete As Object
Dim fact_num As Long
Dim fact_date As Date
Dim cmd_num As String
Dim cmd_date As Date
Dim nom_clt As String
Dim ech_date As Date
Dim tot_HT As Double
Dim texte_SQL As String
Dim classeur As String
Dim fichier As String
Sheets("Facture").Activate
'collecte les infos de la facture
fact_num = Range("A14")
fact_date = Range("A16")
cmd_num = CStr(Range("C16"))
cmd_date = Range("D16")
nom_clt = CStr(Range("F9"))
ech_date = Range("H16")
tot_HT = Range("F43")
'connexion à la base dans fichier archives.xls
classeur = "Archives_test.xls"
fichier = ThisWorkbook.Path & "\" & classeur
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";" & _
"extended properties=""Excel 8.0;"""
' travail demandé: insère dans les champs de "Archives_fact" les données collectées
texte_SQL = "INSERT INTO Archives_fact (num_fact,date_fact,num_cmd,date_cmd,nom_clt,tot_HT,ech_date) VALUES ('" & (fact_num) & "','" & (fact_date) & "', '" & (cmd_num) & "','" & (cmd_date) & "','" & (nom_clt) & "','" & (ech_date) & "','" & (tot_HT) & "')"
' éxécute le travail demandé
Set requete = CreateObject("ADODB.recordset")
Set requete = conn.Execute(texte_SQL)
Set requete = Nothing
Set conn = Nothing
MsgBox "archivage de la facture n° " & fact_num & " effectué avec succès"
End SubCordialement.
[/cpp]
Il fonctionne bien presque parfaitement
Mon souci est le suivant : pour la première facture exportée, pas de souci, tout roule
Par contre pour la seconde, il me sort une erreur :
"Erreur d'exécution '-2147467259 (80004005)' :
Impossible d'agrandir la plage nommée."
J'ai regardé d'où cela pouvait venir, et en fait, il s'agit de la plage de données définie par "Archives_fact" dans ma ligne de sql ... en effet, si je veux que ce code fonctionne, je n'ai d'autre choix, pour le moment, que d'ouvrir après chaqeu enregistrement le classeur cible et de redéfinir ma plage de données ...
Existerait-il un moyen pour que cette plage de données s'étende d'une ligne en plus à chaque enregistrement ?
Je m'explique : J'aimerai savoir si :
[cpp]ActiveWorkbook.Names.Add Name:="ex", RefersToR1C1:="=Feuil1!R1C1:R7C7"[/cpp]
peut être programmé pour qu'à chaque ajout d'une ligne dans le classeur archive, RefersToR1C1:="=Feuil1!R1C1:R7C7" devienne RefersToR1C1:="=Feuil1!R1C1:R7(+1)C7(+1)" ???
Merci à vous par avance ...
Talzatior.
A très bientôt
Cordialement,