Petit pb sur enregistrement

Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005 - 8 juil. 2005 à 17:10
hyrockbass Messages postés 25 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 6 janvier 2006 - 6 sept. 2005 à 10:51
Bonjour à tous et à toutes...

Je suis actuellement en train de faire une base de données access/vba

Voila ce que je cherche à faire...
J'ai fait un formulaire de Devis
Pour chaque lignes enregitrées dans mon devis il faut que ca génère une demande de devis au fournisseur
Pour cela j'ai un sous formulaire avec les lignes de demande de devis.

Pour l'instant j'arrive à rentrer dans la zone de liste le nom du fournisseur (1er pb comment supprimer les doublons??? car ca me rajoute à chaque fois le nom du fournisseur meme s'il est deja dans la liste!!!)

Ca bloque sur le premier enregistrement (cad qu'on peut rentrer qu'une seule ligne par demande)
Je pense que ca ne passe pas à l'enregistrement suivant à chaque fois que je rentre un nouveau produit.

Voila un bout de mon code....

Voila le code quand on modifie la référence dans le devis.

Private Sub Référence_AfterUpdate()


Dim verif As Boolean
verif = True


Form_SFDemandeDevis.Fournisseur.SetFocus


If [Form_SFDemandeDevis].Fournisseur.Text <> "" Then
For i = 0 To [Form_SFDemandeDevis].Fournisseur.ListCount
If [Form_SFDemandeDevis].Fournisseur.ItemData(i) = FR Then
verif = False
i = [Form_SFDemandeDevis].Fournisseur.ListCount
End If
Next
End If


If verif = True Then
[Form_SFDemandeDevis].Fournisseur.AddItem (FR)
End If

'Je sais que ma boucle est bizarre, elle vise à enlever les doublons mais ca marche pas trop!!!


[Form_SFLignesDemandeDevis].Désignation.SetFocus
[Form_SFLignesDemandeDevis].Désignation = DES
[Form_SFLignesDemandeDevis].Référence = REF
[Form_SFLignesDemandeDevis].Marque = MAR
[Form_SFLignesDemandeDevis].Désignation = DES
[Form_SFLignesDemandeDevis].Catégorie = CAT
[Form_SFLignesDemandeDevis].Quantité = QUTE
[Form_SFLignesDemandeDevis].Fournisseur = FR


End If

End Sub

Ca c'est le code pour la référence qui est dans les lignes de Demande de Devis

Private Sub Référence_AfterUpdate()


DoCmd.GoToRecord , , acNewRec
DoCmd.GoToRecord , , acNext


End Sub

9 réponses

K_SoZe Messages postés 39 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 8 juillet 2005 18
8 juil. 2005 à 18:06
Bonjour,



Je te conseille d'utiliser une connexion Adodb ainsi qu'un recordset pour ajouter tes enregistrements.

Je te fais un petit exemple mais si tu as des questions (j'ai peur de ne pas être très claire) n'hésite pas à me recontacter



'Déclaration des variables de connexion et de l'objet recordset

Dim cx as Adodb.connection

Dim rs as Adodb.Recordset

Dim ligne as string



Set cx = CurrentProject.AccessConnection

Set rs = New Adodb.Recordset



'Ouvre la table dans laquelle tu veux ajouter des enregistrements

rs.Open("NomDeTaTable")



' Dans le cas où la valeur à ajouter dans la table est dans une textbox, à modifier si ça n'est pas le cas

ligne = Textbox.Value



'Filtre sur le nom du champ où tu veux insérer ta ligne pour repérer les éventuels doublons

rs.Filter ("[NomDuChamp]") ' " & ligne & " ' ")



'Condition: si le recordset est vide

If rs.BOF And rs.EOF = true then



rs.AddNew

rs.Fields("NomDuChamp") = ligne

rs.update





Else



MsgBox ("Doublon")



End If



Voilà, j'espère que c'est un début de piste. Cela te permet d'ajouter
des données dans ta table et de les filtrer pour éviter les doublons.

Tu peux très bien remplacer NomDuChamp par son numéro si tu préfères.




K. SZe
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
8 juil. 2005 à 18:27
Salut tous

Pour ma part je te conseil de rester en DAO car faire du VBA sous Access avec table et code dans le même Access préfère largement le DAO! Utiliser une connexion pour que Access se connect a lui même heuuuu ... c'est domage je trouve
Je te propose ceci

Dim rs as recordsetSet rs currentdb.openrecordset("SELECT * FROM maTable WHERE monChamp ' " & [Form_SFDemandeDevis].Fournisseur.Text & " ' )
if rs.EOF and rs.BOF then currentDb.execute "INSERT INTO MaTable (MonChamp) VALUE( ' " & [Form_SFDemandeDevis].Fournisseur.Text & " ' )"

Voilou après le code que t'a écris K_Soze marche très bien si tu préfère

++

PtitGrumo
0
Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005
11 juil. 2005 à 09:53
Merci à tous les deux!!!

Je suis désolée PtitGRumo mais j'ai pas tout compris à ton code...je pense que c parce que je suis pas douée.....

Sinon je trouve le code K_SoZe très clair....j'ai meme bien compris!!!!
(euh.....juste un truc.... "ligne"....ca va me prendre toute le ligne ou faut que je fasse plusieurs variables, une pour chaque champ de la ligne....genre.... désignation ,quantité etc...)


Le ptit soucis reste que ma base fonctionne pour l'instant sur un ordinateur avec des sessions windows et qu'en plus elle va etre amenée à fonctionner en réseau...D'ou mon soucis avec les recordsets.....la dernière fois que j'ai essayé de faire un connexion ca m'a sorti un message d'erreur sur "cnx.open" genre la base a été enregistrer par X donc l'utilisateur administrateur ne peut pas ouvrir cette connexion.....(à peu près).

Don cj'ai un peu peur que ca me refasse pareil ce coup-ci...je vais essayer. Je vous dirais....

Merci à tout les deux ...encore!!!
0
Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005
11 juil. 2005 à 10:18
Euh.....Petit pb inattendu....Si j'utilise ce code....Ca me dit....
Impossible d'utiliser cette connection pour effectuer cette opération.Elle est fermée ou non valide dans ce contexte.....
???????Help.....j'y connais rien la dedans....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005
11 juil. 2005 à 10:58
Euh.....Petit pb inattendu....Si j'utilise ce code....Ca me dit....
Impossible d'utiliser cette connection pour effectuer cette opération.Elle est fermée ou non valide dans ce contexte.....
???????Help.....j'y connais rien la dedans....
0
PtitGrumo Messages postés 205 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 28 novembre 2005 2
11 juil. 2005 à 11:07
En fait tu utilise une connexion ADODB
C'est si tu préfère un chemin que tu construit entre tes données et ton programme par lequel tu va pouvoir transporter tes information.

Ensuite ton chemin en question peut avoir plusieurs forme! Il peut être en béton, en pavé, en terre, ... tu as donc plusieurs type de chemin (conexion) . Il faut donc préciser comment utiliser ce chemin!

C'est pareil pour Access! tu doit lui donner le mode d'emploi pour utiliser la connexion.

Va donc sur une page de code de ton access! fait Outil --> référence et dans référence coche Microsoft ActiveX Data Objet X.XX

Enregistre ton projet et déjà ca devrai mieu marcher!

Pour en revenir a ma solution, je n'utilise pas de chemin pour aller a mes données vu que mes donnée sont déjà sur place.
Ainsi j'utilise comme "Connexion" CurrentDb qui tout simplement veu dire ma base de donnée actuelle , ou va chercher la ou je suis!

Bon c'est un peu enfantin comme explication mais ca shématise bien le sujet.

c'est donc plus propre et plus performant de dire je prend les donnée la ou je suis plutot que de partir sur un chemin qui t'emmène au final au même point de départ. hum ché pas si tu as compris lol!

Mais bon le tout pour toi pour le moment est de comprendre alors reste sur le code de K_soze qui est très bien écris surtout si ce code te parle plus..


Aller bon code a toi et tien moi au courant si ca ne marche toujours pas!

PtitGrumo


essai de remplacer currentproject.accessconnection par currentdb.Connection
0
Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005
11 juil. 2005 à 12:04
En fait j'ai dans mon code...
Dim cx As ADODB.Connection
Dim rs As ADODB.Recordset


Set cx = CurrentDb.Connection
Set rs = New ADODB.Recordset

Est-ce vraiment compatible parce que la compilation bloque sur la 2eme ligne en gras et me dit que l'opération n'est pas autorisée pour ce type d'objet....
0
Miss_Am Messages postés 15 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 20 juillet 2005
11 juil. 2005 à 12:06
Dans le menu j'ai CurrentData ou CurrentProjekt si je met un NEW avant Current....Peut-etre est-ce l'un des deux....
0
hyrockbass Messages postés 25 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 6 janvier 2006
6 sept. 2005 à 10:51
il faut faire:

set cx = CurrentProject.Connection
0