programme en VB qui coince - VB/VBA/VBS - Programmation
Marsh Posté le 13-01-2009 à 14:46:44
Sans le code, c'est un petit peu difficile de voir ce qui ne va pas.
Autrement, il y a la solution d'une requête SQL :
Select t1.champ1 |
Marsh Posté le 13-01-2009 à 18:24:38
merci de ton intervention .en fait il s'agit de comparer plusieurs tables de differents champs a une table de référence et valider par 1 si les enregistrements sont identiques
or le programme qui est fait provoque le marquage d'un premier champ et c'est tout ....même quand le laisse mouliner 2 heures et plus il doit y avoir une erreur de boucle ou autre et en plus c'est très lourdcomme écriture . je peux te copier le prog si tu es dispo
de toutes facons je te remercie
Marsh Posté le 15-01-2009 à 13:32:24
voila le petit programme qui ne marche pas et ou le compteur ne s"affiche pas ( sur ACCESS )
but:
il s'agit de comparer 4 champs "promo1,2,3,4 " d'une table PROMO1 avec 4 champs "A,B,C,D, de la table ANALYSE " et si les 4 champs sont identiques , il faut marquer 1 (nombre) dans le champ CRIT4 de la table ANALYSE avec un compteur pour suivre le traitement
option Compare Database
Dim MonCompteur
Sub LanceTrtPromoParTable()
' PROCEDURE QUI EFFECTUE LE TRAITEMENT PROMO en FONCTION DU PARAMETRE NonTable QUI EST LE NOM DE TABLE QUI CONTIENT LES VALEURS PROMO
'garde
Dim MaBase
Dim nbChampsPromoDansTable As Integer
Set MaBase = CurrentDb()
Set MaTablePromo = MaBase.OpenRecordset("table promo4" )
If Not MaTablePromo.EOF Then
MaTablePromo.MoveFirst
End If
Do Until (MaTablePromo.EOF)
' on valorise les variables
promo1 = MaTablePromo("promo1" )
promo2 = MaTablePromo("promo2" )
promo3 = MaTablePromo("promo3" )
promo4 = MaTablePromo("promo4" )
' on lance la procedure qui parcour la table achat
MonCompteur = MonCompteur + 1
Form("Deroulement" ).Value = CStr(Date) + "(" + CStr(Time) + " )" + ": " + "Compteur = " + CStr(MonCompteur) + " ; " + vbCrLf + Form("Deroulement" ).Value
SQLUPDATE = "UPDATE ANALYSE SET CRIT4=1 WHERE ((ANALYSE.A = " + CStr(promo1) + " AND ANALYSE.B = " + CStr(promo2) + " AND ANALYSE.C = " + CStr(promo3) + " AND ANALYSE.D = " + CStr(promo4) + " ) OR (ANALYSE.B = " + CStr(promo1) + " AND ANALYSE.C = " + CStr(promo2) + " AND ANALYSE.D = " + CStr(promo3) + " AND ANALYSE.E = " + CStr(promo4) + " ))"
MaBase.Execute (SQLUPDATE)
MaTablePromo.MoveNext
Loop
End Sub
Private Sub LancePromo_Click()
Call LanceTrtPromoParTable
End Sub
merci pour toute aide
Eglantine
Marsh Posté le 15-01-2009 à 14:29:02
As-tu tracé ton programme en mode debogage pour voir si ta boucle fonctionne correctement ?
Est-ce que tu peux nous copier le contenu de SQLUPDATE après son remplissage lors d'une itération ?
Si tes champs sont alphanumériques, je pense qu'il faut mettre des quotes dans ta concaténation de variables pour la jointure :
[...] ANALYSE.A = '" & CStr(promo1) & "' AND [...]
Je conseille aussi généralement d'utiliser l'opérateur & plutôt que + pour les concaténations de variables.
Marsh Posté le 15-01-2009 à 15:40:26
merci de ta reponse
ce n'est pas moi qui ai ecrit ce code
je le trouve tres lourd j'aurai plus ecrit
if promo1 ="A" and promo2 ="B" and promo3 ="C" and promo4 ="D" or
promo1 ="B" and promo2 ="C" and promo3 = "D" and promo4 = "E" then
ANALYSE(CRIT4) = 1
honnetement je suis completement paumee sur cette action je ne sais plus comment le rectifier
si tu sais super
Marsh Posté le 13-01-2009 à 14:03:21
j'ai fait un petit traitement pour comparer un a un les champs de 2 tables sous Access , le premier enregistrement commun est marque avec la valeur 1 dans un champ par contre le test ne se continue pas pour les enregistrements suivants
je suis paumée
merci de toute aide