[Access] VBA et Enregistrements
Fermé
Paul Gasser
-
14 mars 2007 à 08:29
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 - 15 mars 2007 à 16:07
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 - 15 mars 2007 à 16:07
A voir également:
- [Access] VBA et Enregistrements
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Acer quick access - Forum Logiciels
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Access appdata - Guide
- Access runtime ✓ - Forum Access
14 réponses
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...
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...
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
14 mars 2007 à 10:15
14 mars 2007 à 10:15
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?
Ca semble être une gestion de stock mais pourquoi les données ne correspondent-elles pas?
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
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
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
14 mars 2007 à 11:12
14 mars 2007 à 11:12
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
Une boucle pour parcourir tous les enregistrements (ex avec un MoveNext par exemple)
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
14 mars 2007 à 13:20
14 mars 2007 à 13:20
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...
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...
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)"
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)"
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
14 mars 2007 à 15:11
14 mars 2007 à 15:11
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...
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...
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
14 mars 2007 à 17:36
14 mars 2007 à 17:36
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.
j'affiche mon adresse mail dans mon profil pendant 1 heure ou deux mais je ne rentre chez moi que ce soir.
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
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
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
15 mars 2007 à 10:27
15 mars 2007 à 10:27
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.
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.
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
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
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
15 mars 2007 à 16:07
15 mars 2007 à 16:07
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.
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.