| auteur : Maxence HUBICHE | Une astuce pour créer un sous formulaire de façon classique :
- mettez votre formulaire en mode création
- affichez votre fenêtre de Base de données à côté de votre formulaire
- affichez la liste des requêtes
- faites un cliquer glisser de l'icône de votre requête dans votre formulaire.
=> cette méthode crée un nouveau formulaire qui s'insère dans le contrôle Sous Formulaire...
=> Voici comment faire pour ne pas créer de nouveau formulaire :
- Dans votre formulaire principal, créez un contrôle Sous Formulaire/Sous-Etat (sans assistant si possible).
- Dans les propriétés de cet objet, allez dans l'onglet Données
- Dans la propriété Objet Source, choisissez votre requête ou votre table.
|
| auteur : Etienne Bar | Il faut mettre ce code dans l'événement Avant MAJ du formulaire ou du contrôle concerné :
If MsgBox (" Valider la mise a jour ?? " , vbOKCancel ) = vbCancel Then
MsgBox " L\'opération de mise a jour a été annulée " , vbInformation
Cancel = true
Exit Sub
And If
|
Exit Sub permet de sortir de la procédure en cours cad celle de la mise a jour.
|
| auteur : Maxence HUBICHE | Option Compare Database
Option Explicit
Private AModifier As Boolean
Private Sub Commande0_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
If AModifier Then
AModifier = False
Commande1. Visible = Not Commande1. Visible
Else
End If
End Sub
Private Sub Détail_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
AModifier = True
End Sub
|
AModifier est une variable qui va servir de tampon.
En effet, la procédure MoseMove se produit tant que la souris se déplace sur le contrôle ou l'élément concerné.
Donc, il faut réussir à éviter que la procédure se reproduise tant que ta souris n'est pas sortie du bouton. Donc :
- Il faut que, lors de la première exécution, on lui signale qu'il ne faut pas qu'elle se reproduise. La procédure commence donc par tester s'il faut modifier ou non
Si c'est le cas, alors, il y a modification de la variable tampon, signalant ainsi qu'il ne faut plus modifier
Puis on inverse la visibilité en cours du bouton
Commande1. Visible = Not Commande1. Visible
|
Par contre, s'il ne faut pas modifier, aucune action n'est entreprise
J'ai posé le bouton sur la section détail. Dès que la souris va sortir du bouton, elle va donc passer sur le détail. C'est ici qu'il va falloir jouer sur la valeur de la variable tampon afin de la remettre à vrai pour que, dès que la souris retournera sur le bouton, on puisse considérer qu'il faut modifier la visibilité du bouton.
D'où le code moseMove sur la section détail :
Private Sub Détail_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single)
AModifier = True
End Sub
|
Comme la variable AModifier est disponible pour 2 procédures distinctes, il faut que sa portée soit sur le module. Il s'agit de la déclarer en tête de module.
Private AModifier As Boolean
|
|
| auteur : Bidou | Function ExistControl (ByVal frm As Form, ByVal ctlName As String ) As Boolean
On Error Resume Next
If IsError (frm. Controls (ctlName). Tag ) Then
Err . Clear
Exit Function
Else
ExistControl = True
End If
End Function
|
|
| auteur : Maxence HUBICHE | Dans votre formulaire vous mettez une étiquette (lblInfos) contenant le texte voulu.
Mettre la propriété minuterie de l'onglet événements à 500 (ms).
En regardant bien les propriétés des évènements du Formulaire, vous trouverez la propriétés SurMinuterie.
Dedans, vous choisissez [Procédure évènementielle], vous cliquez sur les 3... à droite et vous tombez dans la procédure :
Private sub Form_Timer ()
lblInfos. Caption = Mid (lblInfos. Caption , 2 ) & Left (lblInfos. Caption , 1 )
End Sub
|
|
| auteur : gripoil | Tout le pas à pas qui suit concerne la source du SF.
:arrow Créer un champ Ordre (type numérique) qui servira de tri. Il n'est pas obligatoire qu'il soit physiquement présent dans le formulaire.
_ Code sur Doubleclic (le double clic concerne le sélecteur du SF qui doit donc être affiché) :
Private Sub Form_DblClick (Cancel As Integer)
Dim Compteur As Integer
Application. Echo False
Compteur = Me![Ordre]
DoCmd. GoToRecord , , acNewRec
Me![Ordre]. Value = Compteur + 1
Me. Requery
Numerotation_Click
Application. Echo True
End Sub
|
et
Pour exécuter ce code il faut activer la référence : Microsoft DAO 3.x Object Library Private Sub Numerotation_Click ()
Dim rcs As DAO. Recordset
Dim i As Integer
Set rcs = Me. RecordsetClone
i = 1
rcs. MoveFirst
While Not rcs. EOF
rcs. Edit
rcs!Ordre = i
rcs. Update
rcs. MoveNext
i = i + 2
Wend
rcs. Close
Set rcs = Nothing
Me. Requery
End Sub
|
_ Pour finir, sur le formulaire principal, événement sur Activation :
Private Sub Form_Current ()
Me. NomDuSousFormulaire . Form . OrderBy = " Ordre "
Me. NomDuSousFormulaire . Form . OrderByOn = True
End Sub
|
Ce qui active le tri sur le champ Ordre.
|
lien : Définition et manipulation de données avec DAO par Tofalu
lien : Comment déclarer une référence dans MS-Access ?
|
| auteur : sellig | La touche clavier F2 permet de passer en mode Edit dans un champ. vous pouvez l'utiliser en entrant dans votre champ l'instruction.
|
| auteur : Etienne Bar | Il faut que le test porte sur un contrôle dépendant que l'utilisateur doit obligatoirement remplir. Le formulaire concerné doit bien sûr être un formulaire lié.
If IsNull (Me. MonControleObligatoire . oldvalue ) Then
Else
End If
|
|
| auteur : Maxence HUBICHE | Positionner le curseur à gauche :
Private sub MonTXT_Click ()
MonTXT. Selstart = 0
End sub
|
Sélectionner le contenu :
Private sub MonTXT_Click ()
MonTXT. SelStart = 0
MonTXT. SelLength = Len (MonTXT)
End sub
|
|
| auteur : Morsi | Une position est défini par 4 coordonnées, droite, gauche, bas et haut. Nous allons donc créer un type POSITION pour nos 4 coordonnées.Dans la section déclarations copier et coller ce code: Private Type rect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
|
Pour déterminer la position de notre formulaire actif, nous ferons appel à une API GetWindowRect. Toujours dans la section déclaration ajouter ce code: Private Declare Function GetWindowRect Lib " User32 " _
(ByVal hwnd As Long, lpRect As RECT) As Long
|
Dans un formulaire, ajouter un bouton dont le code de l'évenement sur clic est le suivant:
Private Sub Position_Click ()
Dim Position As rect
Call GetWindowRect (Me. hwnd , Position)
With Position
MsgBox " Position de mon formulaire " & vbCrLf & " Gauche: " & . Left & vbCrLf _
& " Droite: " & . Right & vbCrLf & " Inférieur: " & . Bottom & vbCrLf & " Supérieur: " & . Top
End With
End Sub
|
La position du formulaire est donnée en pixel. Certainement vous vous dites ce que vous pourriez faire avec les positions du formulaire ?
justement c'est très utile si vous voulez "figer" un formulaire ou changer l'emplacement sur l'écran bien sûr d'un formulaire, il suffit pour ça
d'utiliser la fonction MoveSize de DoCmd et dont la traduction est DéplacerDimensionner. Un exemple d'utilisation de cette méthode: DoCmd. MoveSize 2440 , 2400 , , 4000
|
Attention, cette propriété prend les coordonnées en twips qui correspond à 1/20 de points. Pour plus d'informations et
d'exemples sur tout ces fonctions rendez vous sur l'aide d'Access.
|
| auteur : Tofalu | Il faut définir la propriété Affichage modale du formulaire à Oui.
L'utilisateur ne pourra ainsi accéder à un autre formulaire tant qu'il n'aura pas fermé celui-ci.
|
| auteur : Tofalu | Il n'est pas possible de le faire directement.
Cependant, voici comment obtenir un résultat similaire :
- [*]Première solution : Tu remplaces les zones de textes par des zones de listes modifiables qui elles adoptent ce comportement par défaut.
- [*]Deuxième solution : Par DAO, tu ouvres un recordset sur ta table, tu sélectionne le premier enregistrement et tu le mets dans la zone de texte si c'est le seul. Sinon, tu laisses l'utilisateur continuer à taper.
|
| auteur : Maxence HUBICHE | Programmez les deux événements Sur Entrée et Sur Sortie.
Sur entrée, le format de police change en plus gros.
Sur sortie, le format de police change en plus petit.
Exemple ici pour une zone de texte se nommant "Texte1" : Private Sub Texte1_Enter ()
Texte1. FontSize = 18
End Sub
Private Sub Texte1_Exit (Cancel As Integer)
Texte1. FontSize = 8
End Sub
|
A noter que depuis Access 2000 il est possible d'utiliser la mise en forme conditionnelle et plus particulièrement ici, une condition de type Champ Actif (cf. lien ci-dessous).
|
lien : La mise en forme conditionnelle sous Access 2000/XP/2003
|
| auteur : Team Access | Ouvrir un formulaire grâce à la ligne de code : DoCmd. OpenForm nomformulaire, , , , , , Me. Name
|
Dans le formulaire que vous venez d'ouvrir, vous pouvez alors suivant le formulaire appelant (dont le nom est contenu dans OpenArgs) exécuter un code différent : Select Case OpenArgs
Case " frmX "
MsgBbox " frmX= " & openArgs
Case " frmY " :
MsgBox " frmY= " & openArgs
End Select
|
|
| auteur : FRED.G | Vous pouvez vous servir du résultat renvoyé par votre procédure de recherche multicritère pour créer ou modifier une requêtre enregistrée dans votre base de donnée.
La première étape consiste à récupérer l'instruction SQL définie par la procédure Sub RefreshQuery(). Vous avez plusieurs possibilités pour cela.
La première qui vient à l'esprit est de rendre la variable String SQL disponible aux autres procédures du module du formulaire de recherche.
Au lieu de faire : Private Sub RefreshQuery ()
Dim SQL As String
Dim SQLWhere As String
. . .
End Sub
|
Faire : Dim SQL As String
Private Sub RefreshQuery ()
Dim SQLWhere As String
. . .
End Sub
|
Une autre solution pour éviter d'étendre la portée de la variable SQL est de récupérer directement l'instruction SQL dans la propriété RowSource de la la liste mise à jour par RefreshQuery(). Dans ce cas inutile de modifier le code du tutoriel.
La seconde étape consiste à utiliser du code DAO pour créer ou mettre à jour la requête grâce à l'objet DAO.Querydef.
Exemple pour deux boutons de commande à placer dans le formulaire de recherche : Private Sub btnCréerRequête_Click ()
Dim NomQDF as String
NomQDF = InputBox (" Entrer un nom pour la recherche en cours: " )
if NomQDF = " " then
msgbox " Vous n'avez pas indiqué de nom valide pour la requête. "
exit sub
end if
CurrentDb. CreateQueryDef NomQDF, SQL
End Sub
|
Private Sub btnModifierRequête_Click ()
CurrentDb. QueryDefs (" NomRequête " ). SQL = SQL
End Sub
|
Les codes sont donnés à titre d'exemple sans gestion des erreurs.
|
| auteur : shwin |
Parfois lorsque l'on cache un formulaire, lorsque celui-ci réapparaît les gifs le composants restent inanimés.
La solution est de redéfinir la propriété filename du gif pour le faire repartir :
gif. filename = gif. filename
|
|
| auteur : Arkham46 |
Quand vous tentez d'associer une requête contenant un paramètre à un graphique, vous obtenez l'erreur :
"Le moteur de base de données Microsoft ne reconnaît pas '[Forms]![NomDuFormulaire]![NomDuChamp]' en tant que nom de champ ou expression correcte"...
Pour y remédier, il faut définir le paramètre dans la requête :
- en mode modification de la requête, dans le menu : Requête --> Paramètres :
Mettre le nom complet du paramètre :[Forms]![NomDuFormulaire]![NomDuChamp] et son type de donnée
- ce qui donne en SQL (pour un entier par exemple) :
PARAMETERS [ Forms ] ![ NomDuFormulaire ] ![ NomDuChamp ] Short;
|
|
lien : Comment définir un type pour les paramètres d'une requête ?
lien : Types des champs
|
| auteur : Cafeine | Ce code vous permet de récupérer le nombre d'enregistrement d'un sous formulaire : Forms (" Mon Form Principal " ). Controls (" Mon Sous-formulaire " ). Form . RecordsetClone . RecordCount
|
|
| auteur : Starec | Ce code vous permet de savoir si toutes les combobox ont été renseignées, et cela vous place dans le premier combobox non renseigné : Sub TestCtrl ()
Dim Ctrl As control
For Each Ctrl In Me. Controls
If TypeOf Ctrl Is ComboBox Then
If Ctrl. Value = " " Or IsNull (Ctrl. Value ) Then
MsgBox " Toutes les listes doivent avoir une information " , vbOKOnly + vbExclamation , " Sélection "
Ctrl. SetFocus
Exit Sub
End If
End If
Next Ctrl
End Sub
|
Pour les texbox, il vous faut changer la ligne : If TypeOf Ctrl Is ComboBox Then
|
par If TypeOf Ctrl Is TextBox Then
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|