Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 01h19   #1
Futur Membre du Club
 
Louise Pelletier
Inscription : août 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Louise Pelletier

Informations forums :
Inscription : août 2010
Messages : 49
Points : 17
Points : 17
Par défaut Convertir une macro en VBA

Bonjour,

J'ai un formulaire qui affiche des enregistrements. Dans ce formulaire, j'ai un boîte de texte (SearchBox) qui permet d'inscrire un critère de recherche et des boutons (SearchGo et SearchClear) pour exécuter ou annuler la recherche.

La boîte de texte et les boutons proviennent d'un modèle de formulaire Access 2007 auquel j'ai converti les macros en code VBA.

Les boutons appèlent des fonctions,
Exemple le bouton "Effacer le critère" appèle la fonction "Filters_ClearFilter" (voir le code ci-dessous).
Ces fonctions ont été créées dans un module appelé " module converti" qui contient les fonctions convertis à partir des macros.

Mais une erreur survient sur la ligne "With CodeContextObject".
N'étant pas experte en Acces, j'aimerais savoir à quoi est relié "CodeContextObject" et comment corrigé le problème?

Voici le code convertit en VBA :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Function Filters_ClearFilter()
On Error GoTo Filters_ClearFilter_Err
    With CodeContextObject
        If (CurrentProject.IsTrusted And .Form.Name = "Asset List") Then
              .Form!cboFilterFavorites = ""
        End If
        ' **** Clear Filter
        DoCmd.ApplyFilter "", """"""
        DoCmd.GoToControl "SearchBox"
        DoCmd.SetProperty "SearchClear", acPropertyVisible, "0"
        DoCmd.SetProperty "SearchGo", acPropertyVisible, "-1"
        If (CurrentProject.IsTrusted) Then
               .SearchBox = ""
        End If
        Exit Function
    End With
Filters_ClearFilter_Exit:
    Exit Function
Filters_ClearFilter_Err:
    MsgBox Error$
    Resume Filters_ClearFilter_Exit
end function
Merci
marycaLou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 03h16   #2
Futur Membre du Club
 
Louise Pelletier
Inscription : août 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Louise Pelletier

Informations forums :
Inscription : août 2010
Messages : 49
Points : 17
Points : 17
Par défaut Macro vs VBA

Bonjour,

N'ayant pas trouvé réponse à ma question, je me demande si quelqu'un peut me diriger dans la compréhension de l'utilisation de la commande "With et End with".

De plus, en travaillant dans mon programme, que ce soit en faisant des tests ou de la programmation, lorsque j'essaie de compacter ma base de données, j'ai souvent l'erreur que MsAccess ne peut compacter ma base de données. Pourquoi?


Merci
marycaLou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 19h29   #3
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour à tous
Citation:
N'étant pas experte en Access, j'aimerais savoir à quoi est relié "CodeContextObject" et comment corrigé le problème?
1/Quand on est dans un module de formulaire, on peut écrire par exemple:
Code :
Me.MaZoneDeTexte = QuelqueChose
Le Me étant là pour le formulaire dans lequel s'exécute notre code
2/Supposons maintenant que nous ayons une même fonction que nous voulons qui s'exécute dans plusieurs formulaires de notre projet.
2.a - Une solution serait de copier/coller la fonction dans chacun de nos formulaires; ce qui aurait pour conséquences:
-->de gonfler notre projet ,
-->En cas de correction, c'est partout qu'il faudrait intervenir;au risque d'en oublier,
-->Et puis, il faut l'avouer, ça ne serait pas du tout fait pour gagner du temps
-->....
2.b - Une autre solution: On va créer la fonction dans un module standard et pouvoir l'appeler dans les formulaires concernés. Mais probleme: le Me.MaZoneDeTexte provoquerait une erreur d'execution; puisque que le code s'attent à un objet (Form ou etat).
Et c'est ça sera tout l'astuce d'utiliser CodeContextObject
; en remplacement donc de Me. Ainsi, dans notre module standard, on écrire:
Code :
CodeContextObject.MaZoneDeTexte = QuelqueChose
N'étant pas experte en Acces, j'aimerais savoir à quoi est relié "CodeContextObject" et comment corrigé le problème?

Dans ton exemple, si ta macro ne s'exécutait que dans un seul formulaire, on pourrait déplacer le code convertit dans le module de ce form et écrire, à la place de ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
With CodeContextObject
        If (CurrentProject.IsTrusted And .Form.Name = "Asset List") Then
              .Form!cboFilterFavorites = ""
        End If
        ' **** Clear Filter
        DoCmd.ApplyFilter "", """"""
        DoCmd.GoToControl "SearchBox"
        DoCmd.SetProperty "SearchClear", acPropertyVisible, "0"
        DoCmd.SetProperty "SearchGo", acPropertyVisible, "-1"
        If (CurrentProject.IsTrusted) Then
               .SearchBox = ""
        End If
        Exit Function
 End With
on peut faire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
        If (CurrentProject.IsTrusted And .Form.Name = "Asset List") Then
              Me!cboFilterFavorites = ""
        End If
        ' **** Clear Filter
        DoCmd.ApplyFilter "", """"""
        DoCmd.GoToControl "SearchBox"
        DoCmd.SetProperty "SearchClear", acPropertyVisible, "0"
        DoCmd.SetProperty "SearchGo", acPropertyVisible, "-1"
        If (CurrentProject.IsTrusted) Then
               Me.SearchBox = ""
        End If
        Exit Function
Citation:
si quelqu'un peut me diriger dans la compréhension de l'utilisation de la commande "With et End with".
Un exemple simple:
Supposons que quelque part dans mon code, j'ai eu besoin d'écrire ces ligne
Code :
1
2
3
4
    Me.MaZoneDeTexte.ForeColor = QBColor(12)
    Me.MaZoneDeTexte.BackColor = QBColor(14)
    Me.MaZoneDeTexte = "bonjour"
    Me.Form.AllowEdits = True
C'est la même chose que d'écrire:
Code :
1
2
3
4
5
6
With Me
     .MaZoneDeTexte.ForeColor = QBColor(12)
     .MaZoneDeTexte.BackColor = QBColor(14)
     .MaZoneDeTexte = "bonjour"
     .Form.AllowEdits = True
End With
Consulte l'aide d'access pour plus d'infos.
j'espère t'avoir apporté quelque chose

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web