Aide Sur Access
olivier
-
solje -
solje -
Bonjour @ Tous,
Je souhaiterai envoyé par mail, à tous les clients de la société, les reliquats de commande suppérieur à 2 mois afin de savoir s'ils veulents toujours recevoir leurs Reliquats.
Reliquat de commande = Articles non livré pour cause de stock indisponible.
Je ne sais pas comment procédé.
Ex :
Je peux créer une requête permettant de trouver tous les reliquats supérieurs a 2 mois en indiquant à l'intérieur pour chaque commande le numéro de client le numéro de commande ainsi que l'email.
Je ne sais pas comment procéder pour créer un code ou une macro permettant à chaque changement de numéro de commande d'envoyer un état (ou les lignes de la commande figureraient) au client correpondant à la commande.
Merci par avance pour toutes pistes ou info que vous pouvez me donner.
Cordialement
Olivier
Je souhaiterai envoyé par mail, à tous les clients de la société, les reliquats de commande suppérieur à 2 mois afin de savoir s'ils veulents toujours recevoir leurs Reliquats.
Reliquat de commande = Articles non livré pour cause de stock indisponible.
Je ne sais pas comment procédé.
Ex :
Je peux créer une requête permettant de trouver tous les reliquats supérieurs a 2 mois en indiquant à l'intérieur pour chaque commande le numéro de client le numéro de commande ainsi que l'email.
Je ne sais pas comment procéder pour créer un code ou une macro permettant à chaque changement de numéro de commande d'envoyer un état (ou les lignes de la commande figureraient) au client correpondant à la commande.
Merci par avance pour toutes pistes ou info que vous pouvez me donner.
Cordialement
Olivier
19 réponses
Salut !
La méthode sendobject (ou EnvoyerObjet) doit faire cela...
Regardes dans l'aide d'access...
@+
La méthode sendobject (ou EnvoyerObjet) doit faire cela...
Regardes dans l'aide d'access...
@+
J'utilise cette fonction lorsque je souhaite envoyer une commande mais je en sais pas comment faire pour genérer une boucle et que le programme envoit automatiquement toute les commandes et chaqu'une au bon destinataire...
Si vous avez une piste, merci de m'informer.
Salutation
Olivier
Si vous avez une piste, merci de m'informer.
Salutation
Olivier
Là pas bien le temps de regarder, mais je pense qu'avec un For Each (pour chaque numéro de client), ça doit pouvoir faire l'affaire.
@+
@+
Ok je faire le test :
For Each (Num de Commande)
De facon à supprimer par la suite les commandes que les clients ne veulent pas.
Merci pour ton aide. Je te tiendrais a courant si je n'y arrive.
Olivier
For Each (Num de Commande)
De facon à supprimer par la suite les commandes que les clients ne veulent pas.
Merci pour ton aide. Je te tiendrais a courant si je n'y arrive.
Olivier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La fonction For Each apparait en effet mais je ne sais pas comment lui dire de prendre tel ou tel champs dans la requete ...
Je en sais pas selectionner des champs à partir du VB
Olivier
Je en sais pas selectionner des champs à partir du VB
Olivier
Je ne connais pas du tout cette fonction non plus, c'est pas gagné. Il y a surement un autre moyen, en particulier l'utilisation de tables temporaires, ce qui m'a permis de me dépatouiller de pas mal de problèmes ces temps d'ailleurs...
Je m'explique : crées une table qui contient les champs que tu veux voir apparaitre dans ton état.
Tu crées un formulaire basé sur la reqûte 'commandes_non_honorées' qui contient uniquement les commandes non honnorées en totalité.
Pour chaque commande, tu ajoutes les champs à la table temporaire.
Ton état est basé sur cette table, tu l'ouvres et l'envoies. Tu referme, et efface ta table.
Tu recommence avec l'enregistrement suivant...
Voici un bout de code :
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("commandes_non_honorées")
For i = 0 To Forms!ton formulaire commandes non honorées.Count - 1
With rst
Ta procédure : ajout de l'enregistrement à la table temporaire, ouverture de l'état (qui lui gère l'envoi), effacement de la table
rst.MoveNext
End With
Next i
Ca doit te donner un bon début, mais sans ta base sous les yeux, c pas évident.
Tiens nous au courant...
Je m'explique : crées une table qui contient les champs que tu veux voir apparaitre dans ton état.
Tu crées un formulaire basé sur la reqûte 'commandes_non_honorées' qui contient uniquement les commandes non honnorées en totalité.
Pour chaque commande, tu ajoutes les champs à la table temporaire.
Ton état est basé sur cette table, tu l'ouvres et l'envoies. Tu referme, et efface ta table.
Tu recommence avec l'enregistrement suivant...
Voici un bout de code :
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("commandes_non_honorées")
For i = 0 To Forms!ton formulaire commandes non honorées.Count - 1
With rst
Ta procédure : ajout de l'enregistrement à la table temporaire, ouverture de l'état (qui lui gère l'envoi), effacement de la table
rst.MoveNext
End With
Next i
Ca doit te donner un bon début, mais sans ta base sous les yeux, c pas évident.
Tiens nous au courant...
Pas de mal, par contre, demain soir je suis en vacances, alors si t'as besoin d'aide, essaies pas trop tard...
@+
@+
Salut HDU,
J'ai compris le principe.
Je t'explique ce dont j'ai fait :
J'ai une table ou sont stockés le nom des clients et le numéro de commande (trié par ordre croissant)+un champ "Envoyé ?"
Mon formulaire pointe sur une requête qui sélectionne la première commande et indique le nom l'email le numéro de commande et la référence commande.
Une table temporaire est créer en fonction de cette première commande et contient toutes les infos nécessaires.
Mon état pointe sur cette table.
J'ai boutton commande qui permet d'envoyer par mail à partir du formulaire l'état et vient indiquer dans "à envoyer" = oui de facon à créer la nouvelle table temporaire qui ne tient pas compte des enregistrements pour lesquels est renseigné oui.
Comme ca ca marche la seul chose est que je ne sais pas comment intégrer au boutton commande une boucle de facon à envoyé toutes les commandes une par une sans que je n'ai besoin de le faire manuellement.
et j'avou la fonction DO LOOP je ne la connais pas trop et je n'ai pas bien compris dans l'aide Access.
Si tu peux m'aiguiller.
En tout cas merci beaucoup pour ton aide :)
Olivier
J'ai compris le principe.
Je t'explique ce dont j'ai fait :
J'ai une table ou sont stockés le nom des clients et le numéro de commande (trié par ordre croissant)+un champ "Envoyé ?"
Mon formulaire pointe sur une requête qui sélectionne la première commande et indique le nom l'email le numéro de commande et la référence commande.
Une table temporaire est créer en fonction de cette première commande et contient toutes les infos nécessaires.
Mon état pointe sur cette table.
J'ai boutton commande qui permet d'envoyer par mail à partir du formulaire l'état et vient indiquer dans "à envoyer" = oui de facon à créer la nouvelle table temporaire qui ne tient pas compte des enregistrements pour lesquels est renseigné oui.
Comme ca ca marche la seul chose est que je ne sais pas comment intégrer au boutton commande une boucle de facon à envoyé toutes les commandes une par une sans que je n'ai besoin de le faire manuellement.
et j'avou la fonction DO LOOP je ne la connais pas trop et je n'ai pas bien compris dans l'aide Access.
Si tu peux m'aiguiller.
En tout cas merci beaucoup pour ton aide :)
Olivier
Salut !
tu me dis que ton formulaire affiche les enr. d'une requête qui sélectionne la 1ere commande. En fait, comme je te l'ai dit plus haut, la source de ton formulaire doit être une requête qui liste les commande non honnorées.
A l'ouverture, ton formulaire affichera forcément le 1er enr. de cette requête. Tu crées un bouton (ou ce que tu veux) qui te lancera le code suivant :
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("commandes_non_honorées")
For i = 0 To Forms!ton formulaire commandes non honorées.Count - 1
With rst
Ta procédure : ajout de l'enregistrement à la table temporaire, ouverture de l'état (qui lui gère l'envoi), effacement de la table
rst.MoveNext
End With
Next i
Et voili, ça doit fonctionner.
@+
tu me dis que ton formulaire affiche les enr. d'une requête qui sélectionne la 1ere commande. En fait, comme je te l'ai dit plus haut, la source de ton formulaire doit être une requête qui liste les commande non honnorées.
A l'ouverture, ton formulaire affichera forcément le 1er enr. de cette requête. Tu crées un bouton (ou ce que tu veux) qui te lancera le code suivant :
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("commandes_non_honorées")
For i = 0 To Forms!ton formulaire commandes non honorées.Count - 1
With rst
Ta procédure : ajout de l'enregistrement à la table temporaire, ouverture de l'état (qui lui gère l'envoi), effacement de la table
rst.MoveNext
End With
Next i
Et voili, ça doit fonctionner.
@+
Le problême en passant comme ca est que je ne sais pas comment créer la table correspondant à l'enregistrement sélectionné sur le formulaire.
En fait il faudrait que le code soit exécuter tant que dans la table, ou il y a les numéros de commande, est présent des enregistrements pour lesquels le champ "à envoyer" est vide
Olivier
En fait il faudrait que le code soit exécuter tant que dans la table, ou il y a les numéros de commande, est présent des enregistrements pour lesquels le champ "à envoyer" est vide
Olivier
Le code est exécuter pour le formulaire en cours, ce dernier affichant uniquement les enr. pour lesquels "à envoyer" est vide (c'est le boulot de la requête qui est la source de ton formulaire).
Ta table temporaire doit contenir les mêmes champs que ton formulaire. On l'appelle ici 'table_temp'.
Voici le code que tu mets dans ton formulaire 'commandes_non_envoyees' (basé sur la requête portant le même non).
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("table_temp")
For i = 0 To Forms!commandes_non_envoyees.Count - 1
With rst
.addnew
![ton_champ1]=me![ton_champ1]
![ton_champ2]=me![ton_champ2]
....
....
....
.update
docmd.openreport "ton_etat_a_envoyer",.......
.delete
End With
DoCmd.GoToRecord , , acNext
Next i
Là ça doit être good !
@+
Ta table temporaire doit contenir les mêmes champs que ton formulaire. On l'appelle ici 'table_temp'.
Voici le code que tu mets dans ton formulaire 'commandes_non_envoyees' (basé sur la requête portant le même non).
Dim dbs As Database, rst As Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("table_temp")
For i = 0 To Forms!commandes_non_envoyees.Count - 1
With rst
.addnew
![ton_champ1]=me![ton_champ1]
![ton_champ2]=me![ton_champ2]
....
....
....
.update
docmd.openreport "ton_etat_a_envoyer",.......
.delete
End With
DoCmd.GoToRecord , , acNext
Next i
Là ça doit être good !
@+
Je n'ai pas essayer ta méthode.
J'essayerai, mais pas aujourd'hui.
Je n'ai plus le temps.
Merci et bon Week end =)
Olivier
J'essayerai, mais pas aujourd'hui.
Je n'ai plus le temps.
Merci et bon Week end =)
Olivier
OK, bon week à toi aussi.
Mais, j'essaierai de "passer" la semaine prochaine, mais je suis en vacances, alors si tu as encore des questions / pb pas résolus le week-end prochain, fais remonter ce post que je le vois le 03/05 en rentrant. Quoique, j'aurais reçu par mails les <> messages de ce post, alors je serai au courant.
Bon courage et @+
Mais, j'essaierai de "passer" la semaine prochaine, mais je suis en vacances, alors si tu as encore des questions / pb pas résolus le week-end prochain, fais remonter ce post que je le vois le 03/05 en rentrant. Quoique, j'aurais reçu par mails les <> messages de ce post, alors je serai au courant.
Bon courage et @+
bonjour.
je compte mettre au point une base de données sous access2000 (et éventuellement utiliser vb) pour les besoins de gestion interne(actuellement on papote avec des fichiers excel) . on a un petit réseau de cinq postes(win98) . forcément la bdd sera multi-utilisateurs .
quelqu'un peut-il m'orienter(conseils, doc, site... pour bien penser les choses).
remerciements anticipés.
je compte mettre au point une base de données sous access2000 (et éventuellement utiliser vb) pour les besoins de gestion interne(actuellement on papote avec des fichiers excel) . on a un petit réseau de cinq postes(win98) . forcément la bdd sera multi-utilisateurs .
quelqu'un peut-il m'orienter(conseils, doc, site... pour bien penser les choses).
remerciements anticipés.
Salut !
Il aurait mieux fallu créer un nouveau message pour ta question, mais bon, voici une piste :
http://access.developpez.com/
et + particulièrement
http://access.developpez.com/faq/
Au fait, tous les postes qui utiliseront la BdD devront avoir Access (la même version tant qu'à faire). Si ce n'est pas le cas, au lieu d'investir dans des licences access, regardes si ça ne vaut pas plus le coup d'investir dans un Office Developper...
@+
Il aurait mieux fallu créer un nouveau message pour ta question, mais bon, voici une piste :
http://access.developpez.com/
et + particulièrement
http://access.developpez.com/faq/
Au fait, tous les postes qui utiliseront la BdD devront avoir Access (la même version tant qu'à faire). Si ce n'est pas le cas, au lieu d'investir dans des licences access, regardes si ça ne vaut pas plus le coup d'investir dans un Office Developper...
@+