Probleme de codage VBA Access

pierrot63270

XLDnaute Nouveau
Bonjour à tous,

Je viens vers vous car j'ai des soucis avec un code VBA.

J'ai réalisé (enfin je tente) de réaliser un formulaire multicritère (très fortement inspiré de caféine) pour effectuer des recherches dans un formulaire de quelques 600 enregistrements mais qui est amené à évoluer fortement dans les 3 prochaines années.

Je vous joins la base de données. En fait, j'ai des listes déroulantes à partir desquelles je peux choisir mes critères de sélection et les bloquer pour les filtrer avec des cases à cocher. Le problème, c'est que je n'arrive pas à trouver où ça coince dans mon code, vu que je parviens pas à ouvrir le formulaire général SuiviIndicateur. (erreur 3464). Je vous joins également toutes les lignes de codes dans un fichier txt.

Merci par avance à ceux qui voudront se pencher sur mon problème.

Pierrot63270
 

Pièces jointes

  • recherche multi-critères.zip
    225.8 KB · Affichages: 121
  • recherche multi-critères.zip
    225.8 KB · Affichages: 125
  • recherche multi-critères.zip
    225.8 KB · Affichages: 127

pierrot63270

XLDnaute Nouveau
Re : Probleme de codage VBA Access

Bonjour BrunoM45,

oui désolé, j'ai été un peu vite.:rolleyes:
Donc à nouveau la base de données et le même fichier .txt, mais cette fois-ci avec une table "en dur".

A+ et merci d'avance
 

Pièces jointes

  • recherche multi-critères.zip
    272.3 KB · Affichages: 132
  • recherche multi-critères.zip
    272.3 KB · Affichages: 126
  • recherche multi-critères.zip
    272.3 KB · Affichages: 129
C

Compte Supprimé 979

Guest
Re : Probleme de codage VBA Access

Salut,

Le problème, c'est que je n'arrive pas à trouver où ça coince dans mon code, vu que je parviens pas à ouvrir le formulaire général SuiviIndicateur.
Moi j'arrive très bien à l'ouvrir !?


Pour le filtrage de tes données j'aurais fais l'inverse
Toutes les cases à cocher, décochées et la liste déroulante s'affiche lorsque tu coches
Voici le code
Code:
Option Compare Database
Private Sub chkAxe_Click()
  If Me.chkAxe Then
    Me.cmbRechAxe.Visible = True
  Else
    Me.cmbRechAxe.Visible = False
  End If
  RefreshQuery
End Sub

Private Sub chkMO_Click()
  If Me.chkMO Then
    Me.cmbRechMO.Visible = True
  Else
    Me.cmbRechMO.Visible = False
  End If
  RefreshQuery
End Sub
Private Sub chkPresage_Click()
  If Me.chkPresage Then
    Me.cmbRechPresage.Visible = True
  Else
    Me.cmbRechPresage.Visible = False
  End If
  RefreshQuery
End Sub
Private Sub chkAnnee_Click()
  If Me.chkAnnee Then
    Me.cmbRechAnnee.Visible = True
  Else
    Me.cmbRechAnnee.Visible = False
  End If
  RefreshQuery
End Sub
Private Sub chkMesure_Click()
  If Me.chkMesure Then
    Me.cmbRechMesure.Visible = True
  Else
    Me.cmbRechMesure.Visible = False
  End If
  RefreshQuery
End Sub

Private Sub cmbRechAnnee_Change()
  RefreshQuery
End Sub
Private Sub cmbRechAxe_Change()
  RefreshQuery
End Sub
Private Sub cmbRechMesure_Change()
  RefreshQuery
End Sub
Private Sub cmbRechMO_BeforeUpdate(Cancel As Integer)
  RefreshQuery
End Sub
Private Sub cmbRechMO_Change()
  RefreshQuery
End Sub
Private Sub cmbRechPresage_BeforeUpdate(Cancel As Integer)
  RefreshQuery
End Sub
Private Sub cmbRechPresage_Change()
  RefreshQuery
End Sub
Private Sub Form_Load()
  Dim ctl As Control
  For Each ctl In Me.Controls
    Select Case Left(ctl.Name, 3)
    Case "chk"
      ctl.Value = 0  ' -1
    Case "lbl"
      ctl.Caption = "- * - * -"
    Case "txt"
      ctl.Visible = False
      ctl.Value = ""
    Case "cmb"
      ctl.Visible = False
    End Select
  Next ctl
  Me.lstResults.RowSource = "SELECT Presage, MO, Axe, Mesure,Annee FROM BDP;"
  Me.lstResults.Requery
End Sub
Private Sub RefreshQuery()
  Dim SQL As String
  Dim SQLWhere As String
  SQL = "SELECT Presage, MO, Axe, Mesure,Annee FROM BDP Where BDP!Presage <> null "
  If Me.chkAxe Then
    SQL = SQL & "And BDP!Axe like '*" & Me.cmbRechAxe & "*' "
  End If
  If Me.chkMO Then
    SQL = SQL & "And BDP!MO = '" & Me.cmbRechMO & "' "
  End If
  If Me.chkAnnee Then
    SQL = SQL & "And BDP!Annee like '*" & Me.cmbRechAnnee & "*' "
  End If
  If Me.chkMesure Then
    SQL = SQL & "And BDP!Mesure like '*" & Me.cmbRechMesure & "*' "
  End If
  If Me.chkPresage Then
    SQL = SQL & "And BDP!Presage = '" & Me.cmbRechPresage & "' "
  End If
  SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1))
  SQL = SQL & ";"
  Me.lblStats.Caption = DCount("*", "BDP", SQLWhere) & " / " & DCount("*", "BDP")
  Me.lstResults.RowSource = SQL
  Me.lstResults.Requery
End Sub
Private Sub lstResults_DblClick(Cancel As Integer)
  DoCmd.OpenForm "SuiviIndicateur", acNormal, , "[Presage] = " & Me.lstResults
End Sub
Private Sub cmbRechAxe_BeforeUpdate(Cancel As Integer)
  RefreshQuery
End Sub
Private Sub cmbRechAnnee_BeforeUpdate(Cancel As Integer)
  RefreshQuery
End Sub
Private Sub cmbRechMesure_BeforeUpdate(Cancel As Integer)
  RefreshQuery
End Sub

Dis nous ;)

A+
 
Dernière modification par un modérateur:

pierrot63270

XLDnaute Nouveau
Re : Probleme de codage VBA Access

Salut,

merci pour le code. C'est vrai que le cocher/décocher dans l'autre sens est plus logique... ce qui n'est pas forcément toujours mon cas !

pour l'ouverture du formulaire SuiviIndicateur, j'arrive aussi parfaitement à l'ouvrir seul. Le souci c'est :
-quand je fait une recherche par le formulaire frmrecherche, le résultat s'affiche dans la liste en bas de formulaire. Jusque-là tout va bien.;)

- lorsque je double-clique sur la ligne voulue, c'est à ce moment que l'erreur 3464 apparaît. :mad:
A priori, c'est la ligne "DoCmd.OpenForm "SuiviIndicateur", acNormal, , "[Presage] = " & Me.lstResults" du code qui est mal écrite.:confused:

Je pense aussi que c'est lié à la ligne :
"DoCmd.OpenForm "SuiviIndicateur", acNormal, , "[Presage] = " & Me.lstResults" et éventuellement aussi dans les propriétés de SuiviIndicateur au niveau du Filtre à appliquer.

Merci de ton aide et merci pour le code logique.

A+
 
C

Compte Supprimé 979

Guest
Re : Probleme de codage VBA Access

Re,

Okkkkkk ... 2 choses
1) modifier ton code du double clique
Code:
Private Sub lstResults_DblClick(Cancel As Integer)
  DoCmd.OpenForm "SuiviIndicateur", acNormal, , "[Presage] =" & Chr(34) & Me.lstResults.Value & Chr(34)
End Sub

2) Supprimer la valeur dans "Filtre" de ton formulaire "SuiviIndicateur"

Et ça devrait tourner ;)

A+
 

pierrot63270

XLDnaute Nouveau
Re : Probleme de codage VBA Access

Bonjour,

désolé de ne pas avoir répondu plus tôt, j'ai été un peu pris hier. :p

Un très très très grand merci à toi BrunoM45 : ça fonctionne du tonnerre !:D

Autrement, petite question :confused:. J'ai commencé à faire du VBA depuis quelques temps, mais en reprenant des codes par ci par là. Aurais-tu des liens pour apprendre les bases, les expressions "récurrentes", un truc du style "le VBA pour les Nuls". J'aimerais bien comprendre le fonctionnement en commençant par le début ! au lieu repomper quasiment bêtement ce qui existe !

A moins que le SQL soit plus accessible, plus pratique ?

Merci encore pour tout
 
C

Compte Supprimé 979

Guest
Re : Probleme de codage VBA Access

Salut Pierrot63270,

Tu as plusieurs possibilités ;)
La FAQ et les didacticiels de ce forum
Questions les plus fréquentes (FAQ) et didacticiels

Sinon tu peux trouver pas mal d'information également ICI

Un bouquin sympa pour commencer : VBA pour Office pour les nuls

Pour moi SQL n'est pas forcément plus accessible, mais rien à voir avec un langage de programmation

A+
 

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette