Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[Access] VBA et Enregistrements

Paul Gasser, le mercredi 14 mars 2007 à 08:29:59
Je vous sollicite à nouveau.... Merci d'avance....

J'ai un soucis, je possède un formulaire qui renvoit les formulaires d'un champs du style là :

Num Nom Stock Différence

2 Chaussures 80 3
4 Bottes 54 6
56 Tee-shirts 90
54 Blouson 23 -13
64 etc.... 92 72

Ce que j'aimerai c'est que quand la différence est positive cela ajoute autant de vêtements (Par exemple : pour les chaussures, en ajouter 3 etc...), que quand la différence est négative, cela supprime autant de message et que quand la différence est vide (Nothing) rien ne se passe... De plus, quand je clique sur mon bouton valider je voudrais que cela parcoure toutes les lignes et que tout fonctionne... Voila mon code mais cela ne marche pour l'enregistrement où la souris pointe mais pas pour tous :

Merci d'avance : Jespere avoir été assez clair : N'hésitez pas pour les questions je ss connecté toute la journée :

Dim SQL As String
Dim Cpt As Integer

Cpt = 0

SQL = "INSERT INTO VETEMENT(Num_Typ, Num_Pers, Num_Etat, Date_Pris, Date_Rendu) " _
& "VALUES (" & Form_Difference.ID_Vetement.Value & ", NULL, 5, NULL, NULL)"

Dim MSG As String
If IsNull(Form_Difference!Difference) Then
MSG = MsgBox("null")

Else
MSG = MsgBox("not null")
End If

If IsNull(Form_Difference!Difference) Then
Else
If CInt(Form_Difference.Difference.Value) > -1 Then
For Cpt = 1 To CInt(Form_Difference.Difference.Value)
DoCmd.RunSQL SQL
Next
MsgBox ("Mise à jour effectuée")
Me.Refresh
Else
If CInt(Form_Difference.Difference.Value) < 0 Then
SQL = "SELECT Num_Vet FROM VETEMENT " _
& "WHERE Num_Pers Is Null AND Num_Etat=5 AND Num_Typ= " & Form_Difference.ID_Vetement.Value & ";"
Set bds = CurrentDb
Set rst = bds.OpenRecordset(SQL)

If Not rst.EOF() Then

rst.MoveFirst

For Cpt = 1 To -CInt(Form_Difference.Difference.Value)

If Not rst.EOF() Then
SQL = "DELETE FROM VETEMENT " _
& "WHERE Num_Vet=" & rst(0) & ";"
DoCmd.RunSQL SQL
rst.MoveNext

Else
MsgBox ("Il n'y a plus de vêtements de ce type.")
End If

Next
MsgBox ("Mise à jour effectuée")
Me.Refresh
Else
MsgBox ("Il n'y a plus de vêtements à supprimer.")

End If
Me.Refresh

Else
MsgBox ("Mise à jour impossible.")
Me.Refresh

End If
End If
Me.Refresh
End If
Configuration: Windows XP
Internet Explorer 6.0
Répondre à Paul Gasser  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le mercredi 14 mars 2007 à 09:36:36
Je remonte le sujet....
Si ce n'est pas assez clair, en gros, il me faudrait une boucle pour parcourir tous les enregistrements. Dès que le premier est mis à jour faire le deuxieme etc...
Répondre à Paul Gasser

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mercredi 14 mars 2007 à 10:15:04
Peux-tu donner plus de détails sur la structure des données et ce que tu souhaites faire.

Ca semble être une gestion de stock mais pourquoi les données ne correspondent-elles pas?
Répondre à zenon

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le mercredi 14 mars 2007 à 10:40:33
Il s'agit bien d'une gestion de stock
Toute mon application fonctionne bien (8 onglets). Cependant l'utilisateur voudrait pouvoir mettre à jour son stock lors de l'arrivée d'un chargement.

Il remplit donc sur un formulaire où apparait toutes les désignations les nouveaux nombres ds le stock. Une macro calculle la différence avec l'ancien stock et le code ci-dessus permet d'insérer ou de supprimer dans la table autant de vêtement qu'il le faut. Tout marche bien mais le problème c'est quand je clique sur mon bouton tout mon code s'applique que au premier enregistrement et pas à tous
Répondre à Paul Gasser

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mercredi 14 mars 2007 à 11:12:59
Je crains de ne toujours pas bien comprendre...

Enfin, si ça marche comme tu le souhaites enregistrement par enregistrement, c'est que ta boucle ne fonctionne pas.

Je pense que tu as au moins un problème avec ton compteur:

For Cpt=1 To...
...
Next Cpt

Je vois aussi des blocs If un peu bizarres mais tu aurais des messages d'erreur
Répondre à zenon

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le mercredi 14 mars 2007 à 11:50:32
Je pense aussi qu'il me faut une boucle for mais je ne sais pas comment la faire

Une boucle pour parcourir tous les enregistrements (ex avec un MoveNext par exemple)
Répondre à Paul Gasser

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mercredi 14 mars 2007 à 13:20:14
Je ne suis pas sûr qu'il faille une boucle, une simple requête mise à jour suffirait probablement mais je ne vois pas suffisemment clair dans ta structure pour l'en proposer une...

Quant à la boucle, je l'ai reprise de ton code où il me semble manquer un argument: next Cpt.

Peut-être pourrais-tu expliquer la structure des tables et le flux des données...
Répondre à zenon

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le mercredi 14 mars 2007 à 14:00:17
As-tu peut etre MSN pour discuter plus simplement ou pour que je t'envoie des captures d'écran...

Le problème de la requete de mise à jour c'est que cela met à jour des champs mais moi je veux par exemple ajouter des chaussures ou en supprimer d'où la requête :

SQL = "INSERT INTO VETEMENT(Num_Typ, Num_Pers, Num_Etat, Date_Pris, Date_Rendu) " _
& "VALUES (" & Form_Difference.ID_Vetement.Value & ", NULL, 5, NULL, NULL)"
Répondre à Paul Gasser

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mercredi 14 mars 2007 à 15:11:42
Mais je ne vois toujours pas ta structure.

Tu as une table où on trouve seulement le nombre de pièces de chaque type de produit ou tu encodes, par exemple par code-barre, chague objet individuellement en suivant les mouvements individuellement?
Tu vérifie le stock visuellement ou tu suis les sorties dans la base?

D'après ta requête, j'ai l'impression que tu veux supprimer ou ajouter plusieurs lignes dans une seule table mais peut-être est-elle liée à d'autres tables. Pourtant, tu ne cherches pas à identifier individuellement les enregistrements mais simplement à en supprimer tant que la valeur réelle est inférieure à la valeur stockée et en supprimant donc éventuellement des produits "individuellement" encore présents physiquement, à moins que tu ne t'intéresse qu'à la valeur globale, mais dans ce cas, inutile d'ajouter un enregistrement par produit...

De plus, les champs que tu nommes dans ton exemple ne se retrouvent pas dans la requête. D'où viennent les valeurs et à quoi correspondnent-elles (les noms ne sont pas très explicites et la valeur Null leur est attribuée...)

Bref, pour moi, c'est de la panade...
Répondre à zenon

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le mercredi 14 mars 2007 à 16:20:08
As-tu peut etre MSN pour discuter plus simplement ou pour que je t'envoie des captures d'écran...
Répondre à Paul Gasser

10


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le mercredi 14 mars 2007 à 17:36:30
Bin malheureusement, je suis en consultations et je jette un coup d'oeil entre deux...
j'affiche mon adresse mail dans mon profil pendant 1 heure ou deux mais je ne rentre chez moi que ce soir.
Répondre à zenon

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le jeudi 15 mars 2007 à 09:55:25
Pour faire plus simple,

J'ai un formulaire comme cela avec un bouton "Mise à jour"

Num1 Désignation1 Taille1 Stock1
Num2 Désignation2 Taille2 Stock2
Num3 Désignation3 Taille3 Stock3
Num4 Désignation4 Taille4 Stock4
Num5 Désignation5 Taille5 Stock5
Num6 Désignation6 Taille6 Stock6
.....

Je cherche une boucle qui me ferait parcourir tous les enregistrements. Mon code marche pour un. Par exemple, je sélectionne la première ligne ou la seconde.... J'aimerai que quand je clique sur le bouton, mon code s'applique à la premiere ligne, puis à la deuxieme, puis à la troisieme, etc...

EN GROS : Une BOUCLE pour parcourir tous les enregistrements :

Merci d'avance de ta patiente
Répondre à Paul Gasser

12


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
zenon, le jeudi 15 mars 2007 à 10:27:23
Oui, c'est l'exemple que tu donnes au début, mais ça ne me donne pas d'idée de la structure de la base; or c'est impossible de t'aider sans cela.
Sur quelles données est fondé le formulaire que tu cites?
Quel(les) tables dois-tu mettre à jour et selon quels critères?

Si le code que tu donnes (que je ne comprends pas) fonctionne enregistrement par enregistrement, il suffit de revoir le fonctionnement de la boucle.
Le problème peut se situer dans un des blocs If (qui me semblent "bizarres") ou dans la boucle elle même.

Pour commencer, il me semble que ta boucle n'est pas correcte: tu devrais ajouter "next quoi": Next Cpt

Commence peut-être comme ça et on verra si ça change qqch.

Sinon, peux-tu expliquer comment fonctionne ta base?

Ton formulaire semble lister tous les produits entrants et mettre à jour le stock dans une même opération.

Une requête mise à jour est à mon avis susceptible de faire cela en tenant compte de tous les enregistrements et en un seul passage en fonction des valeurs encodées dans le formulaire. Je pourrais peut-être te faire une proposition mais je devrais connaître la structure de tes tables et leurs relations ainsi que la source du formulaire.
Répondre à zenon

13


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Paul Gasser, le jeudi 15 mars 2007 à 10:55:41
Mon formulaire renvoit les données d'une TABLE "TYPE"

