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 :

Verification avant insertion table [AC-2010]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Verification avant insertion table
    Bonjour à tous,

    J'ai essayer de trouver un post similaire, mais en vain, je crois que ma faible expérience en VBA ne m'aide pas du tout alors je me retourne vers vous cher expert en programmation.

    J'ai essayer de programmer un petit logiciel en Access 2010 qui permet de charger des titres, mais le problème c'est que si le titre à déjà été chargé, il le charge quand même sans vérifier.
    J'aimerais mettre en place une vérification avant l'écriture dans la base de donnée. J'ai tenté bien que mal de mettre en place cette vérification, mais ça ne fonctionne pas. J'ai une erreur de type: "erreur de compilation: Type défini par l'utilisateur attend, et non un projet", et ce même si DAO 3..6 est coché.

    Je vous remercie en avance de votre aide précieuse

    Voici ma portion de code.:

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub cmd_Save_Click()
    'Ajoute l'information à la table historique (VENTE)
     
    'Vérification
    If IsNull(Me.Listevendeur.Value) Then
        Dim ErreurMissing1
        ErreurMissing1 = MsgBox("Vendeur non sélectionné", vbDefaultButton1 + vbOKOnly, "Erreur")
    Else
    If IsNull(Me.Matricule.Value) Then
        Dim ErreurMissing2
        ErreurMissing2 = MsgBox("Usager non sélectionné", vbDefaultButton1 + vbOKOnly, "Erreur")
    Else
    If IsNull(Me.Modifiable52.Value) Then
        Dim ErreurMissing3
        ErreurMissing3 = MsgBox("Titre non sélectionné", vbDefaultButton1 + vbOKOnly, "Erreur")
    Else
    'Inscription BD
    Dim StrDate, StrTime, StrCName, StrVendeur, StrVente, StrCommentaire, StrNom, StrPrenom
    StrDate = VBA.Format(StrConv(Me.Auto_Date.Value, vbLowerCase), "\#mm\/dd\/yyyy\#")
    StrTime = VBA.Format(DateTime.Now, "hh:MM:ss")
    StrCName = VBA.Environ("computername")
    StrVendeur = Me.Listevendeur.Value
    StrVente = "Vente"
    StrCommentaire = InputBox("Nom sur le chèque et numéro du chèque", "Information sur le chèque")
    StrCommentaire = Replace(StrCommentaire, "'", "")
    StrNom = Replace(Me.Nom, "'", "")
    StrPrenom = Replace(Me.Prenom, "'", "")
    'Vérification si le titre à déjà été loader avant (VOICI LA PORTION OU J'ESSAIE DE VÉRIFIER SI LE TITRE EXISTE)
    Dim db As Database
    Dim rs As Recordset
    Dim StrSQL As String
    StrSQL = "SELECT Historique.MatriculeUsager, Historique.MoisService, Historique.AnneeService FROM Historique WHERE Historique.MatriculeUsager = '" & Me.Matricule & "' AND Historique.MoisService = '" & Me.Texte62 & "' AND Historique.AnneeService ='" & Me.Texte66 & "'"
    Set db = CurrentDb()
    Set rs = db.OpenRecordset(StrSQL, dbOpenDynaset)
    If Not rs.EOF Then
    Dim MsgWarning
        MsgWarning = MsgBox("Le titre à déjà été créé pour cet utilisateur", vbDefaultButton1 + vbInformation, "Erreur")
    Else
    'inscription à la base de registre (CETTE PORTION FONCTIONNE)
    CurrentDb.Execute "INSERT INTO Historique (DateVente, TitreVendu, MoisService, AnneeService, CoutTitreVendu, MatriculeUsager, NomUsager, PrenomUsager, HeureVente, Vendeur, Emplacement, EtatTitre, Commentaire) " & _
                    " VALUES (" & StrDate & ",'" & Me.Texte62 & "','" & Me.Texte64 & "','" & Me.Texte66 & "','" & Me.Texte68 & "','" & Me.Matricule & "','" & StrNom & "','" & StrPrenom & "','" & StrTime & "','" & StrVendeur & "','" & StrCName & "','" & StrVente & "','" & StrCommentaire & "')"
    End If
    'Rafraichie la liste dans le sous formulaire historique
        Historique_sous_formulaire.Form.Requery
    End If
    End If
    End If
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    End Sub
    Encore une fois, merci de votre aide.

    Bonne soirée/journée selon le décalage horaire

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Pour faire vérifier si ton titre existe déjà dans une table, tu as la fonction Dcount
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DCount("*", "MaTable", "monChamps='" & maVariableTitre & "'") <> 0 Then MsgBox "Le titre existe déjà dans la table"

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci de votre réponse,

    Si en utilisant Dcount je dois vérifier trois variable, car je n'ai pas de champ unique qui permet de vérifier uniquement 1 seul champ. Je dois vérifier le mois, l'année et le matricule de l'utilisateur afin de vérifier si effectivement le titre n'a pas été vendu 2 fois. Comment dois-je utilise la fonction DCount?

    Merci encore.

    Salutation,

    Jean-Marc

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Dans le VBE (l'éditeur de Code), si tu places le curseur sur une fonction, une méthode, une propriété, un mot-clé et que tu appuies sur F1, l'aide d'Access t'explique comment les utiliser et à quoi ça sert
    Citation Envoyé par Aide d'Access
    DCount(Expr, Domain, Criteria)
    ...
    Criteria : Expression chaîne facultative servant à limiter la plage des données sur laquelle porte la fonction DCount. Par exemple, critère est souvent équivalent à la clause WHERE d'une expression SQL sans le mot WHERE. En cas d'omission de critère, la fonction DCount évalue expr par rapport à l'intégralité du domaine. Chaque champ compris dans critères doit l'être aussi dans domaine, sans quoi la fonction DCount renvoie la valeur Null
    Autrement dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DCount("*", "MaTable", "monChampsTexte='" & maVariableString & "' AND monChampsNumerique=" & maVariableNumerique & " AND monchampDate=#01/01/2014#") <> 0 Then MsgBox "Le titre existe déjà dans la table".

  5. #5
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci...

    Je vais essayer ça..
    Je ne savais pas que l'on pouvais se positionner sur une fonction et appuyer sur F1. Je vais me coucher moins niaiseux ce soir.

    Merci encore

  6. #6
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'If DCount("*", "MaTable", "monChampsTexte='" & maVariableString & "' AND monChampsNumerique=" & maVariableNumerique & " AND monchampDate=#01/01/2014#") <> 0 Then MsgBox "Le titre existe déjà dans la table".
    If Dcount("*", "Historique","[AnneeService]='" & Me.Matricule & "' AND [MoisService]=" & Me.Texte62 & " AND [AnneeService]=" & Me.Texte64") <> 0 then Msgbox "Le titre existe déjà dans la table".
    Ça reste en rouge, mais je ne sais pas pourquoi.
    Est-ce que tu serais en mesure de m'expliquer ce qui ne fonctionne pas?

    Merci beaucoup encore de ton aide précieuse.

    Salutation

  7. #7
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour xtrem3,

    Ça serait plutôt comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Dcount("*", "Historique","[AnneeService]='" & Me.Matricule & "' AND [MoisService]=" & Me.Texte62 & " AND [AnneeService]=" & Me.Texte64) <> 0 then Msgbox "Le titre existe déjà dans la table."
    Cependant écrit de cette manière il faut que MoisService et AnneeService soient numériques.

    Bonne journée

  8. #8
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Salut

    Le matricule n'est pas numérique, le mois non plus, mais l'année oui sauf que le champs n'est pas "défini" comme numérique mais plutôt comme champs texte.
    Est-ce que fonctionnerais quand même? Dois-je utiliser quand même la fonction DCount?


    Merci

  9. #9
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour xtrem3,

    Pour un champ texte tu peux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[AnneeService]='" & Me.Matricule & "'
    Cependant je préfère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "[AnneeService]=" & Chr(34) & Me.Matricule & Chr(34)  "
    Pour un champ numérique c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " AND [MoisService]=" & Me.Texte62 & "
    Et pour un champ date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    " AND [MoisService]=#" & Me.Texte62 & "#
    À toi d'adapter selon le format de tes champs.

    Bonne journée

  10. #10
    Candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup de votre aide.

    Afin de répondre aux futures personnes qui aurait le même probleme... voici la soluce:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If DCount("*", "Historique", "[MatriculeUsager]='" & Me.Matricule & "' AND [MoisService]='" & Me.Texte64 & "' AND [AnneeService]='" & Me.Texte66 & "'") <> 0 Then
    Dim ErreurTitre
    ErreurTitre = MsgBox("Le titre existe déjà dans la table.")
    Else
    'inscription à la base de registre
    CurrentDb.Execute "INSERT INTO Historique (DateVente, TitreVendu, MoisService, AnneeService, CoutTitreVendu, MatriculeUsager, NomUsager, PrenomUsager, HeureVente, Vendeur, Emplacement, EtatTitre, Commentaire) " & _
                    " VALUES (" & StrDate & ",'" & Me.Texte62 & "','" & Me.Texte64 & "','" & Me.Texte66 & "','" & Me.Texte68 & "','" & Me.Matricule & "','" & StrNom & "','" & StrPrenom & "','" & StrTime & "','" & StrVendeur & "','" & StrCName & "','" & StrVente & "','" & StrCommentaire & "')"
    'Rafraichie la liste dans le sous formulaire historique
    End If
    Bonne journée

    Merci encore aux personnes qui m'on aidé à solutionné le problèmes, vous m'avez beaucoup aidé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger pour vider une table avant insertion
    Par renardchan dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/01/2011, 15h41
  2. verification si exite dans la base avant insertion
    Par Miss kouka dans le forum Langage
    Réponses: 3
    Dernier message: 14/05/2010, 19h31
  3. Test d'existence d'une table avant insertion
    Par YavaDeus dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/04/2009, 12h10
  4. vérifier si une table est vide avant insertion
    Par cashmoney dans le forum JDBC
    Réponses: 7
    Dernier message: 21/04/2009, 17h54
  5. [Debutant] Verification avant insertion
    Par diaboloche dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/09/2007, 15h09

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