IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[VBA]Création d'une procédure de recherche


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [VBA]Création d'une procédure de recherche
    Bonjour,

    Dans le cadre d'un projet je développe une procédure de recherche, mais j'ai des difficultés à la créer.
    Je m'explique, je travail sur des codes qui permettent d'identifier un fournisseur. Il arrive que le code change et par conséquent on a une nouvelle codification. Il aurait était simple si j'avais pu remplacer l'ancien code par le nouveau dans les documents liés mais ce n'est pas le cas. Ainsi j'ai une table avec la structure suivante:

    clé | Ancien COFOR | Nouveau COFOR | Date |
    1 01007U 03 25973F W3 10/06/2006
    2 38894C 34 94977K W8 21/04/2006
    3 94977K W8 84648U 01 11/10/2006
    4 84648U 01 16345R 01 05/02/2007

    Ainsi le but de la procédure est:
    Quand je tape le tape le COFOR 84648U 01, en résultat on obtiendrait l'historique suivant:
    2 38894C 34 94977K W8 21/04/2006
    3 94977K W8 84648U 01 11/10/2006
    4 84648U 01 16345R 01 05/02/2007


    Sous access, avec des requêtes, je n'ais pas réussi à obtenir ce résultat. Je pense que je dois passer par VBA. Mais je suis assez novice dans ce langage.
    Car à mon avis je dois réaliser une boucle pour avoir ce résultat.

    Je cependant réfléchie aux différentes requêtes, que je pense avoir besoin:

    Requête1: SELECT * FROM T_TRANSCO WHERE ANCIEN_COFOR=[CODE ENTREZ AU CLAVIER] OR NOUVEAU_COFOR=[CODE ENTREZ AU CLAVIER];
    --> affiche les transco en rapport avec le code donné.


    Requête2: SELECT * FROM T_TRANSCO T1 WHERE NOT EXIXTS
    (SELECT * FROM Requête1 R1 WHERE R1.Clé=T1.Clé);
    --> donne les transco de la table sans ceux de la requête précédente.


    Et ensuite j'aurai une boucle qui du style do while ... loop
    Avec pour condition: est-ce qu'il y a encore dans la table des transco qui soit en rapport avec les transco sélectionnées précédemment par la requête1. La requête de vérification un peu comme ça:

    Requête3: SELECT * FROM Requête2 R2 WHERE
    (R2.ANCIEN_COFOR IN
    (SELECT NOUVEAU_COFOR FROM Requête1)
    OR
    R2.NOUVEAU_COFOR IN
    (SELECT ANCIEN_COFOR FROM Requête1)
    );

    Et enfin dans la boucle une requête qui me donne au fur et à mesure des tours de boucle l'historique d'un COFOR.

    Requête4: SELECT * FROM T_TRANSCO T1 WHERE
    (T1.ANCIEN_COFOR IN
    (SELECT NOUVEAU_COFOR FROM Requête1)
    OR
    T1.NOUVEAU_COFOR IN
    (SELECT ANCIEN_COFOR FROM Requête1)
    );


    Le déroulement de l'algorithme suivrait celui-ci:

    R1;
    R2;
    DO WHILE (R3 IS NOT NULL){
    R4;
    R1=R4;
    R2;
    }
    LOOP

    Affiche le résultat de R1;

    Voilà, j'ai enfin fini!! Tout ce que j'ai dis sont des suppositions. Le gros problème est le fait qu'il me manque la syntaxe en VBA et la manière de travailler sur les jeux d'enregistrements.

    Merci par avance de votre intérêt à ce problème!

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir,

    Sans rentrer dans le détail de ton raisonnement (pas trop le courage à cette heure tardive ), je me demande simplement s'il ne serait pas plus simple d'identifier tes fournisseurs par une clé interne (un numéro Auto par exemple) et de gérer l'historique des codes dans une table liée. Un simple tri par date sur les enregistrements de table d'historique de codes te donnerais, pour une clé founisseur donnée, tout l'historique recherché.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu ajoutes cette fonction (adaptée pour les noms de champs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Function familleu(dep As String, ex As String) As Boolean
    Dim mabase As DAO.Database
    Dim monrec As DAO.Recordset
    Set mabase = CurrentDb()
    Do
    Set monrec = mabase.OpenRecordset("select * from matable where nouveau= '" & dep & "';")
          If monrec.RecordCount = 0 Then
        familleu = False
        Exit Do
        Else
            If monrec("ancien") = ex Then
            familleu = True
                    Exit Function
            Else
            dep = monrec("ancien")
              End If
        End If
       Loop Until 3 = 4
       Do
    Set monrec = mabase.OpenRecordset("select * from matable where ancien= '" & dep & "';")
          If monrec.RecordCount = 0 Then
        familleu = False
        Exit Function
        Else
            If monrec("nouveau") = ex Then
            familleu = True
            Exit Function
            Else
            dep = monrec("nouveau")
                End If
        End If
       Loop Until 3 = 4
       End Function
    et cette requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PARAMETERS [valeur cherchee] Text ( 35 );
    SELECT clef, 
    ancien,
    nouveau, 
    date
    FROM matable
    WHERE familleu([valeur cherchee],[nouveau])=True;

    devrait aller
    Elle est pas belle la vie ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup pour ton aide random!! J'ai fait ce que tu m'as dit et cela fonctionne parfaitement!!! Encore un mot merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA]comment faire une procédure vba
    Par FRIGAUX dans le forum VBA Access
    Réponses: 4
    Dernier message: 23/03/2007, 15h59
  2. [VBA]Création d'une table VBA est-ce possible?
    Par bacchus30 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/03/2007, 14h44
  3. [VBA-A] Lancer une procédure d'une application ArcMap
    Par TiT0f dans le forum VBA Access
    Réponses: 11
    Dernier message: 05/06/2006, 23h44
  4. [VBA]Execution d'une procédure avec un ComboBox sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/01/2006, 09h27
  5. [DB2]Eurreur lors de la création d'une procédure
    Par uaspecitmoon dans le forum DB2
    Réponses: 1
    Dernier message: 25/05/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo