[VBA] Envoyer données dans un autre classeur
Résolu
talzatior81
Messages postés
47
Statut
Membre
-
talzatior81 Messages postés 47 Statut Membre -
talzatior81 Messages postés 47 Statut Membre -
Bonjour les pros ;)
Je me dirige vers vous dans un premier temps pour savoir déjà, si ce que je souhaite effectuer est possible, et ensuite, si oui, comment il faut s'y prendre ;)
Donc j'explique un peu la situation : j'ai actuellement un classeur de suivi d'affaire. Dans ce classeur, j'ai une feuille nommée "Facture" par exemple. Lorsque l'affaire est livrée et terminée, je clique, sur cette feuille, sur un bouton qui me génère un numéro de facture de manière automatique ainsi que la date. (Numéro de facture obtenu grâce à une BDD Access).
Ma question est : lorsque je génère ce numéro de facture, est-il possible d'envoyer dans un classeur Excel fermé existant, des données de cette dite facture ? Comme par exemple la date de celle-ci, le numéro de commande client, le numéro de l'affaire ?
Pour moi qui bosse sur ce projet depuis pas mal de temps maintenant, ça me paraît clair énoncé de la sorte, mais si jamais vous avez besoin de plus d'infos, n'hésitez pas !
Je suis un peu perdu avec ce souci, je souhaite en effet faire un classeur qui recapitule toutes les factures éditées, avec des infos, et aussi les échéances pour avoir un suivi.
Merci par avance à ceux qui prendront le temps d'essayer de m'éclairer ;)
A bientôt !
Cordialement,
Talzatior.
Je me dirige vers vous dans un premier temps pour savoir déjà, si ce que je souhaite effectuer est possible, et ensuite, si oui, comment il faut s'y prendre ;)
Donc j'explique un peu la situation : j'ai actuellement un classeur de suivi d'affaire. Dans ce classeur, j'ai une feuille nommée "Facture" par exemple. Lorsque l'affaire est livrée et terminée, je clique, sur cette feuille, sur un bouton qui me génère un numéro de facture de manière automatique ainsi que la date. (Numéro de facture obtenu grâce à une BDD Access).
Ma question est : lorsque je génère ce numéro de facture, est-il possible d'envoyer dans un classeur Excel fermé existant, des données de cette dite facture ? Comme par exemple la date de celle-ci, le numéro de commande client, le numéro de l'affaire ?
Pour moi qui bosse sur ce projet depuis pas mal de temps maintenant, ça me paraît clair énoncé de la sorte, mais si jamais vous avez besoin de plus d'infos, n'hésitez pas !
Je suis un peu perdu avec ce souci, je souhaite en effet faire un classeur qui recapitule toutes les factures éditées, avec des infos, et aussi les échéances pour avoir un suivi.
Merci par avance à ceux qui prendront le temps d'essayer de m'éclairer ;)
A bientôt !
Cordialement,
Talzatior.
A voir également:
- [VBA] Envoyer données dans un autre classeur
- Fuite données maif - Guide
- Trier des données excel - Guide
- Envoyer un sms en différé - Guide
- Gmail envoyer un mail - Guide
- Supprimer les données de navigation - Guide
18 réponses
Bonjour,
1/nom_plage="ecrit"
j'avais écris ça il y a 5 ans mais depuis ca a évolué!
écrit correspond à une plage nommée dans fermé_ado ce qui m'obligeait a créer une base de données (B1:B2)
mais il y a un autre moyen que je t'envoie ci dessous en indiquant lors de la connexion qu'il n'y a pas d'étiquettes dans le fichier fermé: HDR=NO (HDR=Header=etiquette)
il faut alors précisé l'onglet suivi d'un dollar et de la référence de cellule sous la forme "B2:B2"
ci joint modif suivant cette syntaxe
https://www.cjoint.com/?gykqmItMhD
2/ Pour la facturation Access est + adapté car tu conserves une mémoire de tes factures et avec l'intégrité référentielle, par exemple: tu ne peux pas enlever un client qui a passé une commande; tu peux également imprimer tes factures avec les états d'access etc.
Tu peux bien sûr extraire des données vers Excel pour des calculs et graphiques où XL est mieux adapté. Avec Word tu as la possibilité de cibler des courriers sur plusieurs conditions (par ex: région, sexe, csp...) bref , quand le traitement de textes est + adapté que les états access...
ci joint: un exemple de la table de relation d'une facturation (tioujours démo d'école)
https://www.cjoint.com/?gykLYfj5f0
1/nom_plage="ecrit"
j'avais écris ça il y a 5 ans mais depuis ca a évolué!
écrit correspond à une plage nommée dans fermé_ado ce qui m'obligeait a créer une base de données (B1:B2)
mais il y a un autre moyen que je t'envoie ci dessous en indiquant lors de la connexion qu'il n'y a pas d'étiquettes dans le fichier fermé: HDR=NO (HDR=Header=etiquette)
il faut alors précisé l'onglet suivi d'un dollar et de la référence de cellule sous la forme "B2:B2"
ci joint modif suivant cette syntaxe
https://www.cjoint.com/?gykqmItMhD
2/ Pour la facturation Access est + adapté car tu conserves une mémoire de tes factures et avec l'intégrité référentielle, par exemple: tu ne peux pas enlever un client qui a passé une commande; tu peux également imprimer tes factures avec les états d'access etc.
Tu peux bien sûr extraire des données vers Excel pour des calculs et graphiques où XL est mieux adapté. Avec Word tu as la possibilité de cibler des courriers sur plusieurs conditions (par ex: région, sexe, csp...) bref , quand le traitement de textes est + adapté que les états access...
ci joint: un exemple de la table de relation d'une facturation (tioujours démo d'école)
https://www.cjoint.com/?gykLYfj5f0
Bonjour,
j'ai envie de te répondre que si tu utilises access, enregistre ces données dans access...
Autrement, c'est possible avec un classeur Excel restant fermé...
ci joint tite démo d'école montrant les import-export entre excelfermé, access
le fichier où sont situés les macros est "home.xls"
https://www.cjoint.com/?gxl4m5mMWm
j'ai envie de te répondre que si tu utilises access, enregistre ces données dans access...
Autrement, c'est possible avec un classeur Excel restant fermé...
ci joint tite démo d'école montrant les import-export entre excelfermé, access
le fichier où sont situés les macros est "home.xls"
https://www.cjoint.com/?gxl4m5mMWm
Rebonjour ...
Super ton fichier, mais la subtilité suivante m'échappe ...
Que signifie exactement, dans la macro "écrire_fermé" :
Je ne capte pas trop le truc là ...
Super ton fichier, mais la subtilité suivante m'échappe ...
Que signifie exactement, dans la macro "écrire_fermé" :
nom_plage = "ecrit"
Je ne capte pas trop le truc là ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Encore une petite question bonus ;)
Si je fais comme tu me dis, alors que j'utilise une table access pour numéroter mes factures, est-il possible de récupérer au sein même de cette tables les infos que je souhaite ??
Après, si c'est le cas, dans mon classeur excel où je souhaite récupérer ces infos, il suffit que je fasse une mise en relation et c'est bon ...
En fait, je suis un peu perdu dans les mises en relations entre différents classeurs ou alors classeurs BDD ...
Si je fais comme tu me dis, alors que j'utilise une table access pour numéroter mes factures, est-il possible de récupérer au sein même de cette tables les infos que je souhaite ??
Après, si c'est le cas, dans mon classeur excel où je souhaite récupérer ces infos, il suffit que je fasse une mise en relation et c'est bon ...
En fait, je suis un peu perdu dans les mises en relations entre différents classeurs ou alors classeurs BDD ...
Ok effectivement, si j'avais su cela et que les utilisateurs connaissaient Access, j'aurais sans doute fait comme tu me le proposes, ça a l'air beaucoup plus ... sensé ...
Par contre, je te communique mon fichier : https://www.cjoint.com/?gyk7PdumUf
Mon souci est que j'utilise Access, effectivement, mais uniquement en tant que numéroteur pour mes factures, mes BL et mes commandes sous Excel ...
Prenons l'exemple de la facture ... Lorsque je clique sur le bouton pour la générer, je "pompe" le numéro actuel de la BDD +1, et donc j'incrémente ce numéro ensuite dans cette BDD ...
Est-il possible, dans l'état actuel des choses (car honnêtement, je ne suis pas motivé pour tout recommencer ... ;) ), de récupérer des informations telles que N° facture, date facture, N° commande, Date commande, Nom client, montant HT, échéance (c'est ce qui me vient de suite à l'esprit ...) et de les "envoyer" lorsque je clique sur le bouton "transfert la facture dans la BDD", dans un classeur Excel ou alors dans ma BDD Access ??
J'espère que je suis clair lorsque je m'exprime ... parce que moi-même, cherchant depuis deux jours des solutions, et trouvant des infos mais que je ne comprends malheureusement pas, je perds mes cheveux !! ;)
En tous les cas, merci à toi pour ces informations ;)
A bientôt ;)
Par contre, je te communique mon fichier : https://www.cjoint.com/?gyk7PdumUf
Mon souci est que j'utilise Access, effectivement, mais uniquement en tant que numéroteur pour mes factures, mes BL et mes commandes sous Excel ...
Prenons l'exemple de la facture ... Lorsque je clique sur le bouton pour la générer, je "pompe" le numéro actuel de la BDD +1, et donc j'incrémente ce numéro ensuite dans cette BDD ...
Est-il possible, dans l'état actuel des choses (car honnêtement, je ne suis pas motivé pour tout recommencer ... ;) ), de récupérer des informations telles que N° facture, date facture, N° commande, Date commande, Nom client, montant HT, échéance (c'est ce qui me vient de suite à l'esprit ...) et de les "envoyer" lorsque je clique sur le bouton "transfert la facture dans la BDD", dans un classeur Excel ou alors dans ma BDD Access ??
J'espère que je suis clair lorsque je m'exprime ... parce que moi-même, cherchant depuis deux jours des solutions, et trouvant des infos mais que je ne comprends malheureusement pas, je perds mes cheveux !! ;)
En tous les cas, merci à toi pour ces informations ;)
A bientôt ;)
J'essaie d'exploiter ta macro pour l'adapter à mon utilisation ...
Pour voir si cela fonctionne ...
Peux-tu m'éclairer sur :
' travail demandé: insère dans le champ "report" de "db_ecrire" (cellules nommées) la valeur de "G2,"
Comment fais-tu pour que les cellules soient nommées champ1 ou champ2 ?
Pour voir si cela fonctionne ...
Peux-tu m'éclairer sur :
' travail demandé: insère dans le champ "report" de "db_ecrire" (cellules nommées) la valeur de "G2,"
Comment fais-tu pour que les cellules soient nommées champ1 ou champ2 ?
re,
il n'y a pas de pb pour transfèrer tes champs soit dans une nouvelle table de ta base access, soit dans un classeur XL
si table access, le n° de facture sera la clé de cette table
pour ton dernier message, utilise plutôt la procédure "écrire_db_fermé" qui correspond à ton cas et regarde dans fermé_ado les colonnes G & H de l'onglet écrire
fin après-midi , j'espère, je t'enverrrai une démo avec le cas access et le cas excel: tu verras que la différence est juste sur la connexion (ou presque)
il n'y a pas de pb pour transfèrer tes champs soit dans une nouvelle table de ta base access, soit dans un classeur XL
si table access, le n° de facture sera la clé de cette table
pour ton dernier message, utilise plutôt la procédure "écrire_db_fermé" qui correspond à ton cas et regarde dans fermé_ado les colonnes G & H de l'onglet écrire
fin après-midi , j'espère, je t'enverrrai une démo avec le cas access et le cas excel: tu verras que la différence est juste sur la connexion (ou presque)
Merci beaucoup pour tout ce que tu fais, j'ai hâte de voir cela ;)
Et de réussir à comprendre comment cela fonctionne ... Parce que ça, c'est pas gagné !!
Et de réussir à comprendre comment cela fonctionne ... Parce que ça, c'est pas gagné !!
ci joint maquette archivage avec XL
https://www.cjoint.com/?gyo2BehrLy
nota: dans cette maquette la procédure employée (createobject)ne nécessite pas de cocher la référence ADO
archivage access + tard
macro à adapter:
https://www.cjoint.com/?gyo2BehrLy
nota: dans cette maquette la procédure employée (createobject)ne nécessite pas de cocher la référence ADO
archivage access + tard
macro à adapter:
Sub archiver_xl()
Dim conn As Object
Dim requete As Object
Dim f_num As Long, f_date As Date, c_num As String
Dim e_date As Date, totalHT As Double, texte_SQL As String
'collecte les infos de la facture
f_num = Range("A14")
f_date = Range("A16")
c_num = CStr(Range("C16"))
e_date = Range("H16")
totalHT = Range("F43")
'connexion à la base dans fichier archives.xls
classeur = "archives.xls" 'a adapter
fichier = ThisWorkbook.Path & "\" & classeur 'a adapter
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 "T_archive les données collectées
texte_SQL = "INSERT INTO T_archive (num_fact,dat_fact,num_comm,echeance,montant_HT) VALUES ('" & (f_num) & "','" & (f_date) & "', '" & (c_num) & "','" & (e_date) & "', '" & (totalHT) & "')"
' é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
Honnêtement, si j'ai bien saisi le code, ne te casse pas la tête à le faire pour Access, je m'en sortirais avec un fichier archive sous Excel ;)
Je regarde cela et te tiens au courant demain ;)
Merci mille fois ;)
Juste petite question ... Cette macro, insère-t-elle les numéros de facture à la suite les uns des autres ? Je veux dire par là, si je génère ma facture 1, quand je génère ma facture 2 elle sera sur une autre ligne ?
Ma question peut paraître idiote, mais en fait, je ne vois pas la partie de programmation qui envoie à la ligne suivante ou à la première ligne libre ...
Merci pour tout ;)
Je regarde cela et te tiens au courant demain ;)
Merci mille fois ;)
Juste petite question ... Cette macro, insère-t-elle les numéros de facture à la suite les uns des autres ? Je veux dire par là, si je génère ma facture 1, quand je génère ma facture 2 elle sera sur une autre ligne ?
Ma question peut paraître idiote, mais en fait, je ne vois pas la partie de programmation qui envoie à la ligne suivante ou à la première ligne libre ...
Merci pour tout ;)
re,
et voilà la version avec le choix entre access et excel
https://www.cjoint.com/?gyrmenVMIk
dans acees, tu crées une nouvelle table ("T_archive" dans la maquette) avec les champs que tu désires archiver, le num de facture étant la clé.
l'avantage d'access est que l'on interdit facilement un double enregistrement;
a toi de voir pour d'éventuelles protections (fichiers ouvert, champs non remplis...)
que ce soit Excel ou Access j'ai tout converti en texte pour éviter des crise de nerfs traditionnelles avec la syntaxe SQL et comme c'était pour archiver mais tu peux changer...
pour ma part, la solution access a ma préférence, mais c'est TON appli :-)
Ci dessous,la macro excel vers access (tu vois qu'il n'y a pas trop de différences à part la gestion de l'erreur "doublon"
et voilà la version avec le choix entre access et excel
https://www.cjoint.com/?gyrmenVMIk
dans acees, tu crées une nouvelle table ("T_archive" dans la maquette) avec les champs que tu désires archiver, le num de facture étant la clé.
l'avantage d'access est que l'on interdit facilement un double enregistrement;
a toi de voir pour d'éventuelles protections (fichiers ouvert, champs non remplis...)
que ce soit Excel ou Access j'ai tout converti en texte pour éviter des crise de nerfs traditionnelles avec la syntaxe SQL et comme c'était pour archiver mais tu peux changer...
pour ma part, la solution access a ma préférence, mais c'est TON appli :-)
Ci dessous,la macro excel vers access (tu vois qu'il n'y a pas trop de différences à part la gestion de l'erreur "doublon"
Sub archiver_Access()
Dim conn As Object
Dim requete As Object
Dim f_num As Long, f_date As Date, c_num As String, e_date As Date, totalHT As Double
Dim base_ac As String, fichier As String, texte_SQL As String
'collecte les infos de la facture
f_num = Range("A14")
f_date = Range("A16")
c_num = CStr(Range("C16"))
e_date = Range("H16")
totalHT = Range("F43")
'connexion à la base dans fichier archives.xls
base_ac = "Suivi_affaire.mdb" 'a adapter
fichier = ThisWorkbook.Path & "\" & base_ac 'a adapter
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";"
' travail demandé: insère dans les champs de "T_archive les données collectées
texte_SQL = "INSERT INTO T_archive (num_fact,dat_fact,num_comm,echeance,montant_HT) VALUES ('" & (f_num) & "','" & (f_date) & "', '" & (c_num) & "','" & (e_date) & "', '" & (totalHT) & "')"
' éxécute le travail demandé
Set requete = CreateObject("ADODB.recordset")
On Error GoTo alerte 'cas où la facture (numéro) a déjà été enregistrée
Set requete = conn.Execute(texte_SQL)
'déroulement normal
MsgBox "archivage de la facture n° " & f_num & " effectué avec succès"
Set requete = Nothing
Set conn = Nothing
Exit Sub
' facture déjà enregistrée
alerte:
MsgBox "la facture n° " & f_num & " a déjà été enregistrée!", vbCritical
Set requete = Nothing
Set conn = Nothing
End Sub
et bing, une bosse!
pour répondre à ta question sur "en dessous": c'est oui
"pour piger"
quand il y a un enregistrement d'effectué:
tu va dans archives.xls
insertion nom et tu sélectionnes ech: tu as une magnifique formule "decaler"
pour répondre à ta question sur "en dessous": c'est oui
"pour piger"
quand il y a un enregistrement d'effectué:
tu va dans archives.xls
insertion nom et tu sélectionnes ech: tu as une magnifique formule "decaler"
Bonjour Michel_m
Pas tout compris à ton message "pour piger" lol ;)
Mais en tous les cas, les infos que tu m'as donnée là sont réellement précieuses pour moi et je t'en remercie vraiment ;)
Je vois pour avancer avec cela, je reviens vers ce topic si jamais ;)
Merci Michel ;)
Pas tout compris à ton message "pour piger" lol ;)
Mais en tous les cas, les infos que tu m'as donnée là sont réellement précieuses pour moi et je t'en remercie vraiment ;)
Je vois pour avancer avec cela, je reviens vers ce topic si jamais ;)
Merci Michel ;)
Ah oui, une question ...
J'ai besoin de stocker le fichier "archives.xls" dans le répertoire avant celui où se trouvent mes fiche affaire ;)
quelle est la commande pour aller au répertoire précédent, si elle existe ? Sinon, dois-je préciser le chemin complet du fichier ? ;)
Merci à vous ;)
J'ai besoin de stocker le fichier "archives.xls" dans le répertoire avant celui où se trouvent mes fiche affaire ;)
quelle est la commande pour aller au répertoire précédent, si elle existe ? Sinon, dois-je préciser le chemin complet du fichier ? ;)
Merci à vous ;)
texte_SQL = "INSERT INTO T_archive (num_fact,dat_fact,num_comm,echeance,montant_HT) VALUES ('" & (f_num) & "','" & (f_date) & "', '" & (c_num) & "','" & (e_date) & "', '" & (totalHT) & "')"
Dans le classeur que j'ai créé, il me fait une erreur me disant qu'il ne parvient pas à trouver "num_fact".
J'ai pourtant fait Insertion/Nom/Définir, pour nommer la colonne A "num_fact" ... mais je ne sais que faire d'autre ...
Merci pour votre aide ... HELP ;)