IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Problème de code vba ligne if surligné en jaune


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut Problème de code vba ligne if surligné en jaune
    Bonjour,
    je veux créer un code pour contrôler une date saisie dans un formulaire (formulaire créer à partir d'une table appeler DATE SCTC, donc le champ date de cette table en est la source de contrôle de la zone de texte du formulaire )
    Et je veux qu'avec mon code (saisie dans la propriété de ma zone de texte en mettant une procédure évenementiel dans "sur entré") il vérifie dans une table "date ctc" si cette date n'éxiste pas déjà. Alors j'ai fait ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Date_Enter()
    If [Date] Eqv [Date ctc]![Date] Then
    msgbox "Date éxistante dans la base de donnée"
    End If
    End Sub
    le [date] juste après if est mon champ du formulaire.
    Quand je dis que ça ne marche pas, cela veut dire que lorsque j’ai finis de saisir mon code que je quitte les propriétés et que je quitte le mode création pour afficher le formulaire mon code ne marche pas et je dois ouvrir une fenêtre de débogage, la ma ligne de if à then et surligner en jaune
    Du bonheur du bonheur du bonheur…

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    On ne donne pas à un nom de champ le nom Date qui est une fonction.

    Philippe

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Il faudrait que je change mon nom de champ?
    Par ailleur j'ai instauré un valide si pour assurer que la date saisie est bien une fin de mois, je peu compilier les deux dans un code,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    je viens d'essayer en remplacant Date par Datectc, et ça ne change pas au moment d'afficher le formulaire il me met :
    "impossible d'ouvrir le champ "l" auxquelle il est fait référence dans votre expression.
    ça veut dire quoi quand access surligne en jaune une ligne de mon code ?

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 76
    Par défaut
    Quand Access surligne une ligne en jaune, c'est qu'elle pose problème.

    Dans la condition de ton if, le [Date ctc]![Date] correspond à la valeur de la date dans ta table si j'ai bien compris ?
    Si c'est le cas, c'est ça qui pose problème.

    Quand le code plante et quel est le message d'erreur qui est sur la fenêtre qui s'ouvre ?

    Et dernier point, prends l'habitude de mettre des parenthèses dans pour tes condition. Il est beaucoup de plus simple de lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If (condition) Then
     
        Expression
     
    End If
    Que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If condition then
    Expression
    End If
    C'est les petits trucs qui font qu'il est moins pénible de reprendre le code de quelqu'un.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Alors j’ai essayé un autre système que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Date_Enter()
    Rechdom([Datectc], "date ct") = (Forms![Date]![Datectc]) = Null
    End Sub
    Qui ne marches pas non plus j’ai le droit à
    « l’expression sur entrée entrée, comme paramètre de la propriété type événement est à l’origine d’une erreur , Sub ou Function non définis. »

    lorsque j’utilise un code du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Date_Enter()
    If [Date] Eqv [Date ctc]![Date] Then
    msgbox "Date éxistante dans la base de donnée"
    End If
    End Sub
    J’ai un message visual basic qui me dis, « impossible de trouver le champ ‘l’ auquel il est fait référence dans votre expression. »
    Ensuite je clic sur débogage et dans ma ligne surligné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If [Date] Eqv [Date ctc]![Date] Then
    Si je mets ma souris sur le premier [Date] j’ai une étiquette qui apparaît à ce moment en mettant [Date]=Null, est ce une suggestion ?

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 76
    Par défaut
    [Date ctc]![Date]

    C'est bien le champs Date de ta table Date ctc ? Si c'est le cas, je pense que ton problème vient de là.

    En effet, je ne crois pas qu'il soit possible de lire une table à l'arrache comme ça.

    Il faut que tu ouvres ta table. Personnellement, je ferais ça avec un petit recordset et rouler jeunesse.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    oui c'est ça c'est mon champ datectc de ma table date ctc

    par ailleur je remarque un message d'erreur de temps en temps mais je ne saurai pas dire pourquoi il s'ouvre:

    message: identificateur attendus

    De plus j'ai essayé avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Date_Enter()
    If (Formulaires![Date]![datectc] Like [date ctc]![datectc]) Then
    msgbox "la date saisie existe déjà dans la base de donnée"
    End If
    End Sub
    Et la j'ai un message du genre: "objet recquis"

  9. #9
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 76
    Par défaut
    Et avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Date_Enter()
     
    Dim rst As Recordset
     
    Set rst = CurrentDb.OpenRecordset("Select * from [Date ctc]", open_db_snapshot)
     
    rst.MoveFirst
     
    Do Until (rst.EOF)
     
    If (Formulaires![Date]![datectc] =rst![datectc]) Then
    msgbox "la date saisie existe déjà dans la base de donnée"
    End If
     
    rst.Movenext
     
    Loop
     
    rst.Close
     
    End Sub
    Ca devrait déjà aller mieux.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Select * from [Date ctc]", open_db_snapshot)
    Non non il n'aime pas ce code, cette fois ci j'ai le droit à argument non valide

  11. #11
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Select * from Datectc", open_db_snapshot)
    Voilà qui devrait être mieux. Si il te sort encore une fois argument invalide, je pense que c'est parce que le nom de la table est inexacte. Il faut écrire son nom exacte et vu que tu l'as écrit de plusieurs manières possibles dans tes messages...

    Courage !^^ Tu y es presque.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    je vais essayer ça en tout cas je te remercie déjà pour ton aide depuis ce matin c'est beaucoup vus que je ne connais pas du tout le vba j'ai juste un bouquin sous les yeux et c'est pas facile
    heuresement qu'il y a des forums comme ça

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    non rien à faire même avec le bon nom de table ça ne marche pas:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Date_Enter()
     
    Dim rst As Recordset
     
    Set rst = CurrentDb.OpenRecordset("Select * from Date ctc", open_db_table)
     
    rst.MoveFirst
     
    Do Until (rst.EOF)
     
    If (Formulaires![Date]![Datectc] = rst![Datectc]) Then
    msgbox "la date saisie existe déjà dans la base de donnée"
    End If
     
    rst.MoveNext
     
    Loop
     
    rst.Close
     
    End Sub
    J'ai ce bout surligné en jaune toujours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Select * from Date ctc", open_db_table)
    l'objectif de base était de faire vérifié si la date que l'utilisateur tape dans cette zone de texte n'existe pas mais la je sais plus quoi faire. A cuaque fois que j'utilise un code il y a tout le temps une erreur

  14. #14
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Select * from Date ctc", dbOpenTable)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Select * from Date ctc", open_db_table)
    donne quoi ?

    Domi2

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Compare Database
    Private Sub Date_Enter()
    Dim bd As Database
    Dim rst As Recordset
     
     Set bd = CurrentDb
     Set rst = CurrentDb.OpenRecordset("Select * from Date ctc", dbOpenTable)
     
    rst.MoveFirst
     
    Do Until (rst.EOF)
     
    If (Formulaires![Date]![Datectc] = rst![Datectc]) Then
    msgbox "la date saisie existe déjà dans la base de donnée"
    End If
     
    rst.MoveNext
     
    Loop
     
    rst.Close
     
    End Sub


    donne :

    "le moteur de base de données microsoft jet n'a pa pu trouver l'objet 'Select from*Date ctc'. Assurez vous que l'objet existe et que vous avez correctement saisi son nom et son chemin d'accès "
    Problème le nom de la table est bon

    De plus lorsque je positionne ma souris sur rst une étiquette apparait avec rst=nothing

  16. #16
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Re,

    Désolé, j'ai copier/coller la mauvaise ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rst = CurrentDb.OpenRecordset("Date ctc", dbOpenTable)
    Et pour éviter tout problème, déclare implicitement la bibliothèque utilisée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim bd As DAO.Database
    Dim rst As DAO.Recordset
    Domi2

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Merci je vais essayer

    Je me demandais aussi si j'étais dans le bonne évènement puisque mon code doit vérifier la date une fois que la personne la tapé dans le formulaire
    mois j'ai cliqué sur propriété en mode création et j'ai rentré mon code sur enter
    peut être qu'il faut le mettre sur sortis ou modification ou je sais pas

    puisque mon code maintenant donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Option Compare Database
    Private Sub Date_Enter()
     
    Dim bd As DAO.Database
    Dim rst As DAO.Recordset
     
     Set bd = CurrentDb
     Set rst = CurrentDb.OpenRecordset("Date ctc", dbOpenTable)
     
    rst.MoveFirst
     
    Do Until (rst.EOF)
     
    If (Formulaires![Date]![Datectc] = rst![Datectc]) Then
    msgbox "la date saisie existe déjà dans la base de donnée"
    End If
     
    rst.MoveNext
     
    Loop
     
    rst.Close
     
    End Sub
    Et comme nouveau message d'erreur j'ai "aucun enregistrement". En effet j'en suis à l'élaboration de ma base il n'y a pas de données dedan

  18. #18
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonsoir,

    En utilisant cette méthode, tu risques encore d'avoir d'autres problèmes. Exemple, si tu modifies un autre champ dans ton formulaire, tu vas trouver un doublon, bien évidemment.

    Déjà, pour éviter toute confusion, renomme ton champ sur le formulaire différement, par exemple strDatectc

    Exemple de code avec le clône du recordset, à placer dans l'événement Avant MAJ du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    'Teste la présence d'enregistrement
    Me.RecordsetClone.MoveLast
     
    If Me.RecordsetClone.RecordCount > 0 Then
     
        'Teste la présence d'un éventuel doublon s'il s'agit d'un nouvel enregistrement ou en cas de modification du champ strDatectc 
        If Not Me.NewRecord And Me.strDatectcm.Value = Me.strDatectc.OldValue Then Exit Sub
     
        With Me.RecordsetClone
     
            .rst.FindFirst "Datectc = #" & Format(Me.strDatectc.Value, "mm\/dd\/yyyy") & "#"
     
            If Not .NoMatch Then
     
                'Message d 'erreur
                MsgBox "la date saisie existe déjà dans la base de donnée"                    
     
                Me.strDatectc.SetFocus
     
                Cancel = True
     
                Exit Sub
     
            End If
     
        End With
     
    End If
    Domi2

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut réponse qui ne fait pas avancer le schmilblick
    je te remercie domi, je vais essayer demain au boulot parce que chez moi c'est macintosh donc access... je ne l'ai pas

    Donc merci à vous deux déjà pour le temps passé sur mon problème et je vais essayer de mettre ton code domi demain

    bonne soirée !!!

    ça fait du bien d'être aidé quand on galère.

    ps: sur ton poste domi tu peux m'expliquer à ce que c'est le "me" c'est une fonction? parce que je pense que si je comprend pas le raisonnement de ton code je vais peut être avoir des difficulté à le mettre en place, je ne sais pas ce que t'en pense? De plus tu parles de quelle méthode au tout début de ton post?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Avec ce code il me met:
    instruction incorrect à l'extérieur d'une procédure
    donc je pense qu'on approche du but, il ne faudrai pas que je mette des avant le code?

Discussions similaires

  1. [AC-2013] Problème de code VBA
    Par kbrice dans le forum Access
    Réponses: 1
    Dernier message: 29/04/2015, 19h21
  2. [XL-2010] Problème de code VBA
    Par BENNASR dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/01/2015, 16h36
  3. [XL-2010] Problème de code VBA
    Par Kalteck dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/08/2012, 09h22
  4. [XL-2007] Code VBA pour supprimer des lignes sous condition - problème
    Par PeaceMaker dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2011, 09h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo