Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

For Next

16 réponses
Avatar
danielsorbier
Bonjour,
débutant avec VB je cherche à utiliser For Next pour copier une valeur dans
un nombre x de lignes.
J'ai testé les différentes possibilités décrites dans le forum, mais
l'action "Coller" ne se fait pas.
Voici ce que j'ai écrit:
Soit "NbLig" le nom du champ calculant le nombre de lignes de mon forms

Lorsque j'effectue cet ordre, il s'arrête sur le premier enregistrement de
"FLigTickAtt" mais ne va pas sur le champ "IdTickA"
""""
DoCmd.GoToControl "IdTicket"
DoCmd.RunCommand acCmdCopy

DoCmd.SelectObject acForm, "FLigTickAtt", False
DoCmd.RunCommand acCmdRefresh
DoCmd.GoToRecord acForm, "FLigTickAtt", acFirst
Boucle_For_Next

Sub Boucle_For_Next()

Dim debut As Integer, fin As Integer, pas As Integer, compteur As Integer
debut = 1
fin = NbLig
pas = 1

For compteur = debut To fin Step pas

DoCmd.GoToControl "IdTickA"
DoCmd.RunCommand acCmdPaste
DoCmd.GoToRecord acForm, "FLigTickAtt", acNext

Next compteur

End Sub
"""""

alors qui si je fais ce qui suit, le coller se fait normalement sur le champ
"IdTickA"
""""
DoCmd.GoToControl "IdTicket"
DoCmd.RunCommand acCmdCopy

DoCmd.SelectObject acForm, "FLigTickAtt", False
DoCmd.RunCommand acCmdRefresh
DoCmd.GoToRecord acForm, "FLigTickAtt", acFirst
DoCmd.GoToControl "IdTickA"
DoCmd.RunCommand acCmdPaste
DoCmd.GoToRecord acForm, "FLigTickAtt", acNext
"""

Je ne comprend pas ce que je fais faux. Si qq pouvait m'aider se serait sympa.
Merci par avance

6 réponses

1 2
Avatar
Raymond [mvp]
| Le champ IdTickA est dans le 2èm forms, mais le nom du champ du 1er forms
| que l'on doit reprendre se nomme IdTicket. Dois-remplacer Me.IdTickA par
| Me.IdTicket ?

bien sûr. tu vois c'est pas plus difficile.

ton code est peut-être bon mais je ne sais pas du tout comment se comporte
le presse papier après le acCmdPaste et si la valeur mémorisée est toujours
disponible.
quoi qu'il en soit, tu ne disposeras pas du docmd dans excel.

les commandes docmd sont à éviter au maximum dans le code vba et il faut
passer au maximum par des objets ( comme les recordset) qui sont le but même
d'une programmation objets préconisée par access.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
| Je vois.... enfin c'est beaucoup dire, je n'en suis pas là de ma
| compréhension de vb
| A priori une question avant d'avoir testé.
| Rs("IdTickA") = Me.IdTickA
|
| Le champ IdTickA est dans le 2èm forms, mais le nom du champ du 1er forms
| que l'on doit reprendre se nomme IdTicket. Dois-remplacer Me.IdTickA par
| Me.IdTicket ?
|
| Je vais faire le test tout à l'heure.
| Par contre désolé d'insister, mais je voudrai quand même comprendre
pourquoi
| le for next ne fonctionne pas d'autant que si j'arrivais à saisir ce
| fonctionnement je pourrais alors aussi l'utiliser dans excel par ex.
|
| Donc imaginons que j'aie un premier forms (FormsUn) avec un champ nomé
IdUn
| et que je veuille que la valeur de ce champ se recopie dans tous les
champs
| IdDeux d'un second formulaires (FormsDeux) comprenant 30 lignes est-ce que
ce
| qui suit est juste
| ""
| DoCmd.GoToRecord acForm, "FormsUn", "",
| DoCmd.GoToControl "IdUn"
| DoCmd.RunCommand acCmdCopy
| DoCmd.GoToRecord acForm, "FormsDeux", acFirst
|
| Sub Boucle_For_Next()
|
| Dim debut As Integer, fin As Integer, pas As Integer, compteur As
Integer
| debut = 1
| fin = 30
| pas = 1
|
| For compteur = debut To fin Step pas
| DoCmd.GoToControl "IdDeux"
| DoCmd.RunCommand acCmdPaste
| DoCmd.GoToRecord acForm, "FormsDeux", acNext
| Next compteur
|
| End Sub
| ""
| Voilà,
| je dois partir mais je lirais ta réponse en rentrant.
| Merci encore de ta patience et bonne journée
Avatar
danielsorbier
bien sûr. tu vois c'est pas plus difficile. hihihihihihhihihihihihhi
merci de me donner du courage.

Je viens d'aller acheter un new pc avec vista et j'en ai profité pour passer
dans une librairie. J'ai acheté le grand livre de programmation Office en VBA5
Deux pages lues et ..... j'ai avalé une boîte d'aspirine. Blups.

Promis je m'y mettrai mais là y'a du boulot en perspective

En attendant j'ai testé ta formule que j'ai transformé comme ceci et ça
marche.
Le Set Rs = Nothing je dois aussi le mettre pour "Rt"?
""
Dim Rs As DAO.Recordset, Rt As DAO.Recordset
Set Rs = Forms("FLigTickAtt").Recordset
Set Rt = Forms("FTicket").Recordset
If Not Rs.EOF Then
Do Until Rs.EOF
Rs.Edit
Rs("IdTickA") = Rt("IDTicket")
Rs.Update
Rs.MoveNext
Loop
End If
Set Rs = Nothing
""

Comme je dois utiliser cette base pour le boulot je vais m'en tenir là pour
l'instant. Quand j'aurais du temps j'essaierai de réécrire le tout en VRAI VB

Juste une autre question à laquelle tu avais en partie répondu le 28.05.07
concernant une fonction que j'utilise à plein d'endroits pour arondir mes
valeurs financières.
""
Option Compare Database
Function Plafond1(Number As Double, Multiple As Double) As Double
Dim OBJ As New OCFunc
Plafond1 = OBJ.CEILING(Number, Multiple)
""
Sur mon new pc j'ai installé office 2003, ajouté la réf: Microsoft Office
Web Component Function Library, mais j'ai quand même l'erreur 429 (un
composant active x ne peut pas créer d'objet) qui vient à chaque fois alors
qu'avec les autres pc (sous XP) y'a pas de problème.
J'ai placé MSOWCF.DLL dans C:ProgrammeMicrosoft OfficeOffice11
Je suis bien embêté car si cela ne fonctionne pas je suis bon pour enlever
vista et mettre xp

Une dernière chose, dans ta réponse du 28.05, tu parlais d'utiliser "Round".
Je ne trouve nulle part une mention à cette fonction. est ce qu'elle permet
d'arrondir par ex. 423. 764 à 423.75 ou 80 ?
Dans mes requêtes j'utilise quelquefois "arrond("") mais cela m'enlève les
centimes...




| Le champ IdTickA est dans le 2èm forms, mais le nom du champ du 1er forms
| que l'on doit reprendre se nomme IdTicket. Dois-remplacer Me.IdTickA par
| Me.IdTicket ?

bien sûr. tu vois c'est pas plus difficile.

ton code est peut-être bon mais je ne sais pas du tout comment se comporte
le presse papier après le acCmdPaste et si la valeur mémorisée est toujours
disponible.
quoi qu'il en soit, tu ne disposeras pas du docmd dans excel.

les commandes docmd sont à éviter au maximum dans le code vba et il faut
passer au maximum par des objets ( comme les recordset) qui sont le but même
d'une programmation objets préconisée par access.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
| Je vois.... enfin c'est beaucoup dire, je n'en suis pas là de ma
| compréhension de vb
| A priori une question avant d'avoir testé.
| Rs("IdTickA") = Me.IdTickA
|
| Le champ IdTickA est dans le 2èm forms, mais le nom du champ du 1er forms
| que l'on doit reprendre se nomme IdTicket. Dois-remplacer Me.IdTickA par
| Me.IdTicket ?
|
| Je vais faire le test tout à l'heure.
| Par contre désolé d'insister, mais je voudrai quand même comprendre
pourquoi
| le for next ne fonctionne pas d'autant que si j'arrivais à saisir ce
| fonctionnement je pourrais alors aussi l'utiliser dans excel par ex.
|
| Donc imaginons que j'aie un premier forms (FormsUn) avec un champ nomé
IdUn
| et que je veuille que la valeur de ce champ se recopie dans tous les
champs
| IdDeux d'un second formulaires (FormsDeux) comprenant 30 lignes est-ce que
ce
| qui suit est juste
| ""
| DoCmd.GoToRecord acForm, "FormsUn", "",
| DoCmd.GoToControl "IdUn"
| DoCmd.RunCommand acCmdCopy
| DoCmd.GoToRecord acForm, "FormsDeux", acFirst
|
| Sub Boucle_For_Next()
|
| Dim debut As Integer, fin As Integer, pas As Integer, compteur As
Integer
| debut = 1
| fin = 30
| pas = 1
|
| For compteur = debut To fin Step pas
| DoCmd.GoToControl "IdDeux"
| DoCmd.RunCommand acCmdPaste
| DoCmd.GoToRecord acForm, "FormsDeux", acNext
| Next compteur
|
| End Sub
| ""
| Voilà,
| je dois partir mais je lirais ta réponse en rentrant.
| Merci encore de ta patience et bonne journée





Avatar
Raymond [mvp]
Pour le nothing, oui, il doit y avoir un nothing en sortie de procédure pour
tout objet ouvert dans la procédure.
l'objet Rt n'est pas indispensable et il complique même le code pour rien,
vu que tu es déjà dans le formulaire FTicket et sur le bon enregistrement.

Pour vista, personnellement et je ne drevrais pas le dire, j'attends la
sortie du SP1 pour l'utiliser car vu que je touche à tout j'ai toujours des
problèmes. néanmoins rien ne prouve que la dll MSOWCF.DLL, si tu l'as prise
ailleurs que sur vista, soit compatible vista. je ne peux rien tester sur
mon pc vu les raisons ci-dessus, mais un autre contributeur va certainement
passer et pourra peut-être répondre.

la fonction Round est un fonction répertoriée.
Elle renvoie un nombre arrondi à un nombre spécifié de positions décimales.
Round(Nombre[,nombrededécimales])

nombrededécimales: Facultatif. Nombre indiquant combien de positions à
droite de la virgule sont incluses dans le nombre arrondi. Si cette valeur
est omise, les entiers sont arrondis par la fonction Round

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
|> bien sûr. tu vois c'est pas plus difficile. hihihihihihhihihihihihhi
| merci de me donner du courage.
| Je viens d'aller acheter un new pc avec vista et j'en ai profité pour
passer
| dans une librairie. J'ai acheté le grand livre de programmation Office en
VBA5
| Deux pages lues et ..... j'ai avalé une boîte d'aspirine. Blups.
|
| Promis je m'y mettrai mais là y'a du boulot en perspective
|
| En attendant j'ai testé ta formule que j'ai transformé comme ceci et ça
| marche.
| Le Set Rs = Nothing je dois aussi le mettre pour "Rt"?
| ""
| Dim Rs As DAO.Recordset, Rt As DAO.Recordset
| Set Rs = Forms("FLigTickAtt").Recordset
| Set Rt = Forms("FTicket").Recordset
| If Not Rs.EOF Then
| Do Until Rs.EOF
| Rs.Edit
| Rs("IdTickA") = Rt("IDTicket")
| Rs.Update
| Rs.MoveNext
| Loop
| End If
| Set Rs = Nothing
| ""
|
| Comme je dois utiliser cette base pour le boulot je vais m'en tenir là
pour
| l'instant. Quand j'aurais du temps j'essaierai de réécrire le tout en VRAI
VB
|
| Juste une autre question à laquelle tu avais en partie répondu le 28.05.07
| concernant une fonction que j'utilise à plein d'endroits pour arondir mes
| valeurs financières.
| ""
| Option Compare Database
| Function Plafond1(Number As Double, Multiple As Double) As Double
| Dim OBJ As New OCFunc
| Plafond1 = OBJ.CEILING(Number, Multiple)
| ""
| Sur mon new pc j'ai installé office 2003, ajouté la réf: Microsoft Office
| Web Component Function Library, mais j'ai quand même l'erreur 429 (un
| composant active x ne peut pas créer d'objet) qui vient à chaque fois
alors
| qu'avec les autres pc (sous XP) y'a pas de problème.
| J'ai placé MSOWCF.DLL dans C:ProgrammeMicrosoft OfficeOffice11
| Je suis bien embêté car si cela ne fonctionne pas je suis bon pour enlever
| vista et mettre xp
|
| Une dernière chose, dans ta réponse du 28.05, tu parlais d'utiliser
"Round".
| Je ne trouve nulle part une mention à cette fonction. est ce qu'elle
permet
| d'arrondir par ex. 423. 764 à 423.75 ou 80 ?
| Dans mes requêtes j'utilise quelquefois "arrond("") mais cela m'enlève les
| centimes...
Avatar
danielsorbier
Ok je vais attendre pour voir si qq a une solution.

par contre j'ai essayé sans rajouter le Rt; avec Me.IdTicket comme tu le
marquais cela ne fonctionne pas.

Je viens d'essayer round C'est SUPER et dire que je me suis fais
"chie..nlit" avec cette fonction pendant des jours... Je vais changer toutes
mes requêtes Youpie
J'ai le bouquin "la docs des pros pour access 2000" et il n'y a rien sous
round. Qu'est ce que je devrai utiliser comme livre pour trouver toutes les
fonctions ?
Voilà merci infiniment pour ton aide.


Pour le nothing, oui, il doit y avoir un nothing en sortie de procédure pour
tout objet ouvert dans la procédure.
l'objet Rt n'est pas indispensable et il complique même le code pour rien,
vu que tu es déjà dans le formulaire FTicket et sur le bon enregistrement.

Pour vista, personnellement et je ne drevrais pas le dire, j'attends la
sortie du SP1 pour l'utiliser car vu que je touche à tout j'ai toujours des
problèmes. néanmoins rien ne prouve que la dll MSOWCF.DLL, si tu l'as prise
ailleurs que sur vista, soit compatible vista. je ne peux rien tester sur
mon pc vu les raisons ci-dessus, mais un autre contributeur va certainement
passer et pourra peut-être répondre.

la fonction Round est un fonction répertoriée.
Elle renvoie un nombre arrondi à un nombre spécifié de positions décimales.
Round(Nombre[,nombrededécimales])

nombrededécimales: Facultatif. Nombre indiquant combien de positions à
droite de la virgule sont incluses dans le nombre arrondi. Si cette valeur
est omise, les entiers sont arrondis par la fonction Round

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
|> bien sûr. tu vois c'est pas plus difficile. hihihihihihhihihihihihhi
| merci de me donner du courage.
| Je viens d'aller acheter un new pc avec vista et j'en ai profité pour
passer
| dans une librairie. J'ai acheté le grand livre de programmation Office en
VBA5
| Deux pages lues et ..... j'ai avalé une boîte d'aspirine. Blups.
|
| Promis je m'y mettrai mais là y'a du boulot en perspective
|
| En attendant j'ai testé ta formule que j'ai transformé comme ceci et ça
| marche.
| Le Set Rs = Nothing je dois aussi le mettre pour "Rt"?
| ""
| Dim Rs As DAO.Recordset, Rt As DAO.Recordset
| Set Rs = Forms("FLigTickAtt").Recordset
| Set Rt = Forms("FTicket").Recordset
| If Not Rs.EOF Then
| Do Until Rs.EOF
| Rs.Edit
| Rs("IdTickA") = Rt("IDTicket")
| Rs.Update
| Rs.MoveNext
| Loop
| End If
| Set Rs = Nothing
| ""
|
| Comme je dois utiliser cette base pour le boulot je vais m'en tenir là
pour
| l'instant. Quand j'aurais du temps j'essaierai de réécrire le tout en VRAI
VB
|
| Juste une autre question à laquelle tu avais en partie répondu le 28.05.07
| concernant une fonction que j'utilise à plein d'endroits pour arondir mes
| valeurs financières.
| ""
| Option Compare Database
| Function Plafond1(Number As Double, Multiple As Double) As Double
| Dim OBJ As New OCFunc
| Plafond1 = OBJ.CEILING(Number, Multiple)
| ""
| Sur mon new pc j'ai installé office 2003, ajouté la réf: Microsoft Office
| Web Component Function Library, mais j'ai quand même l'erreur 429 (un
| composant active x ne peut pas créer d'objet) qui vient à chaque fois
alors
| qu'avec les autres pc (sous XP) y'a pas de problème.
| J'ai placé MSOWCF.DLL dans C:ProgrammeMicrosoft OfficeOffice11
| Je suis bien embêté car si cela ne fonctionne pas je suis bon pour enlever
| vista et mettre xp
|
| Une dernière chose, dans ta réponse du 28.05, tu parlais d'utiliser
"Round".
| Je ne trouve nulle part une mention à cette fonction. est ce qu'elle
permet
| d'arrondir par ex. 423. 764 à 423.75 ou 80 ?
| Dans mes requêtes j'utilise quelquefois "arrond("") mais cela m'enlève les
| centimes...





Avatar
Raymond [mvp]
ce qui voudrais dire que le formulaire A n'a pas le focus ? car l'objet Rt
n'est qu'une simple copie du recordset du formulaire A.bon, ben si ça
fonctionne ....

ce qui est important c'est d'avoir le livre qui correspond à la même version
access.
si tu as access 2007 il faut un livre sur access 2007 et non sur 2000.

si tu as access 2007, l'aide en ligne est très bien faite.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
| Ok je vais attendre pour voir si qq a une solution.
|
| par contre j'ai essayé sans rajouter le Rt; avec Me.IdTicket comme tu le
| marquais cela ne fonctionne pas.
|
| Je viens d'essayer round C'est SUPER et dire que je me suis fais
| "chie..nlit" avec cette fonction pendant des jours... Je vais changer
toutes
| mes requêtes Youpie
| J'ai le bouquin "la docs des pros pour access 2000" et il n'y a rien sous
| round. Qu'est ce que je devrai utiliser comme livre pour trouver toutes
les
| fonctions ?
| Voilà merci infiniment pour ton aide.
Avatar
danielsorbier
Oui je sais. Je vais demander à mon boss qu'il me paie la nouvelle version
office 2007, mais un patron de resto ça a un mouchoir sur le portefeuille !!!
Allez bon week-end et merci


ce qui voudrais dire que le formulaire A n'a pas le focus ? car l'objet Rt
n'est qu'une simple copie du recordset du formulaire A.bon, ben si ça
fonctionne ....

ce qui est important c'est d'avoir le livre qui correspond à la même version
access.
si tu as access 2007 il faut un livre sur access 2007 et non sur 2000.

si tu as access 2007, l'aide en ligne est très bien faite.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/

Venez découvrir Open XML, le nouveau format de fichier de la suite Office !
http://www.comscamp.com/Tracker/Redirect.ashx?linkidÿ71c7f3-78e8-4371-abaf-b73c259e58db


"danielsorbier" a écrit dans le
message de news:
| Ok je vais attendre pour voir si qq a une solution.
|
| par contre j'ai essayé sans rajouter le Rt; avec Me.IdTicket comme tu le
| marquais cela ne fonctionne pas.
|
| Je viens d'essayer round C'est SUPER et dire que je me suis fais
| "chie..nlit" avec cette fonction pendant des jours... Je vais changer
toutes
| mes requêtes Youpie
| J'ai le bouquin "la docs des pros pour access 2000" et il n'y a rien sous
| round. Qu'est ce que je devrai utiliser comme livre pour trouver toutes
les
| fonctions ?
| Voilà merci infiniment pour ton aide.





1 2