access erreur de compilation

  • Auteur de la discussion elisatya
  • Date de début

elisatya

Nouveau membre
Bonjour,

j'ai 6 critères de recherche sur un formulaire que l'on active via une checkbox dt voici le code :

Private Sub chktype_Click()
If Me.chktype Then
Me.cmbtype.Visible = False
Else
Me.cmbtype.Visible = True
End If
refreshquery
End Sub

Et voici le code de ma liste de resultats :
Private Sub refreshquery()
Dim sql As String
Dim sqlwhere As String

sql = "select nomtypeproduit from types produit, nomdistributeur from distributeurs, nomfabricant from fabricants, normeproduit from produits, PNproduit from produits, nomassembleur from assembleurs"
If Me.chktype Then
sql = sql & "and types produit!nomtypeproduit = '" & Me.cmbtype & "' "
End If
If Me.chkdistributeur Then
sql = sql & "and distributeurs!nomdistributeur = '" & Me.cmbdistributeur & "' "
End If
If Me.chkfournisseur Then
sql = sql & "and fournisseurs!nomfournisseur = '" & Me.cmbfournisseur & "' "
End If
If Me.chkassembleur Then
sql = sql & "and assembleurs!nomassembleur = '" & Me.cmbassembleur & "' "
End If
If Me.chkpn Then
sql = sql & "and produits!PNproduit like '*" & Me.txtpn & "*' "
End If
If Me.chknorme Then
sql = sql & "and produits!normeproduit like '*" & Me.txtnorme & "*' "
End If

sqlwhere = Trim(Right(sql, Len(sql) - InStr(sql, "where") - Len("where") + 1))
sql = sql & ";"

melistresultat.RowSource = sql
Me.listresultat.Requery

End Sub

Au moment ou je clique sur une chekbox le message erreur de compilation apparait.

Pouvez vous m'aider ?!

Merci

Elisa
 

zeb

Modérateur
Vous devez être connecté pour voir les images.


Tu ne nous donnes pas le message d'erreur exact.
Tu ne nous dit pas à quelle ligne il y a une erreur.
 

elisatya

Nouveau membre
ok desolée !
la ligne surlignée pour l'erreur est : Private Sub refreshquery()
Merci !


[cpp]Private Sub chktype_Click()
If Me.chktype Then
Me.cmbtype.Visible = False
Else
Me.cmbtype.Visible = True
End If
refreshquery
End Sub[/cpp]

Et voici le code de ma liste de resultats :

[cpp]Private Sub refreshquery()
Dim sql As String
Dim sqlwhere As String

sql = "select nomtypeproduit from types produit, nomdistributeur from distributeurs, nomfabricant from fabricants, normeproduit from produits, PNproduit from produits, nomassembleur from assembleurs"
If Me.chktype Then
sql = sql & "and types produit!nomtypeproduit = '" & Me.cmbtype & "' "
End If
If Me.chkdistributeur Then
sql = sql & "and distributeurs!nomdistributeur = '" & Me.cmbdistributeur & "' "
End If
If Me.chkfournisseur Then
sql = sql & "and fournisseurs!nomfournisseur = '" & Me.cmbfournisseur & "' "
End If
If Me.chkassembleur Then
sql = sql & "and assembleurs!nomassembleur = '" & Me.cmbassembleur & "' "
End If
If Me.chkpn Then
sql = sql & "and produits!PNproduit like '*" & Me.txtpn & "*' "
End If
If Me.chknorme Then
sql = sql & "and produits!normeproduit like '*" & Me.txtnorme & "*' "
End If

sqlwhere = Trim(Right(sql, Len(sql) - InStr(sql, "where" ) - Len("where" ) + 1))
sql = sql & ";"

melistresultat.RowSource = sql
Me.listresultat.Requery

End Sub[/cpp]

 

elisatya

Nouveau membre
encore désolée j'ai oublie le message exact d'erreur :

Erreur de compilation memebre de méthode ou de donnée introuvable

Voila !

merci pour votre réacitvité !
 

zeb

Modérateur
Ligne 28, c'est une coquille ou c'est écrit comme ça dans ton programme ?
J'ose espérer que tu as mis l'Option Explicit dans ton module.
 

elisatya

Nouveau membre
Ligne 28, c'est une coquille ou c'est écrit comme ça dans ton programme ?
J'ose espérer que tu as mis l'Option Explicit dans ton module.

Euh ... :sarcastic: je fais un peu de bricolage sous access en fait ! Et au bout du comtpe ca marche toujours ! Mais là... j'avoue, je me sens un peu dépassée !
Le code je l'ai copié sur un site internet et adapté à mon projet !

L'option explicit ne me dit rien du tout par contre !

Merci bcp pour votre aide !

Forum efficace et bien géré : félicitations !

Elisa
 

zeb

Modérateur
L'option explicit ne me dit rien du tout par contre !
:fou:
Mais pourquoi cette option n'est-elle pas activée par défaut :pfff:
Microsoft à la lanterne !!!!!!

[strike]Et ton problème résolu ou pas ?[/strike]
Ok. Mais c'était quoi le problème ?
 

hoegarden31

Expert
je sent que je vais me gronder par zeb mais je le dit quand meme :sweat: :
moi perso j'aime pas l'option explicit car il faut alors declarer tout les variables meme ceux des for c nul :(
 

zeb

Modérateur
:(
hoegarden, connais-tu d'autres langages de programmation ?

Déclarer les variables est une façon de programmer propre.
Et VB permet tellement d'être sale que cette option me semble indispensable.
Je ne vais pas te gronder, non, mais j'aimerais que tu y réfléchisse quand même. Et que te coûte de mettre une ligne Dim par rapport à 3 heures de débogage parce que tu as fais une faute de frappe que tu ne vois pas, même en te relisant !?
 

hoegarden31

Expert
oui je connaits d'autres langages et il y a un autre probleme en mettent l'option explicite quand on ecrit
Code:
Cells(4,5)
il retourne un integer et sans un string (enfin je crois vu que j'avais fais mon programme vu dans l'autre topic sans et sa marche niquel et avec l'option explicite j'etais obliger de mettre
Code:
CStr(Cells(4,5))
)
 

zeb

Modérateur
Non. Les variables non déclarées sont de type variant. Donc elle acceptent n'importe quoi.

Ce n'est pas Cells(4, 5) mais Cells(4, 5).Text ou Cells(4, 5).Value qu'il faudrait écrire.

Refais voir ce code.
 

hoegarden31

Expert
ben le voici
Code:
jaar = Left(dtdate, InStr(dtdate, ".") - 1) 'ex : 7
week = Mid(dtdate, InStr(dtdate, ".") + 1) ' ex : 12
' Kolom zoeken
For i = K_START_GRAPH To K_END_GRAPH
    If "0" & Cells(LINE_YEAR, i).Value = jaar Then
       If Cells(LINE_WEEK, i).Text = week Then
            ' juiste kolom gevonden
            GetPosition = i
            Exit Function
       End If
    End If
 Next i
il y a un autre probleme :
avec la variable jaar il le met en string et la variable week il le met en autre chose que string donc cela doit etre comme tu l'a dis :
Les variables non déclarées sont de type variant. Donc elle acceptent n'importe quoi.
 

hoegarden31

Expert
j'ai oublier de presicer que ces 2 variables je les ai declarer en Long
 

zeb

Modérateur
Je ne vois pas les dim :whistle:
Et où est le CStr ?

Ligne 1, c'est la que tu dois mettre
Code:
Dim annee As Integer
annee = CInt(Left(dtdate, InStr(dtdate, "." ) - 1))
 

hoegarden31

Expert
ok mais c pas sa le probleme lol regarde avant j'avais sa :
Code:
Function GetPosition(dtdate As String) As Long
Dim max As Long
Dim week As Long
Dim jaar   As Long
max = Range("IV" & LINE_YEAR).End(xlUp).Column 'return the number of the last column
'test of er een datum in de cel staat
If Len(dtdate) = 5 And _
   IsNumeric(Mid(dtdate, 1, 1)) And _
   IsNumeric(Mid(dtdate, 2, 1)) And _
   Mid(dtdate, 3, 1) = "." And _
   IsNumeric(Mid(dtdate, 4, 1)) And _
   IsNumeric(Mid(dtdate, 5, 1)) Then
Else
  Exit Function
End If
GetPosition = -1
' Jaar en Week uit datum halen
jaar = Left(dtdate, InStr(dtdate, ".") - 1) 'ex : 7
week = Mid(dtdate, InStr(dtdate, ".") + 1) ' ex : 12
' Kolom zoeken
For i = K_START_GRAPH To max
    If Cells(LINE_YEAR, i) = jaar Then
       If Cells(LINE_WEEK, i) = week Then
            ' juiste kolom gevonden
            GetPosition = i
            Exit Function
       End If
    End If
 Next i
End Function
et sa marche sans probleme
puis j'ai essayer avec option explicite et sa marche plus pourquoi :??:
 

hoegarden31

Expert
lol non c bon dsl c une erreur de ma par j'ai mis
Code:
Dim annee,i As Long
alors qu'il faut mettre
Code:
Dim annee As Long, i As Long
je suis 1000 fois desoler
 

Freeman23

Expert
Des problèmes de type de données...

Ici Left renvoie un type variant que tu affectes à un long...
Code:
jaar = Left(dtdate, InStr(dtdate, "." ) - 1) 'ex : 7
Ou encore ici, tu compares un long à une string.
Code:
Cells(LINE_YEAR, i) = jaar

le problème c'est que VBA convertit tout seul une partie des variables mais parfois il a besoin que tu précises le type avec des fonctions de conversions.
 

hoegarden31

Expert
lol je ne crois pas car si je parcours mon programme pas a pas je constate que
Code:
Cells(LINE_YEAR, i)
n'est pas de type string donc c'est ce que je veux
 

elisatya

Nouveau membre
L'option explicit ne me dit rien du tout par contre !
:fou:
Mais pourquoi cette option n'est-elle pas activée par défaut :pfff:
Microsoft à la lanterne !!!!!!

[strike]Et ton problème résolu ou pas ?[/strike]
Ok. Mais c'était quoi le problème ?

Be le probleme etait que je m'etais trompe de mot ... fournisseur à la place de distributeur :sweat: lol

Merci qd meme !

Il se peut que je revienne pas mal de fois sur le forum je pense !

Elisa
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 848
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut