Probleme vba access

Fermé
pil'af - 10 oct. 2007 à 09:12
 pil'af - 11 oct. 2007 à 14:46
Bonjour,
j'ai un problème concernant access... je souhaite extraire des donnée à partir d'une form mais je ne comprend pas vraiment comment elle est complétée ( en effet ce n'est pas moi qui est creer les base de données ni le corps du programme). il semblerait que ce soit cette instruction le problème :

Private Sub RéfPièces_AfterUpdate()
On Error Resume Next
Me!Texte53 = Me!RéfPièces.Column(1)
Me!Indice = Me!RéfPièces.Column(7)
Me!Texte24 = Me!RéfPièces.Column(2)
FS
End Sub

Sub FS()

For I = 0 To 30
If IsNull([Détail fiche suiveuse sous-formulaire1]![N° Opération]) Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "FS", acNormal, acAdd
DoCmd.SetWarnings True
'DoCmd.Requery
DoCmd.GoToRecord , , acPrevious
DoCmd.GoToRecord , , acNext
End If
Next I
end sub

quelqu'un pourrait-il mexpliquer que fait le sub FS.
merci pour votre aide

12 réponses

fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
10 oct. 2007 à 09:29
Bonjour

Apparemment ton code est assez ancien, peut-être Access 97, la syntaxe "récente" utilisant plutôt Me.* que Me!* De plus, je ne suis pas familier avec la syntaxe *.Column(n) et je ne vois pas trop à quoi ça peut corespondre dans un formulaire. L'aide VBA de l'access 2003 que j'ai sous les yeux n'a pas l'air ce connaître non plus en tant que collection d'objets.

Sinon, concernant ta procédure FS, je dirais qu'elle souvre en mode ajout, puis une fois que la valeur a été ajoutée, elle fait une petit manip (acPrevious, ac Next) qui devrait permettre de replacer le nouvel enregistrement dans sa position de tri et se replacer en mode ajout : acPrevious va deplacer le curseur sur le dernier enregistrement du recordset trié, et acNext va le replacer dans un nouvel enregistrement.
Tout cela dit avec certains doutes, ne serait-ce parce que cela voudrait dire que l'exécution du code s'interrompt avant le DoCmd.SetWarnings True, ce qui a priori ne sera pas le cas.
0
Une simple remarque:
avez-vous vu que la ligne DoCmd.Requery est en commentaire ( ' en tête de ligne), donc inopérante.
Est-ce volontaire?
0
fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
10 oct. 2007 à 09:44
Oui, JL92, c'est justement pour ça que je pense que, à la place, les deux lignes suivantes cherchent à replacer le nouvel enregistrement à sa position dans le recordset trié, et redonner la main pour une nouvelle saisie (je crois que j'avais fait un truc comme ça il y a longtemps !)
0
Merci pour l'expliquation fourvin, je pense aussi que ce code est assez ancien... mais je n'ai pas vrément le choix je dois faire avec. Le problème est que à chaque fois qu'une valeur est ajouté j'aimerais la copier vers une autre table access... étant assez débutant en vba, j'aurais besoin de quelques conseils...

ps JL92 : la ligne a été mise en commantaire par le concepteur et celà fonctionne, à présent je ne sais pas vraiment à qoi elle sert.

merci de votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
10 oct. 2007 à 10:01
Effectivement, revenons au début : quand tu dis que tu veux extraire des données à partir d'un formulaire, que veux-tu faire exactement ?

D'après ce que tu dis, j'ai l'impression que tu voudrais que les données que tu entres dans le formulaire soient inséres dans une autre table ?

Si c'est bien ce cas, tu pourrais faire la chose suivante : dans les propriétés du formulaire, tu choisis l'évènement "Après Insertion" et tu crées un code dans le genre :
DoCmd.RunSQL "INSERT INTO tablecible (champ1, ...) VALUES (Me.control1, ...)"

Il y a plusieurs façon de le faire mais c'est probablement la méthode la plus rapide.
0
Pas de grand résultat avec cette méthode ("erreur de syntaxe dans la méthode insert into"), je débute en vba access, bien que je connaisse vba et excel assez bien. Je vais chercher une solution pour contourner ce problème.
merci de ton aide et de tes explication
0
fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
10 oct. 2007 à 10:35
Ca arrive aux meilleurs, et je sais de quoi je parle :)

Peux-tu copier ici ta ligne qui contient "INSERT INTO" ?
0
DoCmd.RunSQL "INSERT INTO gamme tempo (num_operation, description, temps prépa, temps fab) VALUES ([détail fiche suiveuse sous-formulaire1].[N° Opération], [détail fiche suiveuse sous-formulaire1].[RefGamme], [détail fiche suiveuse sous-formulaire1].[texte 16], [détail fiche suiveuse sous-formulaire1].[texte 18])"

Voilà ma très belle ligne certainement bourré d'erreur!!!!
merci :)
0
fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
10 oct. 2007 à 10:46
Si "gamme tempo" est ta table cible, il faut que tu l'écrives "... [gamme tempo]..." sinon il croit que "gamme" est le nom de table et "tempo" un mot clé qu'il ne reconnaît pas, d'où le message d'erreur.

De rien :)
0
c'est pas mieu, en fait g l'impression que access ne trouve pas ma table... pourtant elle est crée (enfin il me semble...). J'ai renommer ma table en "gamme _tempo", oeut etre y a t-il d'autre ligne de code a rajouter....
Hors mis le fatr que cette ligne ne marche pas je pensais l'insérer dans mon sub fs juste avant le end if afin que ma table soit compléter à chaque itération... quand pense tu?
0
fourvin Messages postés 276 Date d'inscription lundi 19 mars 2007 Statut Membre Dernière intervention 2 février 2012 102
11 oct. 2007 à 13:14
Avant de statuer sur les solutions, il vaut mieux valider le besoin ! Déjà, est-ce que le fait d'avoir une requête qui t'insère dans la table gamme_tempo les valeurs saisies dans le formulaire correspond à ce que tu veux obtenir ?

Si c'est le cas, il y a plusieurs moyens de le faire mais d'expérience, le DoCmd.RunSql est probablement le plus simple. Donc on va s'arranger à la faire marcher !

Si tu dis que ça continue à ne pas marcher, quel est le message d'erreur ou quels sont les symptômes ?
Pour savoir si ta table existe, il suffit de regarder dans la fenêtre base de données (F11), dans les tables.
Si tu renommes ta table là, il faut aussi la renommer dans la requête SQL.
Excuse si tout ça est trivial, mais c'est pour éliminer les source potentielle d'erreur !
0
c' est bon g réussi à faire marcher le DoCmd.RunSql :) (j'avais pensé a renommé la table ds ma requete également :) )! par contre je ne peut le faire marcher que manuellement. Je mexplique je voudrais appliquer cette requete à plusieurs sous-formulaires (via une boucle) qui évidemment ont le meme nom ( sinon c pa drole) et access ne l'aplique qu'à un seul :(.Jj'ai dons temporerement placé un bouton par sous formulaire qui applique la requete pour pouvoir me consacrer à l'extraction de la table obtenue vers excel. Je me demande d'ailleur si il est possible de compter le nombre de ligne de ma table gamme_tempo?
merci de ton aide
0