Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/05/2011, 15h39   #1
Futur Membre du Club
 
Inscription : août 2009
Messages : 72
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 72
Points : 19
Points : 19
Bonjour,

J'ai créé une base de gestion clients/fournisseurs depuis 2 ans; ça fonctionne bien mais j'aimerais l'améliorer.

Lorsque je fais un devis à un client la procédure est la suivante:
dans le devis j'ai un sous formulaires qui s'appelle "fournitures" (en mode feuille de données), les champs sont : fournisseur, désignation, réf, prix achat HT, coef, prix vente HT, quantité, total HT.
Ce sous formulaire est crée à partir d'une requête, elle même créée à partir de la table T-DetailDevis.

Quand le devis est accepté je crée via le formulaire "commande" autant de commande que nécessaire suivant le nombre de fournisseur que constitue le devis. Donc je retape dans le formulaire "bon de commande" les désignations, réf, prix achat HT et quantités (feuille de données).

Ce que j'aimerais pouvoir faire depuis mon devis, c'est de pouvoir cocher la(les) ligne(s) qui m'intéresse et pouvoir créer une commande en cliquant sur un bouton ce qui ouvrirait le formulaire "commande" en remplissant automatiquement les champs sélectionnés et je n'aurais plus qu'à ajouter des informations à l'intention du fournisseur.

Pensez-vous que ce soit possible et si oui de quelle manière ?

Avec mes remerciements,
Ortiz

Petite précision:

il faut que je puisse utiliser également le formulaire "commande" de manière classique pour pouvoir faire mes commandes de stock, de fournitures diverses, etc...
ortiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2011, 21h18   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
C'est possible mais ta question ne comporte pas assez d'élément pour une réponse précise.

Voici un apperçu de la méthode à suivre.

D'abord la notion de sélection d'enregistrement n'est pas facile.

Tu peux soit ajouter un champ Oui/Non à ta table source ce hamps servant à la sélection des lignes, soit traitre chaque ligne une à une en ajoutant un bonton 'Copier' sur chaque ligne de détail.

Ensuite il te suffit de prendre les données de ta source et de créer les enregistrements nécessaire dans les différentes tables concernées (probablement Entête Commande et Détail Commande)

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 08h50   #3
Futur Membre du Club
 
Inscription : août 2009
Messages : 72
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 72
Points : 19
Points : 19
Bonjour,
J'avais un peu la même idée en sélectionnant ligne par ligne avec une case a cocher les produits à commander. Etant donné qu'il y a en moyenne 2 fournisseurs par devis pour un maximum de 5 produits, donc ça peut être assez rapide.

Maintenant ce que je ne sais pas faire c'est copier les lignes sélectionnées dans le formulaire de commande.

Il a la même mise en forme que le devis, c'est à dire une table "principale" où l'on trouve le N°, la date, le client ou le fournisseur, les coordonnées...
Et la table "détail" commande ou devis qui est le sous-formulaire en mode feuille de données et qui contient la ref, la désignation, le prix d'achat la quantité. La seule différence est que le devis contient en plus, le coefficient et le prix de vente.

Donc comment puis-je copier ces éléments?

Avec mes remerciements,
Ortiz
ortiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 17h54   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Tu peux utiliser une requête d'ajout qui va prendre les données de ta table de sélection pour les recopier dans ta table des devis ou tu peux faire tout cela par VBA.

Dans tous les cas ce n'est pas une copie par 'copy/paste' mais un transfert d'information d'une table à une autre.

Si tu veux des précisions sur une ou l'autre solution, demande.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h51   #5
Futur Membre du Club
 
Inscription : août 2009
Messages : 72
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 72
Points : 19
Points : 19
Bonjour,

Les 2 possibilités m'intéresse.
Je joints un doc pdf sur lequel figure l'image du devis et de la commande pour mieux comprendre comment sont fait les formulaires.
Je ne sais pas si l'une ou l'autre des solutions est mieux adaptées donc peut-être aurez-vous une meilleure idée de se qu'il convient de faire ?

Cordialement,
Ortiz
ortiz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 18h57   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Les 2 solutions sont indépendantes de l'interface. Elles travaillent directement au niveau des données.

Je vais supposer que tu as 3 tables :

T_Selection : Liste des élément sélectionnés
T_Source : Source de ces éléments
T_Cible : Destinataire de ces éléments

Mais on pourrait aussi ne travailler qu'avec 2 tables : T_Source et T_Cible si T_Source contient l'info sur la sélection.

Voici une idée de solution en VBA à adapter à tes besoins.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private sub CopierDonnees()
   dim dao.database:set db=currentdb
   dim rSelection as dao.recordset:set r=db.OpenRecordset("T_Selection")
   dim rSource as dao.recordset:set r=db.OpenRecordset("T_Source", dbOpendDynaset)
   dim rCible as dao.recordset:set r=db.OpenRecordset("T_Cible")
 
   do while not rSelection.eof
      rSource.findfisrt("TonChampClef=" & rSelection![TonChampClef]
 
      if not rSource.nomatch()
            rCible.AddNew
            rCible![TonChampClef]=rSource![TonChampClef]
            'Mettre ici la liste des champs à copier de Source à Cible
            rCicble.Update
         else
            msgbox "Impossible de trouver : " & rSelection![TonChampClef],VbExclamation
      end if
 
   loop
 
   rCible.close:set rSource=nothing
   rSource.close:set rSource=nothing
   rSelection.close:set rSource=nothing
   set db=nothing
end sub
En SQL il faut créer un requête ajout qui va prendre les champs de T_Source pour les ajouter à T_Cible. Tu fais une jointure entre T_Source et T_Selection et tu filtres sur ceux qui sont sélectionnés. Avec l'éditeur de requête c'est très facile à faire.

Dans ton code VBA tu peux ensuite simplement mettre :

Code :
1
2
3
4
5
6
7
private sub CopierDonnees_SQL()
   dim dao.database:set db=currentdb
   dim q as dao.querydef:set=db.QueryDefs("NomTaRequeteDeCopie")
   q.execute
   set q=nothing
   set db=nothing
end sub
A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 11h22   #7
Candidat au titre de Membre du Club
 
Homme Louic
Étudiant
Inscription : juillet 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Louic
Âge : 20
Localisation : Indonésie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 38
Points : 10
Points : 10
Envoyer un message via MSN à Alialyn Envoyer un message via Skype™ à Alialyn
Bonjour,

Je suis débutant en access et j'ai actuellement le même problème (mais sous access 2010)

J'ai un formulaire répertoriant des documents requis pour des matériels, en cours d'obtention, et un autre formulaire devant répertorier ces mêmes documents requis pour un matériel après réception.

Mon premier formulaire possède les champs suivants:
ProductBeingProcessed.idProduct, ProductBeingProcessed.idDocumentType, ProductBeingProcessed.DueDate, ProductBeingProcessed.PersonnelAttached et ProductBeingProcessed.Validated qui est la checkbox.
J'ai deux autres champs liés mais provenant d'autres tables: Product.idFactory et Factory.idPrincipal qui sont la marque et l'usine correspondant au produit.

Dans le formulaire que je veux remplir, j'ai les champs:
ValidatedProduct.idProduct, ValidatedProduct.idDocumentType, ValidatedProduct.IssueDate qui est la date à laquelle le document est reçu , ValidatedProduct.ValidDate qui est la date jusqu'à laquelle le document est valide.
J'ai aussi les 2 autres champs Product.idFactory et Factory.idPrincipal comme dans le premier formulaire.

J'aimerais donc que quand je coche la case ProductBeingProcessed.Validated, les champs du premier formulaire idProduct, idDocumentType, idPrincipal et idFactory remplissent ceux correpondant dans le second formulaire.
Qu'il n'y ai plus qu'à rentrer les dates de réception du document et celle de validité.

Désolé c'est un peu embrouillé...

J'ai lu ton code mais étant débutant en VBA (très très débutant) je n'ai pas bien compris notamment ou tu indiques les formulaires. Tu dis à un moment qu'il faut faire une requête, je ne vois pas l'utilité puisqu'il s'agit de remplir une table via un formulaire...

Merci par avance pour votre aide (je l'espère! :p)
Alialyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2011, 18h01   #8
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 466
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 466
Points : 7 544
Points : 7 544
Citation:
J'aimerais donc que quand je coche la case ProductBeingProcessed.Validated, les champs du premier formulaire idProduct, idDocumentType, idPrincipal et idFactory remplissent ceux correpondant dans le second formulaire.
Qu'il n'y ai plus qu'à rentrer les dates de réception du document et celle de validité.

Désolé c'est un peu embrouillé...

J'ai lu ton code mais étant débutant en VBA (très très débutant) je n'ai pas bien compris notamment ou tu indiques les formulaires. Tu dis à un moment qu'il faut faire une requête, je ne vois pas l'utilité puisqu'il s'agit de remplir une table via un formulaire...
Note d'abors que mon code comporte 2 solutions, la première est purement VBA, la seconde est presque purement SQL.

Il faut choisir l'une ou l'autre. Pour aucune solution je n'utilise de formulaire, c'est juste un bout de code qui copie des données d'une table dans une autre. Il est donc logique que tu ne les trouves pas :-).

À vrai dire on ne copie jamais des données d'un formuliaire à un autre mais toujours d'une table à une autre. Ces tables sont ensuite vues au travers d'un formulaire.

pour ton cas on pourrait adpater le code comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public sub CopierDonnees()
   dim dao.database:set db=currentdb
   dim rSelection as dao.recordset:set r=db.OpenRecordset("rSelection") 'rSelection vaut quelque chose comme : Select [ProductBeingProcessed].* from [ProductBeingProcessed] where [ProductBeingProcessed].[ProductBeingProcessed.Validated]=true
 
   dim rSource as dao.recordset:set r=db.OpenRecordset("T_Source", dbOpendDynaset) 'T_Source est ta table qui fourni les données
   dim rCible as dao.recordset:set r=db.OpenRecordset("T_Cible") 'T_Cible est ta table qui reçoit les données
 
   do while not rSelection.eof
      rSource.findfisrt("TonChampClef=" & rSelection![TonChampClef])
 
      if not rSource.nomatch()
            rCible.AddNew
            rCible![TonChampClef]=rSource![TonChampClef]
            'Mettre ici la liste des champs à copier de Source à Cible
            rCicble.Update
         else
            msgbox "Impossible de trouver : " & rSelection![TonChampClef],VbExclamation
      end if
 
   loop
 
   rCible.close:set rSource=nothing
   rSource.close:set rSource=nothing
   rSelection.close:set rSource=nothing
   set db=nothing
end sub
pour activer ce code, simplement faire un bouton et mettre dans l'événement OnClick. Chaque fois que tu appuira sur le bouton tous les enregistrement sélectionnés seront copiés de ta source vers ta cible.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 10h03   #9
Candidat au titre de Membre du Club
 
Homme Louic
Étudiant
Inscription : juillet 2011
Messages : 38
Détails du profil
Informations personnelles :
Nom : Homme Louic
Âge : 20
Localisation : Indonésie

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 38
Points : 10
Points : 10
Envoyer un message via MSN à Alialyn Envoyer un message via Skype™ à Alialyn
Bonjour!

En fait j'ai fait autrement, j'ai rajouter les champs IssueDate et ValidDate à ma table ProductBeingProcessed et du coup supprimé la table ValidatedProduct et le formulaire correspondant.

Ma checkbox sert donc juste à déverrouiller les deux champs date quand on clique dessus.

Merci encore de ton aide et désolé de t'avoir dérangé pour finalement ne pas utiliser ce que tu as fait :/
Alialyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h44.


 
 
 
 
Partenaires

Hébergement Web