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