Cette table est relié à une table "VETEMENT" où sont listés tous les vêtements, c'est à dire les 240 chaussures, 283 polo, etc...

Quand dans Différence (qui appartient à la table TYPE) met 10 par exemple, je veux que cela ajoute 10 chaussures
Répondre à Paul Gasser

14


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 zenon, le jeudi 15 mars 2007 à 16:07:05
Je pense que tu ne vois pas où je veux en venir...

Pour prendre un exemple.
Les chaussures, tu as plusieurs modèles et pour chaque modèle un ou plusieurs exemplaires dans chaque pointure dans une ou plusieurs couleurs.

Comment as-tu stratifié ces données dans ta base?

Parce que si tu te contentes d'ajouter un nombre global de chaussures lors d'une livraison, ça va être le foutoir...
J'imagine que tu n'as pas un enregistrement dans une seule table qui reprend tous ces renseignements à chaque ligne?

Je ne vois pas concrètement ce que tu veux faire (tu me diras que ce n'est pas mon problème...).
Lors de la livraison, toujours à propos des chaussures, tu auras besoin d'un formulaire d'encodage qui mettra toutes les données "en place": autant de paires de tel modèle, pointure, couleur sont entrées le. (Voire telle pièce de tel N° (code barre) est entrée et correspond à...)

Dans le code que tu fournis au départ, on trouve juste la trace d' l'ajout d'un enregistrement avec un seul champ: ID_Vetement

Tant que je vois pas comment tu procèdes il me sera impossible de t'aider...

Pour revenir à la solution d'une requête mise à jour, et si on postule que tu as défini marque, modèle, pointure, couleur... , il te suffirait d'ajouter le nombre et paires qui entrent; Ca peut être fait en un passage, sans boucle et sans VBA.
Répondre à zenon
[ACCESS / VBA] Eviter le Form_Load (Résolu)Bonjour, Je développe un appli Access/VBA. Dans le cours du développement, je fais référence depuis un formulaire A au contenu d'une zone de texte située sur un formulaire B. Considérant que Formulaire_A est le formulaire courant, une ligne de... www.commentcamarche.net/forum/affich-2820248-access-vba-eviter-le-form-load
Liste access rowsource et defaultvalue (Résolu)Salut, j'ai créé un formulaire multi-recherche sous access (vba), j'ai plusieurs liste déroulantes et en fonction des selectios sur ces listes je rempli une derniere zone de liste que j'ai appelé listreult à l'aide de la propriété... www.commentcamarche.net/forum/affich-2721349-liste-access-rowsource-et-defaultvalue
[Réseau] outils ?? (Résolu)Bonjour à tous Je viens de developper sous Access / VBA une base de recherche réseau c'est à dire que selon une prise X, on ressort les infos sur le switch concerné par exemple (genre la prise 10 est alimentée par le port 20 du switch 1)... En... www.commentcamarche.net/forum/affich-2970086-reseau-outils
Impossible d'enregistrer le son du microphoneVérifiez le niveau de volume du microphone, éventuellement faites un test avec l'enregistreur fourni avec votre système d'exploitation. Sous Windows il se trouve dans : Démarrer / Programmes / Accessoires / divertissement / Magnétophone Si... www.commentcamarche.net/faq/sujet-5381-impossible-d-enregistrer-le-son-du-microphone
[Access VBA] problème pour récuperer un champ (Résolu)Résuperer un champ dans une liste. Bonjour a tous. J'ai un petit problème et je suis sur que vous pourrez m'aider. J'ai une BD Access avec pour tous les programmes de mon entreprises, tous les ordinateur ou ceux-ci (les prog) sont... www.commentcamarche.net/forum/affich-2783503-access-vba-probleme-pour-recuperer-un-champ
[ACCESS] VBA import fichier racine commune (Résolu)Bonjour, je voudrais savoir comment peut-on importer des fichiers ayant une partie du nom commune ? Par exemple pour access je voudrais importer les fichiers CLIENTSxxxxxx ou xxxxxxxx correspondrait à une date. ce fichier CLIENTSxxxxxx est déposé... www.commentcamarche.net/forum/affich-8260222-access-vba-import-fichier-racine-commune
Access vba filtre date Etat (Résolu)Bonjour, j'ai besoin de filter un etat en fonction d'une date mais cela ne fonctionne pas. j'ai définie une variable, DateJour égale a la date du jour. je dois filtrer en fonction de la date du jour, et de la semaine en cours. ci... www.commentcamarche.net/forum/affich-7822188-access-vba-filtre-date-etat
VBScript - Objet File L'objet File obtenu à l'aide d'une méthode de l'objet FileSystemObject permet de manipuler ou d'obtenir des informations sur un fichier. Pour utiliser un objet File il suffit de : Créer une instance de l'objet FSO : Set objetFSO =... www.commentcamarche.net/vbscript/vbs-file.php3
Toutes les réponses pour « [Access] VBA et Enregistrements »