Se connecter avec
S'enregistrer | Connectez-vous

access erreur de compilation

Dernière réponse : dans Programmation

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

Autres pages sur : access erreur compilation

Lassé par la pub ? Créez un compte

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


  1. Private Sub chktype_Click()
  2. If Me.chktype Then
  3. Me.cmbtype.Visible = False
  4. Else
  5. Me.cmbtype.Visible = True
  6. End If
  7. refreshquery
  8. End Sub


Et voici le code de ma liste de resultats :

  1. Private Sub refreshquery()
  2. Dim sql As String
  3. Dim sqlwhere As String
  4.  
  5. sql = "select nomtypeproduit from types produit, nomdistributeur from distributeurs, nomfabricant from fabricants, normeproduit from produits, PNproduit from produits, nomassembleur from assembleurs"
  6. If Me.chktype Then
  7. sql = sql & "and types produit!nomtypeproduit = '" & Me.cmbtype & "' "
  8. End If
  9. If Me.chkdistributeur Then
  10. sql = sql & "and distributeurs!nomdistributeur = '" & Me.cmbdistributeur & "' "
  11. End If
  12. If Me.chkfournisseur Then
  13. sql = sql & "and fournisseurs!nomfournisseur = '" & Me.cmbfournisseur & "' "
  14. End If
  15. If Me.chkassembleur Then
  16. sql = sql & "and assembleurs!nomassembleur = '" & Me.cmbassembleur & "' "
  17. End If
  18. If Me.chkpn Then
  19. sql = sql & "and produits!PNproduit like '*" & Me.txtpn & "*' "
  20. End If
  21. If Me.chknorme Then
  22. sql = sql & "and produits!normeproduit like '*" & Me.txtnorme & "*' "
  23. End If
  24.  
  25. sqlwhere = Trim(Right(sql, Len(sql) - InStr(sql, "where" ) - Len("where" ) + 1))
  26. sql = sql & ";"
  27.  
  28. melistresultat.RowSource = sql
  29. Me.listresultat.Requery
  30.  
  31. End Sub


Citation :
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
Expert Programmation

Citation :
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 !!!!!!

Et ton problème résolu ou pas ?
Ok. Mais c'était quoi le problème ?
Expert Programmation

:( 
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 !?

oui je connaits d'autres langages et il y a un autre probleme en mettent l'option explicite quand on ecrit
  1. 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
  1. CStr(Cells(4,5))
)
Expert Programmation

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.

ben le voici
  1. jaar = Left(dtdate, InStr(dtdate, ".") - 1) 'ex : 7
  2. week = Mid(dtdate, InStr(dtdate, ".") + 1) ' ex : 12
  3. ' Kolom zoeken
  4. For i = K_START_GRAPH To K_END_GRAPH
  5. If "0" & Cells(LINE_YEAR, i).Value = jaar Then
  6. If Cells(LINE_WEEK, i).Text = week Then
  7. ' juiste kolom gevonden
  8. GetPosition = i
  9. Exit Function
  10. End If
  11. End If
  12. 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 :
Citation :
Les variables non déclarées sont de type variant. Donc elle acceptent n'importe quoi.

ok mais c pas sa le probleme lol regarde avant j'avais sa :
  1. Function GetPosition(dtdate As String) As Long
  2. Dim max As Long
  3. Dim week As Long
  4. Dim jaar As Long
  5. max = Range("IV" & LINE_YEAR).End(xlUp).Column 'return the number of the last column
  6. 'test of er een datum in de cel staat
  7. If Len(dtdate) = 5 And _
  8. IsNumeric(Mid(dtdate, 1, 1)) And _
  9. IsNumeric(Mid(dtdate, 2, 1)) And _
  10. Mid(dtdate, 3, 1) = "." And _
  11. IsNumeric(Mid(dtdate, 4, 1)) And _
  12. IsNumeric(Mid(dtdate, 5, 1)) Then
  13. Else
  14. Exit Function
  15. End If
  16. GetPosition = -1
  17. ' Jaar en Week uit datum halen
  18. jaar = Left(dtdate, InStr(dtdate, ".") - 1) 'ex : 7
  19. week = Mid(dtdate, InStr(dtdate, ".") + 1) ' ex : 12
  20. ' Kolom zoeken
  21. For i = K_START_GRAPH To max
  22. If Cells(LINE_YEAR, i) = jaar Then
  23. If Cells(LINE_WEEK, i) = week Then
  24. ' juiste kolom gevonden
  25. GetPosition = i
  26. Exit Function
  27. End If
  28. End If
  29. Next i
  30. End Function

et sa marche sans probleme
puis j'ai essayer avec option explicite et sa marche plus pourquoi :??: 

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

Ici Left renvoie un type variant que tu affectes à un long...
  1. jaar = Left(dtdate, InStr(dtdate, "." ) - 1) 'ex : 7

Ou encore ici, tu compares un long à une string.
  1. 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.

Citation :
Citation :
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 !!!!!!

Et ton problème résolu ou pas ?
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
Lassé par la pub ? Créez un compte