Bonjour Stéphane, merci de continuer à nous offrir des cours et de nous partager vos connaissances pour cette nouvelle année 2024. C'est toujours très instructifs et bien expliqué 👍 Par contre après avoir suivi le cours, la fonction recherche fonctionne correctement mais après chaque frappe de caractères, le focus se fait sur le champ libellé "champfiltre" et non pas sur le champ libellé "Textefiltre", du coup il faut à chaque fois recliquer sur le champ libellé "Textefiltre" pour continuer la recherche, une idée de mon erreur ? en relisant le code de l'étiquette filtrer, je trouve un caractère + qui n'est pas conservé dans l'éditeur VBA le problème vient il de là ? Me.Filter = "[" & Me![champFiltre] & "]" & + "like '" & lettres & "*'"
11 місяців тому+1
Bonjour mon Cher barto107simpsons, très heureux de vous retrouver. Il est probable que vous ayez omis le code rendant le focus à cette zone de texte et replaçant le point d'insertion à la fin de la saisie : Me.texteFiltre.SetFocus SendKeys "{END}"
merci si je peux me permettre une remarque ce serait pratique d'avoir également la base corrigée téléchargeable sur votre site 😉dans mon cas je vais relire le code car j'ai bien cette instruction dans mon select case et également dans l'étiquette j'ai dû raté quelque chose
11 місяців тому+1
@@barto107simpsons6Oui je comprends mais vous savez, tout le code est donné dans le pas à pas détaillé sur le site. Ces instructions doivent être placées en fin de code.
@ J'ai le même souci que @barto107simpsons6 Pourtant, aucune erreur dans le code car je l'ai copié de votre site et les champs correspondent correspondent bien aux 2 champs de mon form. Je ne comprends pas d'où vient le problème. Lorsque je tape la 1ère lettre de la valeur recherchée, le focus se met sur l'objet suivant en fonction de l'ordre de tabulation. J'ai aussi remarqué que lorsque je supprime la valeur de mon champ textefiltre pour réencoder, la valeur précédente reste en mémoire (exemple : je tape CCC, je supprime, je tape H et il apparaît CCCH) même avec un me.requery Voici le code, il n'y a aucune erreur. Option Compare Database Dim lettres As String Private Sub Form_Load() Me.champfiltre.Value = "Type" Me.textefiltre.SetFocus End Sub Private Sub textefiltre_KeyUp(KeyCode As Integer, Shift As Integer) Dim i As Integer i = KeyCode Select Case i Case 8 If Len(lettres) = 1 Or Len(lettres) = 0 Then lettres = "" Else lettres = Left(lettres, Len(lettres) - 1) End If GoTo filtrer Case 37, 39 SendKeys "{END}" Case 32, 48 To 57, 65 To 90, 97 To 122 lettres = lettres & Chr(i) Me![textefiltre] = lettres GoTo filtrer End Select Exit Sub filtrer: If Len(lettres) = 0 Then Me.FilterOn = False Else Me.Filter = "[" & Me![champfiltre] & "]" & "like '" & lettres & "*'" Me.FilterOn = True End If Me.OrderBy = "[" & Me!champfiltre & "] " & "ASC" Me.OrderByOn = True Me.textefiltre.SetFocus SendKeys "{END}" End Sub
Bonsoir monsieur, j'ai un petit problème,je veux que chaque Num d'enregistrement soit lié a un médecin et que l'autre médecin n'a pas le droit d'accéder
11 місяців тому
Bonsoir Monsieur. Je ne sais pas si j'ai bien compris. Un petit code VBA vérifiant le num, s'il ne lui est pas attribué, doit lui empêcher d'accéder aux informations des autres.
Ton code ne fonctionne pas J'ai copié ton code mais le focus se met sur l'objet suivant par ordre de tabulation après avoir tapé un caractère. Je remarque aussi que lorsque je supprime la valeur que j'ai encodé dans le champ indépendant textefiltre et que je réencode, il me remet avant la lettre que je tape ce que j'ai tapé précédemment et que j'avais supprimé. Private Sub Form_Load() Me.champfiltre.Value = "Type" Me.textefiltre.SetFocus End Sub Private Sub textefiltre_KeyUp(KeyCode As Integer, Shift As Integer) Dim i As Integer i = KeyCode Select Case i Case 8 If Len(lettres) = 1 Or Len(lettres) = 0 Then lettres = "" Else lettres = Left(lettres, Len(lettres) - 1) End If GoTo filtrer Case 37, 39 SendKeys "{END}" Case 32, 48 To 57, 65 To 90, 97 To 122 lettres = lettres & Chr(i) Me![textefiltre] = lettres GoTo filtrer End Select Exit Sub filtrer: If Len(lettres) = 0 Then Me.FilterOn = False Else Me.Filter = "[" & Me![champfiltre] & "]" & "like '" & lettres & "*'" Me.FilterOn = True End If Me.OrderBy = "[" & Me!champfiltre & "] " & "ASC" Me.OrderByOn = True Me.textefiltre.SetFocus SendKeys "{END}" End Sub
9 місяців тому
Ce n'est pas normal car nous désignons explicitement le contrôle du formulaire par le code VBA ou alors vous avez un souci dans l'utilisation du SendKeys. A première vue, tout semble en ordre dans votre code mais il me faut vérifier plus attentivement.
@ Ton code est vraiment pas top avec cet horrible Sendkey et sauf gestionnaires d'erreurs, l'instruction GoTo est à bannir. Voici le code amélioré : Private Sub textefiltre_KeyPress(KeyAscii As Integer) Dim ControlText As String ControlText = textefiltre.Text & Chr(KeyAscii) Me.Filter = "[" & Me![champfiltre] & "] Like '" & ControlText & "*'" Me.FilterOn = True Me.OrderBy = "[" & Me!champfiltre & "]" Me.OrderByOn = True Me.textefiltre.SelStart = Len(ControlText) End Sub
Bonjour à vous Besoin d'aide urgemment J'ai mis un mot de passe sur ma base de données Access mais lorsque j'essaie de me connecter à la base, j'ai un message d'erreur : l'application est ouverte en mode exclusif ou utilisée par un autre utilisateur. Ci dessous Ma chaîne de connexion : "Provider= Microsoft.Ace.oledb.12.0; password=12344;User ID= admin; data source= " & Chemin Je code en VBA Merci à vous
11 місяців тому+1
Bonjour. Il est probable qu'une session ait mal été terminée expliquant ce message d'Access. Je vous suggère de couper toutes les instances d'Access ouvertes avec le gestionnaire de tâche et de recommencer.
@ merci pour la réponse. J'ai suivi à la lettre vos recommandations mais hélas, le même message: "impossible de démarrer l'application. Le fichier d'informations du groupe de travail est absent ou ouvert en mode exclusif par un autre utilisateur."
11 місяців тому
@@homelearning547 S'agit-il d'une base partagée ? Vous parlez de groupe de travail.
et avez-vous essayé de réparer la base en passant par le menu Outils de base de données et le bouton Compacter et réparer la base de données ?@@homelearning547
Bonjour Stéphane,
Merci.
Bonjour Alain.
Merci à vous.
Bonjour Stéphane, merci de continuer à nous offrir des cours et de nous partager vos connaissances pour cette nouvelle année 2024. C'est toujours très instructifs et bien expliqué 👍
Par contre après avoir suivi le cours, la fonction recherche fonctionne correctement mais après chaque frappe de caractères, le focus se fait sur le champ libellé "champfiltre" et non pas sur le champ libellé "Textefiltre", du coup il faut à chaque fois recliquer sur le champ libellé "Textefiltre" pour continuer la recherche, une idée de mon erreur ?
en relisant le code de l'étiquette filtrer, je trouve un caractère + qui n'est pas conservé dans l'éditeur VBA le problème vient il de là ?
Me.Filter = "[" & Me![champFiltre] & "]" & + "like '" & lettres & "*'"
Bonjour mon Cher barto107simpsons, très heureux de vous retrouver. Il est probable que vous ayez omis le code rendant le focus à cette zone de texte et replaçant le point d'insertion à la fin de la saisie :
Me.texteFiltre.SetFocus
SendKeys "{END}"
merci si je peux me permettre une remarque ce serait pratique d'avoir également la base corrigée téléchargeable sur votre site 😉dans mon cas je vais relire le code car j'ai bien cette instruction dans mon select case et également dans l'étiquette j'ai dû raté quelque chose
@@barto107simpsons6Oui je comprends mais vous savez, tout le code est donné dans le pas à pas détaillé sur le site. Ces instructions doivent être placées en fin de code.
@ J'ai le même souci que @barto107simpsons6
Pourtant, aucune erreur dans le code car je l'ai copié de votre site et les champs correspondent correspondent bien aux 2 champs de mon form.
Je ne comprends pas d'où vient le problème. Lorsque je tape la 1ère lettre de la valeur recherchée, le focus se met sur l'objet suivant en fonction de l'ordre de tabulation.
J'ai aussi remarqué que lorsque je supprime la valeur de mon champ textefiltre pour réencoder, la valeur précédente reste en mémoire (exemple : je tape CCC, je supprime, je tape H et il apparaît CCCH) même avec un me.requery
Voici le code, il n'y a aucune erreur.
Option Compare Database
Dim lettres As String
Private Sub Form_Load()
Me.champfiltre.Value = "Type"
Me.textefiltre.SetFocus
End Sub
Private Sub textefiltre_KeyUp(KeyCode As Integer, Shift As Integer)
Dim i As Integer
i = KeyCode
Select Case i
Case 8
If Len(lettres) = 1 Or Len(lettres) = 0 Then
lettres = ""
Else
lettres = Left(lettres, Len(lettres) - 1)
End If
GoTo filtrer
Case 37, 39
SendKeys "{END}"
Case 32, 48 To 57, 65 To 90, 97 To 122
lettres = lettres & Chr(i)
Me![textefiltre] = lettres
GoTo filtrer
End Select
Exit Sub
filtrer:
If Len(lettres) = 0 Then
Me.FilterOn = False
Else
Me.Filter = "[" & Me![champfiltre] & "]" & "like '" & lettres & "*'"
Me.FilterOn = True
End If
Me.OrderBy = "[" & Me!champfiltre & "] " & "ASC"
Me.OrderByOn = True
Me.textefiltre.SetFocus
SendKeys "{END}"
End Sub
Bonsoir monsieur, j'ai un petit problème,je veux que chaque Num d'enregistrement soit lié a un médecin et que l'autre médecin n'a pas le droit d'accéder
Bonsoir Monsieur.
Je ne sais pas si j'ai bien compris.
Un petit code VBA vérifiant le num, s'il ne lui est pas attribué, doit lui empêcher d'accéder aux informations des autres.
Ton code ne fonctionne pas
J'ai copié ton code mais le focus se met sur l'objet suivant par ordre de tabulation après avoir tapé un caractère.
Je remarque aussi que lorsque je supprime la valeur que j'ai encodé dans le champ indépendant textefiltre et que je réencode, il me remet avant la lettre que je tape ce que j'ai tapé précédemment et que j'avais supprimé.
Private Sub Form_Load()
Me.champfiltre.Value = "Type"
Me.textefiltre.SetFocus
End Sub
Private Sub textefiltre_KeyUp(KeyCode As Integer, Shift As Integer)
Dim i As Integer
i = KeyCode
Select Case i
Case 8
If Len(lettres) = 1 Or Len(lettres) = 0 Then
lettres = ""
Else
lettres = Left(lettres, Len(lettres) - 1)
End If
GoTo filtrer
Case 37, 39
SendKeys "{END}"
Case 32, 48 To 57, 65 To 90, 97 To 122
lettres = lettres & Chr(i)
Me![textefiltre] = lettres
GoTo filtrer
End Select
Exit Sub
filtrer:
If Len(lettres) = 0 Then
Me.FilterOn = False
Else
Me.Filter = "[" & Me![champfiltre] & "]" & "like '" & lettres & "*'"
Me.FilterOn = True
End If
Me.OrderBy = "[" & Me!champfiltre & "] " & "ASC"
Me.OrderByOn = True
Me.textefiltre.SetFocus
SendKeys "{END}"
End Sub
Ce n'est pas normal car nous désignons explicitement le contrôle du formulaire par le code VBA ou alors vous avez un souci dans l'utilisation du SendKeys. A première vue, tout semble en ordre dans votre code mais il me faut vérifier plus attentivement.
@ Ton code est vraiment pas top avec cet horrible Sendkey et sauf gestionnaires d'erreurs, l'instruction GoTo est à bannir.
Voici le code amélioré :
Private Sub textefiltre_KeyPress(KeyAscii As Integer)
Dim ControlText As String
ControlText = textefiltre.Text & Chr(KeyAscii)
Me.Filter = "[" & Me![champfiltre] & "] Like '" & ControlText & "*'"
Me.FilterOn = True
Me.OrderBy = "[" & Me!champfiltre & "]"
Me.OrderByOn = True
Me.textefiltre.SelStart = Len(ControlText)
End Sub
Bonjour à vous
Besoin d'aide urgemment
J'ai mis un mot de passe sur ma base de données Access mais lorsque j'essaie de me connecter à la base, j'ai un message d'erreur : l'application est ouverte en mode exclusif ou utilisée par un autre utilisateur. Ci dessous Ma chaîne de connexion : "Provider= Microsoft.Ace.oledb.12.0; password=12344;User ID= admin; data source= " & Chemin
Je code en VBA
Merci à vous
Bonjour. Il est probable qu'une session ait mal été terminée expliquant ce message d'Access. Je vous suggère de couper toutes les instances d'Access ouvertes avec le gestionnaire de tâche et de recommencer.
@ merci pour la réponse. J'ai suivi à la lettre vos recommandations mais hélas, le même message: "impossible de démarrer l'application. Le fichier d'informations du groupe de travail est absent ou ouvert en mode exclusif par un autre utilisateur."
@@homelearning547 S'agit-il d'une base partagée ? Vous parlez de groupe de travail.
@ non... C'est une base non partagée mais c'est le message que j'ai reçu lors du débogage
et avez-vous essayé de réparer la base en passant par le menu Outils de base de données et le bouton Compacter et réparer la base de données ?@@homelearning547