Attribuer un nom à des champs d'un classeur ...

Talzatior

XLDnaute Occasionnel
Bonjour le forum ;)

Comment ça va sous cette lourde chaleur ? ;)

J'espère que tout roule ... Je viens vers vous en ce jour limite caniculaire pour comprendre la manière dont il faut procéder pour attribuer un nom à des cellules ...

En effet, je viens récupérer des données d'une feuille pour les envoyer dans un classeur fermé, grâce au code suivant :

Code:
Sub ArchiveFact()
Dim conn As Object
Dim requete As Object
Dim fact_num As Long, fact_date As Date, cmd_num As String, cmd_date As Date
Dim nom_clt As String, ech_date As Date, tot_HT As Double, texte_SQL As String

'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° " & f_num & " effectué avec succès"

End Sub

Suite à cela, j'ai deux questions, peut-être stupides, mais n'empêche que je n'y trouve pas solution par moi-même ...

La première consiste à connaître la procédure pour préciser une feuille de calcul cible au sein de mon classeur défini dans le code ci-dessus ...

La seconde concerne plus particulièrement la partie suivante du code :
Code:
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) & "')"

En effet, je n'arrive pas à faire en sorte que mon fichier "Archives_test" reçoive les données dans les diffiérents champs définis, parce que je m'y prends certainement mal pour donner un nom aux différents champs voulus dans le classeur "Archives_test"...

Quelqu'un saurait-il m'aider s'il vous plaît ? ;)

Merci par avance à vous ;)

Ci-joint le fameux classeur "Archives_test", tout simple ...
 

Pièces jointes

  • Archives_test.zip
    10.8 KB · Affichages: 19

PMO2

XLDnaute Accro
Re : Attribuer un nom à des champs d'un classeur ...

Bonjour,

Essayez avec les 2 classeurs (en pièce jointe)

1) "Facture Source" : le classeur de la feuille Facture contenant le code VBA
2) "Archives_test" : le classeur fermé dans lequel les données de Facture vont s'inscrire (j'ai modifié le nom des colonnes)

Voici le code modifié à coper dans un module standard du classeur "Facture Source"
Code:
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 Sub

Cordialement.

PMO
Patrick Morange
 

Talzatior

XLDnaute Occasionnel
Re : Attribuer un nom à des champs d'un classeur ...

Bonjour Patrick !!

Tout d'abord merci pour le fichier, effectivement, cela fonctionne ;) C'est super !!

Mais j'ai d'autres applications où je souhaiterais utiliser ce procédé, et donc je souhaite savoir comment vous vous y êtes pris pour définir les noms du classeur Archives_test.xls ...

Comme cela, je saurais le faire et moduler mes classeurs d'archives à souhait sans plus déranger personne ;)

De plus, j'ai vu l'objet "Archives_fact" il définit une plage qui grandit à chaque fois qu'une ligne se rajoute et ça je vois encore moins comment faire ;)

Merci en tous les cas pour ce que vous avez déjà fait ;)

A bientôt,
Talzatior.
 

Talzatior

XLDnaute Occasionnel
Re : Attribuer un nom à des champs d'un classeur ...

De plus, petit souci, j'ai fait un test avec ton fichier ...

J'ai bien pu rajouter une facture dans le tableau d'archives, mais lorsque j'ai voulu en rajouter une seconde, j'ai le message d'erreur suivant :

Erreur d'exécution '-2147467259 (80004005)' :
Impossible d'agrandir la plage nommée.

Et il me met en surbrillance la ligne suivante lorsque je choisis "Débogage" :
Code:
Set requete = conn.Execute(texte_SQL)

Et je sais encore moins quoi faire vu que je ne sais pas trop comment on s'y prend pour faire les manipulations faites par vos soins ...
 

PMO2

XLDnaute Accro
Re : Attribuer un nom à des champs d'un classeur ...

Bonjour,

Marche à suivre en ce qui concerne
Code:
Erreur d'exécution '-2147467259 (80004005)' :
Impossible d'agrandir la plage nommée.

1) ouvrez le classeur d'archives "Archives_test"
2) faites menu Insertion/Nom Définir
3) vous devez trouver dans la liste le Nom "Archives_fact"
4) vérifiez si il fait bien référence à la plage des données (toutes les colonnes et les lignes de la base de données)
5) si ce n'est pas le cas (ce que je subodore) faites la correction pour qu'il puisse y faire référence
6) sauvegardez le classeur et fermez-le
7) faites un nouveau test pour voir le bon fonctionnement

Cordialement.

PMO
Patrick Morange
 

Talzatior

XLDnaute Occasionnel
Re : Attribuer un nom à des champs d'un classeur ...

Je vais essayer cela de suite ...

Merci ;)

Par contre, j'ai à faire la même démarche pour mes commandes et pour mes bons de livraisons ... J'aimerai donc savoir, si possible, la procédure à suivre pour reproduire ce que vous êtes parvenu à faire pour ce classeur de factures ...

Vous remerciant par avance,
Cordialement,
Talzatior.
 

Talzatior

XLDnaute Occasionnel
Re : Attribuer un nom à des champs d'un classeur ...

Effectivement, cela fonctionne, mais à chaque fois que je rajoute une ligne dans le tableau archives, je dois l'ouvrir pour redéfinir Archives_fact en rajoutant la lignes dernièrement saisies dedans ...
Et si je sélectionne une plage supérieure au lignes déjà complétées, il me saisit la ligne en dessous de la plage sélectionnée. Par exemple si j'agrandis la plage sur 100 lignes, il me saisira les données en ligne 101...

Existe-t-il un moyen d'automatiser la manipulation qui fonctionne ?

Merci encore pour vos conseils et informations ;)
 
Dernière édition:

Talzatior

XLDnaute Occasionnel
Re : Attribuer un nom à des champs d'un classeur ...

Code:
    ActiveWorkbook.Names.Add Name:="ex", RefersToR1C1:="=Feuil1!R1C1:R7C7"

En fait mon souci est de réussir, après chaque enregistrement, à rajouter 1 à la valeur "R7C7" ...

Est-ce possible ?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 823
dernier inscrit
ben talha redouane