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.
>