OVH Cloud OVH Cloud

Aide sur l'écriture d'une procédure simple

4 réponses
Avatar
lucno
Bonjour,

Je ne connais pas le langage VB, mais j'ai une petite procédure à écrire. Si
je devais rechercher comment l'écrire il me faudrait beaucoup trop de temps,
ce que je n'ai pas . Je me troune donc vers vous. Merci de bien vouloir
m'aider.

Je dois en gros, écrire une procédure qui parcoure une table et effectuer
quelques petites actions.

Matable contient les champs suivants: Num: Texte - 12, NumCta: Texte - 5,
TypeCr: contient "principal" ou "secondaire" et Observation: Texte - 30

Ouvrir MaTable
Aller au 1er enregistrement
Tprincipal=0
Tant que je ne suis pas à la fin de la MaTable
Affecter la valeur du champ NumCta à une variable NuméroCTA

Tant que NumCTA= NuméroCTA
Si le champ TypeCR="Principal" alors Tprincipal=Tprincipal+1
Fin de la boucle NumCTA
' Si en sortant de la boucle NumCTA on change d'enregistrement, il faut que
la ligne qui suit écrive dans l'enregistrement précédent
Si Tprincipal>1 alors écrire dans le champ Observation "Obs1"
Passer à l'enregistrement suivant

Fin de boucle Tant que je ne suis pas à la fin de la MaTable

ex d'enregistrements

Num NumCTA TypeCR Observation
200501000023 - 12365 - principal -
200501000512 - 12365 - principal -
200501000519 - 12388 - principal -
200501000617 - 12399 - principal -
200501000915 - 12399 - secondaire-

Merci d'avance pour votre aide

Luc

4 réponses

Avatar
lucno
Bonsoir,

Je vois que la plus part des messages obtient des réponses, alors que le
mien reste sans rien.
Je me demande pourquoi. Est-ce irréalisable?, me suis je pas bien exprimé ?

Peut être pouvez-vous m'aider en me donnant la syntaxe pour ouvrir une
table, créer un boucle, et écrire dans un enregistrement.

Merci pour votre aide


Bonjour,

Je ne connais pas le langage VB, mais j'ai une petite procédure à écrire. Si
je devais rechercher comment l'écrire il me faudrait beaucoup trop de temps,
ce que je n'ai pas . Je me troune donc vers vous. Merci de bien vouloir
m'aider.

Je dois en gros, écrire une procédure qui parcoure une table et effectuer
quelques petites actions.

Matable contient les champs suivants: Num: Texte - 12, NumCta: Texte - 5,
TypeCr: contient "principal" ou "secondaire" et Observation: Texte - 30

Ouvrir MaTable
Aller au 1er enregistrement
Tprincipal=0
Tant que je ne suis pas à la fin de la MaTable
Affecter la valeur du champ NumCta à une variable NuméroCTA

Tant que NumCTA= NuméroCTA
Si le champ TypeCR="Principal" alors Tprincipal=Tprincipal+1
Fin de la boucle NumCTA
' Si en sortant de la boucle NumCTA on change d'enregistrement, il faut que
la ligne qui suit écrive dans l'enregistrement précédent
Si Tprincipal>1 alors écrire dans le champ Observation "Obs1"
Passer à l'enregistrement suivant

Fin de boucle Tant que je ne suis pas à la fin de la MaTable

ex d'enregistrements

Num NumCTA TypeCR Observation
200501000023 - 12365 - principal -
200501000512 - 12365 - principal -
200501000519 - 12388 - principal -
200501000617 - 12399 - principal -
200501000915 - 12399 - secondaire-

Merci d'avance pour votre aide

Luc


Avatar
Anor
Salut

Je n'ai pas tout compris de ce que tu voulais faire, mais essaye ceci :

Colle le code ci dessous dans un nouveau module, puis F8 pour avancer pas à pas et te permettre
comment le code se déroule :

Essaye de mettre des bons noms de champs, table et déclarer tes variables avant, hein ?

Sub ziva()
Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Dim Fld As DAO.Field

Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset("LaTable")

While Not Rst.EOF
For Each Fld In Rst.Fields
If Fld.name = "LeChamp1" and Fld.value = "ce que tu veux" Then
Rst.Edit
Rst.Fields("LeChamp2").Value = Fld.Value
Rst.Fields("ID").Value = lavaleur
Rst.Update
End If
Next Fld
CurrentDb.Execute "UPDATE LaTable Set LeChamp3 = '" & tavariable & "' WHERE ID=" & lavaleur-1 &
";"
Rst.MoveNext
Wend
Rst.Close
Dbs.Close
Set Rst = Nothing
Set Dbs = Nothing

End Sub

Voilà pour un dégrossissement
A toi de jouer avec les conditions et comparaisons, mise en mémoire des valeurs, etc..

PS : une table n'ayant pas la notion d'ordre d'enregistrements, ça se complique de penser
"enregistrement précédent"
Tu peux donc peut-être gérer un champ ID qui permette d'aller lire sa valeur dans
l'enregistrement courant, puis
d'aller mettre à jour une commande SQL de requête mise à jour un champ dans l'enregistrement de
la table pour lequel ID = ID en cours -1

a+
Arnaud


"lucno" a écrit dans le message de news:

| Bonsoir,
|
| Je vois que la plus part des messages obtient des réponses, alors que le
| mien reste sans rien.
| Je me demande pourquoi. Est-ce irréalisable?, me suis je pas bien exprimé ?
|
| Peut être pouvez-vous m'aider en me donnant la syntaxe pour ouvrir une
| table, créer un boucle, et écrire dans un enregistrement.
|
| Merci pour votre aide
|
|
| > Bonjour,
| >
| > Je ne connais pas le langage VB, mais j'ai une petite procédure à écrire. Si
| > je devais rechercher comment l'écrire il me faudrait beaucoup trop de temps,
| > ce que je n'ai pas . Je me troune donc vers vous. Merci de bien vouloir
| > m'aider.
| >
| > Je dois en gros, écrire une procédure qui parcoure une table et effectuer
| > quelques petites actions.
| >
| > Matable contient les champs suivants: Num: Texte - 12, NumCta: Texte - 5,
| > TypeCr: contient "principal" ou "secondaire" et Observation: Texte - 30
| >
| > Ouvrir MaTable
| > Aller au 1er enregistrement
| > Tprincipal=0
| > Tant que je ne suis pas à la fin de la MaTable
| > Affecter la valeur du champ NumCta à une variable NuméroCTA
| >
| > Tant que NumCTA= NuméroCTA
| > Si le champ TypeCR="Principal" alors Tprincipal=Tprincipal+1
| > Fin de la boucle NumCTA
| > ' Si en sortant de la boucle NumCTA on change d'enregistrement, il faut que
| > la ligne qui suit écrive dans l'enregistrement précédent
| > Si Tprincipal>1 alors écrire dans le champ Observation "Obs1"
| > Passer à l'enregistrement suivant
| >
| > Fin de boucle Tant que je ne suis pas à la fin de la MaTable
| >
| > ex d'enregistrements
| >
| > Num NumCTA TypeCR Observation
| > 200501000023 - 12365 - principal -
| > 200501000512 - 12365 - principal -
| > 200501000519 - 12388 - principal -
| > 200501000617 - 12399 - principal -
| > 200501000915 - 12399 - secondaire-
| >
| > Merci d'avance pour votre aide
| >
| > Luc
Avatar
lucno
Bonjour,

J'ai essayé ce que tu m'as conseillé, mais, dès la première ligne "Dim Dbs
As DAO.Database" j'obtiens un message d'erreur : "Erreur de compilation. Type
défini par l'utilisateur non défini" DAO.Database est surligné.
Je comprend que je n'ai pas défini quelque chose, probablement dao, mais
comment lui dire ?

j'utilise Access 2000, c'est peut-être pour ça !

J'ai encore besoin de ton aide

Explication sur ce que je veux faire:

J'ai des collègues qui doivent dès qu'une opération est réalisée établir un
rapport. Lorsqu'ils sont plusieurs pour la même opération: il y en a un qui
fait un rapport "principal" et tous les autres un rapport "secondaire" or il
arrive fréquement qu'ils se trompent et je me retrouve avec plusieurs rapport
principaux pour la même opération ce qui fausse mes calculs. Je cherche donc
à retrouver les erreurs par cette procèdure en recherchant si les principaux
sont supérieurs à 1 ou si il n'y a que des secondaires etc...
Merci d'avance
Luc

J


Salut

Je n'ai pas tout compris de ce que tu voulais faire, mais essaye ceci :

Colle le code ci dessous dans un nouveau module, puis F8 pour avancer pas à pas et te permettre
comment le code se déroule :

Essaye de mettre des bons noms de champs, table et déclarer tes variables avant, hein ?

Sub ziva()
Dim Dbs As DAO.Database
Dim Rst As DAO.Recordset
Dim Fld As DAO.Field

Set Dbs = CurrentDb
Set Rst = Dbs.OpenRecordset("LaTable")

While Not Rst.EOF
For Each Fld In Rst.Fields
If Fld.name = "LeChamp1" and Fld.value = "ce que tu veux" Then
Rst.Edit
Rst.Fields("LeChamp2").Value = Fld.Value
Rst.Fields("ID").Value = lavaleur
Rst.Update
End If
Next Fld
CurrentDb.Execute "UPDATE LaTable Set LeChamp3 = '" & tavariable & "' WHERE ID=" & lavaleur-1 &
";"
Rst.MoveNext
Wend
Rst.Close
Dbs.Close
Set Rst = Nothing
Set Dbs = Nothing

End Sub

Voilà pour un dégrossissement
A toi de jouer avec les conditions et comparaisons, mise en mémoire des valeurs, etc..

PS : une table n'ayant pas la notion d'ordre d'enregistrements, ça se complique de penser
"enregistrement précédent"
Tu peux donc peut-être gérer un champ ID qui permette d'aller lire sa valeur dans
l'enregistrement courant, puis
d'aller mettre à jour une commande SQL de requête mise à jour un champ dans l'enregistrement de
la table pour lequel ID = ID en cours -1

a+
Arnaud


"lucno" a écrit dans le message de news:

| Bonsoir,
|
| Je vois que la plus part des messages obtient des réponses, alors que le
| mien reste sans rien.
| Je me demande pourquoi. Est-ce irréalisable?, me suis je pas bien exprimé ?
|
| Peut être pouvez-vous m'aider en me donnant la syntaxe pour ouvrir une
| table, créer un boucle, et écrire dans un enregistrement.
|
| Merci pour votre aide
|
|
| > Bonjour,
| >
| > Je ne connais pas le langage VB, mais j'ai une petite procédure à écrire. Si
| > je devais rechercher comment l'écrire il me faudrait beaucoup trop de temps,
| > ce que je n'ai pas . Je me troune donc vers vous. Merci de bien vouloir
| > m'aider.
| >
| > Je dois en gros, écrire une procédure qui parcoure une table et effectuer
| > quelques petites actions.
| >
| > Matable contient les champs suivants: Num: Texte - 12, NumCta: Texte - 5,
| > TypeCr: contient "principal" ou "secondaire" et Observation: Texte - 30
| >
| > Ouvrir MaTable
| > Aller au 1er enregistrement
| > Tprincipal=0
| > Tant que je ne suis pas à la fin de la MaTable
| > Affecter la valeur du champ NumCta à une variable NuméroCTA
| >
| > Tant que NumCTA= NuméroCTA
| > Si le champ TypeCR="Principal" alors Tprincipal=Tprincipal+1
| > Fin de la boucle NumCTA
| > ' Si en sortant de la boucle NumCTA on change d'enregistrement, il faut que
| > la ligne qui suit écrive dans l'enregistrement précédent
| > Si Tprincipal>1 alors écrire dans le champ Observation "Obs1"
| > Passer à l'enregistrement suivant
| >
| > Fin de boucle Tant que je ne suis pas à la fin de la MaTable
| >
| > ex d'enregistrements
| >
| > Num NumCTA TypeCR Observation
| > 200501000023 - 12365 - principal -
| > 200501000512 - 12365 - principal -
| > 200501000519 - 12388 - principal -
| > 200501000617 - 12399 - principal -
| > 200501000915 - 12399 - secondaire-
| >
| > Merci d'avance pour votre aide
| >
| > Luc





Avatar
3stone
Salut,

"lucno"
| J'ai essayé ce que tu m'as conseillé, mais, dès la première ligne "Dim Dbs
| As DAO.Database" j'obtiens un message d'erreur : "Erreur de compilation. Type
| défini par l'utilisateur non défini" DAO.Database est surligné.
| Je comprend que je n'ai pas défini quelque chose, probablement dao, mais
| comment lui dire ?


Via le menu Outils, Références...

tu coche la référence "Microsoft DAO 3.6 Object Library" et éventuellement,
la faire passer devant (plus haut) que "Microsoft ActiveX Data Object..."


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw