Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 24/03/2011, 08h28   #1
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Par défaut membre de méthode ou de données introuvable

Bonjour,

J'ai trouvé un bout de code sur Internet pour pouvoir créer des msgbox personnalisées, c'est à dire une msgbox dans laquelle je peux renommer les boutons traditionnels offerts par vba.

J'utilise donc un module avec le code ci-dessous mais lorsque je fais appel à lui j'ai une erreur du type : erreur de compilation - membre de méthode ou de données introuvable. La ligne concernée est en gras et en rouge. Quelqu'un pourrait il m'éclairer sur ce qu'il faut faire ? Merci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
' Comme pour une MsgBox 'classique', seul l'argument message est obligatoire :
' --------------------------------------------------------------------------
'       prompt : chaîne de caractères correspondant au texte à afficher
'       title : [facultatif] chaîne de caractères représentant le titre
'       icon : [facultatif] valeur identique que pour une MsgBox classique (vbCritical, vbQuestion, vbExclamation ou vbInformation)
'       caption1 : [facultatif] chaîne de caractères correspondant au titre du bouton n°1
'       caption2 : [facultatif] chaîne de caractères correspondant au titre du bouton n°2
'       cancel : [facultatif] affiche un bouton Annuler dans la boîte de dialogue si valeur True
'
'
' Valeur de retour :
' ----------------
' Le choix de l'utilisateur est renvoyé sous forme d'une valeur (type Byte) de 0 à 2 :
'
'       0 : l'utilisateur a cliqué sur le bouton Annuler
'       1 : l'utilisateur a cliqué sur le bouton n° 1
'       2 : l'utilisateur a cliqué sur le bouton n° 2
'
'========================================================================================================================
 
Private Declare Function SetWindowsHookEx& Lib "USER32" Alias "SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
Private Declare Function GetCurrentThreadId& Lib "kernel32" ()
Private Declare Function CallNextHookEx& Lib "USER32" (ByVal hHook&, ByVal CodeNo&, ByVal wParam&, ByVal lParam&)
Private Declare Function GetWindow& Lib "USER32" (ByVal hWnd&, ByVal wCmd&)
Private Declare Function SetWindowText& Lib "USER32" Alias "SetWindowTextA" (ByVal hWnd&, ByVal lpString$)
Private Declare Function UnhookWindowsHookEx& Lib "USER32" (ByVal hHook&)
Private msgHook&
Private TitreBtn$(1 To 2)
 
Function MsgBoxPerso(Prompt$, Optional Title$, Optional Icon&, Optional Caption1$ = "Oui", Optional Caption2$ = "Non", Optional Cancel As Boolean = False) As Byte
Dim Rep%, hInstance&
    TitreBtn(1) = Caption1
    TitreBtn(2) = Caption2
    msgHook = SetWindowsHookEx(5, AddressOf CaptionBoutons, hInstance, GetCurrentThreadId())
    Rep = MsgBox(Prompt, Icon + IIf(Cancel, vbYesNoCancel, vbYesNo), Title)
    MsgBoxPerso = Application.Max(Rep - 5, 0)
    Erase TitreBtn
End Function
 
Private Function CaptionBoutons&(ByVal nCode&, ByVal wParam&, ByVal lParam&)
Dim hWndChild&
  If nCode < 0 Then
    CaptionBoutons = CallNextHookEx(msgHook, nCode, wParam, lParam)
    Exit Function
  End If
  If nCode = 5 Then
    hWndChild = GetWindow(wParam, 5)
    Call SetWindowText(hWndChild, TitreBtn(1))
    hWndChild = GetWindow(hWndChild, 2)
    Call SetWindowText(hWndChild, TitreBtn(2))
    UnhookWindowsHookEx msgHook
  End If
  CaptionBoutons = False
End Function
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 09h11   #2
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
ben... il n'y a ni gras ni rouge, ni même balises de code pour mieux lire le code...
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 09h33   #3
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
oups, désolé j'ai oublié de la mettre en évidence. La ligne concernée est ci-dessous :

MsgBoxPerso = Application.Max(Rep - 5, 0)
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 10h50   #4
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
C'est un code que tu as pompé sur du VBA pour Excel...
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 11h35   #5
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
oui, donc ca ne peut pas fonctionner pour access ?

Sinon, pour répondre à mon besoin initial qui est de créer une msgbox avec des boutons personnalisés, je dois surement pouvoir faire un formulaire type modale mais comment lui dire par exemple qu'en cliquant sur un bouton x du formulaire modal (A), il modifie la propriété d'un champ pour un formulaire (B) ?

Si je peux faire ca, je résouds mon problème.

Merci de votre aide
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 13h44   #6
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Salut !

Soit tu refais une fonction Max personnalisée
Code :
1
2
3
4
5
6
7
8
 
Function MyMaxPerso(a_dData1 as double, a_dData2 as double) as double
    If a_dData1 > a_dData2 then
        MyMaxPerso = a_dData1
    Else
        MyMaxPerso = a_dData2
    End If
End Function
Soit tu te fais un formulaire personnalisé, avec tes propres boutons (btnCancel et btnValid par exemple), et une petite propriété en plus
Code :
1
2
3
4
5
6
7
8
9
Option Compare Database
Option Explicit
Private m_bValidé As Boolean
Property Get Validé() As Boolean
    Validé = m_bValidé
End Property
Property Let Validé(a_bValid As Boolean)
    m_bValidé = a_bValid
End Property
Tu gères tes boutons
Code :
1
2
3
4
5
6
7
8
Private Sub btnCancel_Click()
    m_bValidé = False
    Me.Visible = False
End Sub
Private Sub btnValid_Click()
    m_bValidé = True
    Me.Visible = False
End Sub
et tu te crées une petite procédure qui récupères ce que tu as mis dans ta propriété
Code :
1
2
3
4
5
6
7
8
Sub KoiKiCPassé()
    Dim f As Form
    Const NomForm As String = "Formulaire2"
    DoCmd.OpenForm NomForm, , , , , acDialog
    Set f = Forms(NomForm)
    'ouverture en modal...
    MsgBox f.Validé
End Sub
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 10h59   #7
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Merci de m'avoir aidé, je garde ta solution sous le coude. J'ai résolu mon problème autrement en créant un formulaire modale dans lequel j'ai mis les boutons que je souhaitais... Ainsi,je peux m'en servir comme boite de dialogue.
Pourquoi faire plus compliqué quand les choses peuvent être simples .
Un grand merci en tout cas.
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h50.


 
 
 
 
Partenaires

Hébergement Web