Boucle pour executer une macro

Signaler
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006
-
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
-
bonjour a tous ,
voila mon probleme ,je débute en vba pour access


Je voudrais faire une boucle qui a l'ouverture d'un formulaire execute une macro(nettoyage) ,sur chaque enregistrement un apres l'autre jusqu'au dernier
voila ce que j'ai essaye mais ca ne marche pasFunction cmdnett2()<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


Dim monform As Form


Dim ctrl As Control


Set monform = Forms![Toutes les locations archivées]


For Each ctrl In monform


DoCmd.RunMacro ("nettoyage")


Next ctrl


End Function


je ne sais pas si c'est une bonne solution ,j'ai voulu que pour chaque control(champ je crois) la macro s'execute mais ca ne fait rien pas de message et pas de resultat attendu pour la macro nettoyage
Merci de votre aide

14 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Question pourquoi tu fais :
For Each ctrl In monform

DoCmd.RunMacro ("nettoyage")

Next ctrl

Alors que dans
DoCmd.RunMacro ("nettoyage")


Tu n'utilise pas ctrl

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

merci de repondre
comment faire pour faire intervenir ctrl dans la commande

DoCmd.RunMacro ("nettoyage")
c'est peut etre pour ca que ca ne donne rien<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Je ne sais pas si ma question etait compréhensible
La macro nettoyage doit s'executer sur chaque ligne du formulaire
je ne sais pas si c'est faisable
Messages postés
42
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2006

Salut, en gros tu veux faire quoi ? Vider des textbox?

Si c'est le cas, tu peux faire:

dim ctl as control

For Each ctl In Me.Controls
If Left(ctl.Name, 3) = "zs_" Then
ctl = ""
End If
Next

"zs_" est ce que je met à chaque debut de nom de textbox

Alboure
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Sinon, tu peux éviter l'appel de DoCmd.RunMacro, il s'agit d'une fonction, tu peux l'appeller comme tu veux, et lui adjoindre des paramètres.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

non pas textbox


j'ai un formulaire avec les champs [date d'entrée] [date départ] et [nett] ,
j'ai une macro qui s'appelle nettoyage ,cette macro compare la date départ d'un enregistrement avec la date d'entrée de l'enregistrement suivant et si la date est la même ,écrit dans le champ nett "urgent"
je voudrais que tout s'execute a l'ouverture du formulaire
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

quelqu'un a ecrit
"Sinon, tu peux éviter l'appel de DoCmd.RunMacro, il s'agit d'une fonction, tu peux l'appeller comme tu veux, et lui adjoindre des paramètres"
mais j'ai pas compris la signification de la phrase
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Ta fonction nettoyage est bien une sub,

Donc tu peux utiliser Call nettoyage()

Tu peux aussi ajouter des paramètres :
public Sub Nettoyage(byrefpCtrl as control)
et utiliser pCtrl dans ta méthode.

Pour l'appellé dans ta méthode :
call Nettoyage(ctrl)

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

nettoyage est une macro
voila les détails
condition:CpteDom("[Date de départ]";"Archive dates";"[date de départ]=formulaires![toutes les locations archivées]![date d'entrée] and [nomchalet]=Formulaires![toutes les locations archivées]![nomchalet]")>0
action: DéfinirValeur [nett] urgent


je ne sais pas si c'est une sub


dans ma boucle je doit enlever ou laisser quoi?
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

nettoyage, tu l'a créé comment ?
Sous access, je ne suis pas au top.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

je suis sous access 2002
j'ai crée la macro ,sans vba ,cette macro fonctionne bien ,si je la met sur un des champs d'un enregistrement ,par exemple sur date d'entree ,evenement sur clic ,si je clic sur chaque date d'entrée de chaque enregistrement ,j'ai le résultat attendu mais si 50 enregistrements ,je doit clicker 50 fois
c'est pourquoi j'ESSAYE de l'automatiser mais c'est pas évident quand on connait rien en vba
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Et pas mieux quand on n'a jamais utiliser VBA access.
Si c'est réellement ton code, là je ne sais pas comment l'utiliser.
Si tu peux voir ta macro par l'éditeur de macro Access (VBA), il faut qu'il y ait une instruction Sub de la forme :
Public Sub Nettoyage()
...
End Sub
Si ce n'est pas le cas, je sèche.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
7
Date d'inscription
jeudi 11 mai 2006
Statut
Membre
Dernière intervention
11 mai 2006

voila ,elle n'apparait dans les modules code que si elle est convertie(automatiquement) en vba
peut etre est ce que je peux l'utiliser en vba tel quel?
Function nettoyage()
On Error GoTo Nettoyage_Err


With CodeContextObject
If (DCount("[Date de départ]", "Archive dates", "[date de départ]=formulaires![toutes les locations archivées]![date d'entrée] and [nomchalet]=Formulaires![toutes les locations archivées]![nomchalet]") > 0) Then
.nettoyage = "URGENT"
End If
End With


Nettoyage_Exit:
Exit Function


Nettoyage_Err:
MsgBox Error$
Resume Nettoyage_Exit


End Function
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour

Heu là g capte plus rien, cela dépasse mes connaissances.
Si cette macro n'est pas VBA, je ne peux pas t'aider.
désolé.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
Messages postés
792
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut 771386 alain105d, salut =177355 Alboure, salut 68514 NHenry,

=771386 alain105d, je soupçonne, dans ta macro Access, au moins un problème possible de syntaxe : urgent devrait être écrit "urgent" me semble-t-il.

Pour le vérifier, assures-toi que la macro est fermée, et choisis, dans le menu Outils>>Macros, l'élément de menu Convertir les macros en Visual Basic.

Access va ainsi créer un module VBA, qui contiendra l'équivalent, en code, de ta macro Access (ce qui est plus lisible pour nous). Trouves le module créé, et postes ici le contenu de la macro VBA, s'il te plait, que l'on vérifie ensemble.

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</SUP>