Faire une boucle sur access.

Anonyme
2010-06-06T04:41:57+00:00

Bonjour,

Je fais appel à vous car je ne connais rien à VB.

Voila:

J'ai une table "Intérimaires" avec "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

Cette table est mise à jour par le biais d'un fichier Exel

J'ai une table "Tickets" avec "Num Ticket"

Cette table est figée avec pour enregistrements "Num Ticket" de 1000 à 5000

J'ai une table "Export" avec

"Num Ticket", "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

Le but est de vérifier si le "Matricule" dans la table "Intérimaires" existe dans la table "Export" et si cela est le cas de mettre à jour "Export" avec l'enregistrement contenu dans la table "Intérimaires".

Ensuite pour tous les enregistrements de la table "Intérimaires" qui ne sont pas dans la table "Export" prendre la valeur minimun de la table "Tickets" qui n'existe pas dans la table "Export" et mettre à jour cette table.

Merci pour votre aide à venir.

Microsoft 365 et Office | Access | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

4 réponses

  1. Anonyme
    2010-06-06T11:58:32+00:00

    On va essayer de le faire plus lisible (accents):

    Bonjour Sympa.

    Donc, si je comprend bien, tu voudrais en "sortie" les intérimaires avec le

    numéro de ticket le plus petit disponible ?

    Et donc je suppose que tu supprimes des intérimaires et que leur ticket est

    ainsi libéré ?

    Explique-nous bien ce que tu as et ce que tu veux. Pas le pourquoi.

    Cdt Blaise

    <Sympa66> a écrit dans le message de news:

    *** Adresse électronique supprimée pour cause de confidentialité ***...

    Bonjour,

    Je fais appel à vous car je ne connais rien à VB.

    Voila:

    J'ai une table "Intérimaires" avec "Matricule", "Nom", "Prénom", "Date",

    "Text1", ..., "Text6"

    Cette table est mise à jour par le biais d'un fichier Exel

    J'ai une table "Tickets" avec "Num Ticket"

    Cette table est figée avec pour enregistrements "Num Ticket" de 1000 à 5000

    J'ai une table "Export" avec

    "Num Ticket", "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

    Le but est de vérifier si le "Matricule" dans la table "Intérimaires" existe

    dans la table "Export" et si cela est le cas de mettre à jour "Export" avec

    l'enregistrement contenu dans la table "Intérimaires".

    Ensuite pour tous les enregistrements de la table "Intérimaires" qui ne sont

    pas dans la table "Export" prendre la valeur minimun de la table "Tickets"

    qui n'existe pas dans la table "Export" et mettre à jour cette table.

    Merci pour votre aide à venir.


    La solidarité, la démocratie c'est le patriotisme. Le nationalisme, c'est la haine de l'autre.

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire
  2. Anonyme
    2010-06-09T14:37:32+00:00

    Bonjour Sympa66,

    J'espère que ta question est toujours d'actualité!

    Pour revenir à ta problématique de mise à jour de la table Export avec les données de la table Intérimaires lorsque celles-ci contiennent toutes deux le même matricule, le moyen le plus simple à mon avis c'est d'utiliser une requête Action de type "Mise à jour" qui devrait resembler à ceci


    UPDATE Export INNER JOIN Intérimaires ON Export.Matricule = Intérimaires.Matricule

    SET Export.Nom = [Intérimaires].[Nom],

            Export.Prénom = [Intérimaires].[Prénom],

            Export.[Date] = [Intérimaires].[Date]

    WHERE (((Export.Nom) Is Null) AND ((Export.Prénom) Is Null) AND ((Export.Date) Is Null));


    capture d'écran de la grille d'interrogation

    Le principe est simple pour chaque matricule trouvé dans les deux tables une mise à jour des données de la table Export est faite à partir des données de la table Imtérimaires (SI il n'y a pas de valeurs déjà saisies dans les champs à mettre à jour. j'ai ajouter cette condition pour être sûr de ne pas écraser des données déjà saisie (clause Where de la requête)).

    Attention, il faut "Activer le contenu" pour que cette requête s'exécute.

    Pour en savoir plus sur les requêtes Mise à jour et la manière de réaliser celle-ci un lien vers l'aide en ligne d'Office

    Créer une requête Mise à jour

    Pour la deuxième partie de ta question j'avoue qu'après plusieurs lectures, je ne comprends toujours pas exactement où tu veux en venir, un exemple détaillé pourrait être utile.


    En espérant avoir pu rendre service MehdiH Visitez "Office Users" (http://officeusers.blogspot.com/)

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2010-06-07T12:54:27+00:00

    Bonjour,

    J'ai fait plusieurs suppositions afin de créer le code suivant :

    • Je suppose que les enregistrements tickets sont complets et donc que

    la table Tickets contient une ligne pour chaque valeur de 1000 à 5000

    • Je suppose que une ligne d'export correspond à un seul Intérimaire

    (Donc on ne doit pas avoir deux lignes Export pour un même Intérimaire

    (Matricule)

    Tout d'abord créer un formulaire avec un bouton.

    Dans les propriétés de ce bouton mettre [Procédure événementiel] dans la

    propriété "Sur Clic" puis sur la même ligne cliquer sur le bouton avec

    les ...

    Puis mettre dans la fonction vide, le code suivant :

    '------------------ Début du code -------------------

    Dim bdd as database

    dim recordMatricule as dao.recordset

    dim sqlMatricule as string

    dim recordExport as dao.recordset

    dim sqlExport as string

    dim recordExport2 as dao.recordset

    dim sqlExport2 as string

    dim recordNumTicket as dao.recordset

    dim sqlNumTicket as string

    'On prend comme base de référence la base de données actuelle

    set bdd = currentdb

    'Requête permettant de lister tous les numéros Matricule

    sqlMatricule = "SELECT * FROM Intérimaires"

    'Lancement de la requête

    set recordMatricule = bdd.openrecordset(sqlMatricule,dbopendynaset)

    'On créer une boucle tant que tous les enregistrements Matricule n'ont

    pas été traités

    do while not recordMatricule.eof

    'Requête permettant de vérifier si le Matricule actuellement traité est

    présent dans la table Export

    sqlExport = "SELECT * FROM Export WHERE Matricule = " &

    recordMatricule.fields(0)

    set recordExport = bdd.openrecordset(sqlExport,dbopendynaset)

    'Si le Matricule n'est pas présent dans la table Export

    If recordExport.eof then

    'Création du nouvel enregistrement Export

    'Récupération du numéro de ticket le plus bas non utilisé

    'Requête permettant de lister tous les numéros de Tickets présent dans

    la table Tickets (Affectés ou non) par ordre croissant

    sqlTicket= "SELECT [Num Ticket] FROM Tickets ORDER BY [Num Ticket]

    'Lancement de la requête

    set recordTicket = bdd.openrecordset(sqlTicket,dbopendynaset)

    'Boucle permettant de traités les tickets un par un

    'Ce afin de savoir si le numéro en cours de traitement est déjà

    utilisé ou non

    do while not recordTicket.eof

    'Requête permettant de vérifier que le Ticket en cours n'est pas

    présent dans la table Export

    sqlExport2 = "SELECT * FROM Export WHERE [Num Ticket] = " &

    recordTicket.fields(0)

    'Lancement de la requête

    set recordExport2 = bdd.openrecordset(sqlExport2,dbopendynaset)

    'Si le ticket n'a pas été trouvé dans la table Export

    if recordExport2.eof then

    'Récupération du numéro de ticket en cours de traitement (car

    correspondant au numéro le plus bas non utilisé) (Stockage de la valeur

    dans la variable NumTicket)

    NumTicket = recordTicket.fields(0)

    'On se place ensuite sur le dernier enregistrement de la requête

    listant tous les numéros de ticket de la table Tickets (permet de sauter

    tous les traitements inutiles des numéros de tickets suivant car on

    vient de trouver un numéro non utilisé)

    recordTicket.movelast

    End if

    'Fermeture du résultat de la requête sqlExport2

    recordExport2.close

    set recordExport2 = nothing

    'On se déplace sur l'enregistrement suivant de la liste des ticket de

    la table Tickets, cela a pour effet de se placer à la fin de la liste

    des Tickets (après le tout dernier ticket de la liste)

    recordTicket.movenext

    loop

    'Fermeture du résultat de la requête sqlTicket

    recordTicket.close

    set recordTicket = nothing

    'Création du nouvel enregistrement dans la table Export avec le numéro

    de ticket non utilisé que l'on vient de récupérer dan sla variable

    (NumTicket)

    recordExport.addnew

    'On remplit les champs de la table Export avec le numéro de ticket

    (NumTicket) et avec les valeur de l'enregistrement Matricule qui l'on

    est entrain de traiter

    recordExport.fields("Num Ticket") = NumTicket

    recordExport.fields("Matricule") = recordMatricule.fields(0)

    recordExport.fields("Nom") = recordMatricule.fields(1)

    recordExport.fields("Prenom") = recordMatricule.fields(2)

    recordExport.fields("Date") = recordMatricule.fields(3)

    recordExport.fields("Text1") = recordMatricule.fields(4)

    recordExport.fields("Text2") = recordMatricule.fields(5)

    recordExport.fields("Text3") = recordMatricule.fields(6)

    recordExport.fields("Text4") = recordMatricule.fields(7)

    recordExport.fields("Text5") = recordMatricule.fields(8)

    recordExport.fields("Text6") = recordMatricule.fields(9)

    'Enregistrement définitif des valeurs dans la table Export

    recordExport.update

    else

    'Si on trouve le Matricule dans la table Export

    'On va mettre à jour l'enregistrement correspondant au matricule dans

    la table Export avec les informations de la table Intérimaire

    'Edition de l'enregistrement

    recordExport.edit

    recordExport.fields("Matricule") = recordMatricule.fields(0)

    recordExport.fields("Nom") = recordMatricule.fields(1)

    recordExport.fields("Prenom") = recordMatricule.fields(2)

    recordExport.fields("Date") = recordMatricule.fields(3)

    recordExport.fields("Text1") = recordMatricule.fields(4)

    recordExport.fields("Text2") = recordMatricule.fields(5)

    recordExport.fields("Text3") = recordMatricule.fields(6)

    recordExport.fields("Text4") = recordMatricule.fields(7)

    recordExport.fields("Text5") = recordMatricule.fields(8)

    recordExport.fields("Text6") = recordMatricule.fields(9)

    'Enregistrement définitif de la mise à jour

    recordExport.update

    end if

    'Fermeture du résultat de la requête sqlExport

    recordExport.close

    set recordExport = nothing

    'On se déplace sur le matricule suivant dans la liste des matricules

    recordMatricule.movenext

    loop

    'Fermeture du résultat de la requête sqlMatricule

    recordMatricule.close

    set recordMatricule = nothing

    'Fermeture de la connexion avec la base de données actuelle

    bdd.close

    set bdd = nothing

    '------------------ Fin du code -------------------

    Cordialement

    TopJB

    Sympa66 a écrit :

    > Bonjour,

    >

    > Je fais appel à vous car je ne connais rien à VB.

    >

    > Voila:

    >

    > J'ai une table "Intérimaires" avec "Matricule", "Nom", "Prénom", "Date",

    > "Text1", ..., "Text6"

    > Cette table est mise à jour par le biais d'un fichier Exel

    >

    > J'ai une table "Tickets" avec "Num Ticket"

    > Cette table est figée avec pour enregistrements "Num Ticket" de 1000 à 5000

    >

    > J'ai une table "Export" avec

    > "Num Ticket", "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

    >

    > Le but est de vérifier si le "Matricule" dans la table "Intérimaires"

    > existe dans la table "Export" et si cela est le cas de mettre à jour

    > "Export" avec l'enregistrement contenu dans la table "Intérimaires".

    > Ensuite pour tous les enregistrements de la table "Intérimaires" qui ne

    > sont pas dans la table "Export" prendre la valeur minimun de la table

    > "Tickets" qui n'existe pas dans la table "Export" et mettre à jour cette

    > table.

    >

    > Merci pour votre aide à venir.

    >

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2010-06-06T11:49:27+00:00

    Bonjour Sympa.

    Donc, si je comprend bien, tu voudrais en "sortie" les intérimaires avec le numéro de ticket le plus petit disponible ?

    Et donc je suppose que tu supprimes des intérimaires et que leur ticket est ainsi libéré ?

    Explique-nous bien ce que tu as et ce que tu veux.  Pas le pourquoi.

    Cdt Blaise

    <Sympa66> a écrit dans le message de news: *** Adresse électronique supprimée pour cause de confidentialité *** m...

    Bonjour,

    Je fais appel à vous car je ne connais rien à VB.

    Voila:

    J'ai une table "Intérimaires" avec "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

    Cette table est mise à jour par le biais d'un fichier Exel

    J'ai une table "Tickets" avec "Num Ticket"

    Cette table est figée avec pour enregistrements "Num Ticket" de 1000 à 5000

    J'ai une table "Export" avec

    "Num Ticket", "Matricule", "Nom", "Prénom", "Date", "Text1", ..., "Text6"

    Le but est de vérifier si le "Matricule" dans la table "Intérimaires" existe dans la table "Export" et si cela est le cas de mettre à jour "Export" avec l'enregistrement contenu dans la table "Intérimaires".

    Ensuite pour tous les enregistrements de la table "Intérimaires" qui ne sont pas dans la table "Export" prendre la valeur minimun de la table "Tickets" qui n'existe pas dans la table "Export" et mettre à jour cette table.

    Merci pour votre aide à venir.


    La solidarité, la démocratie c'est le patriotisme. Le nationalisme, c'est la haine de l'autre.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire