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 :

Vérification de données en double


Sujet :

VBA Access

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Vérification de données en double
    Re-bonjour,

    J'ai un formulaire COMPANY_NOUVEAU qui me permet de créer un nouvel enregistrement dans une table COMPANY.
    Dans cette table, j'ai ma clé primaire, un code spécifique appelé CodeCompany à saisir dans le formulaire, ainsi que d'autres infos, également à saisir dans le formulaire.
    Je souhaiterais que, lorsque j'appuie sur le bouton Valider (sur lequel j'ai un évènement DoCmd.RunCommand acCmdSaveRecord) de mon formulaire, une vérification s'effectue sur tous les CodeCompany de la table COMPANY, afin de s'assurer qu'il n'y a pas de doublon. En gros, si le CodeCompany existe déjà, j'ai une Msgbox qui m"informe que le codeCompany XXX existe déjà, sinon, il ne se passe rien.
    Je n'y connait pas grand chose en VBA, donc je ne sais pas du tout comment m'y prendre...
    D'avance merci pour votre aide.

    MelaAllIn

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut Si clé primaire
    Bonjour,
    Si Code_Company est déclaré en clé primaire pas de problème de doublon possible.
    Dès que vous avez tapez un nouveau code et valider par Enter vous faites F9 pour actualiser et si c'est un doublon un message vous le signale, sinon le même message apparaîtra au passage à l'enregistrement suivant.

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Merci pour votre réponse. Le Code Company n'est pas la clé primaire (ça peut être une valeur nulle)... C'est bien là mon problème.
    En plus, j'aimerais que le système fonctionne en "automatique", et ne pas avoir à appuyer sur une touche (comme F9), car les utilisateurs qui ne connaissent pas ne sauront pas faire.
    D'autres pistes ?
    Encore merci !
    MelaAllIn

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut Proposition
    Re,

    Dans les propriétés du champ sur la ligne 'Indexé' choisre Oui - Sans doublons.

    Mais si vous voulez que ce champ une clé primaire on peut mettre la propriété Null autorisé à Oui tout comme châine vide d'ailleurs

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Ca marche !
    Merci RJamin, ça marche !
    Je vais avoir du ménage à faire, car je dois déjà avoir des CodeCompany en doublon sur mes 300 lignes d'enregistrements.... J'aurais dû y penser dès le début !

    Par contre, j'ai une question subsidiaire :
    Lorsque je créé une nouvelle Company avec un CodeCompany qui existe déjà, j'ai le le message suivant :
    "The changes you requested to the table were not successful because they would create duplicate values in the index, primary key, or relationship. Change the data in the fieldor fields that contain duplicate data, remove the index, or redefine the index to permit duplicate entries and try again".
    Comment faire pour avoir à la place un message personnalisé du type "Le CodeCompany que vous avez sais existe déjà, veuillez le changer" ???

    Merci pour votre aide.

    MelaAllIN

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut Message
    Re,

    Je vois qu'une solution c'est par VBA, dès que le champ Code_Company perd le focus c'est de lancer une procédure pour contrôler que le Code entré n'existe pas encore et faire afficher un message d'avertissement si ce code existe déjà.
    Dans ces conditions le message d'Access n'apparaîtra pas puisque vous aurez corrigé avant.
    Mais la procédure il faut la programmer. Chercher un peu dans la FAQ il est très probable que vous y trouverez des idées.

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Une piste ?
    Re, et encore merci !
    J'ai suivi votre conseil et j'ai trouvé ce bout de code dans la FAQ (comment personnaliser le message d'erreur d'Access lors de doublons) :
    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
    Sub Form_Error(DataErr As Integer, Response As Integer)
     ' Si l'erreur est due à un doublon, la fonction affiche un message permettant d'annuler une commande.
    Const ERR_DOUBLON = 3022 ' erreur de doublon
     ' DataErr reçoit le code erreur de la part du moteur de la bdd ou de l'interface
    Select Case DataErr
       Case ERR_DOUBLON
           'Votre message...
            MsgBox "Ce nom existe déjà.", vbExclamation, "Attention"
           'La zone a surveiller
            [ARPCode].SetFocus
           'Demande à Access de continuer l'exécution sans afficher le message standard
           Response = acDataErrContinue
       End Select
     
    End Sub
    Par contre, je ne sais pas où je dois le mettre dans mon code, ni comment faire pour passer dessus en cas de doublon... J'ai essayé sur la perte de focus, mais ça ne marche pas (ou bien je m'y suis mal prise).
    Désolée de vous solliciter encore, mais mon niveau en VBA est vraiment très débutant, et difficile de se contenter du message d'erreur standard (surtout pour des utilisateurs lambda qui ne sauront pas du tout d'où il vient) lorsque l'on connait un peu les possibilités d'ACCESS...
    Donc, s'il y a des amateurs pour continuer à me donner un coup de main, je suis preneuse, avec toute ma reconnaissance !

    MelaAllIn

  8. #8
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

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

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

    L'événement Sur erreur du formulaire est très "puissant", passez moi l'expression, mais souffre d'un gros défaut... Il ne se déclenche pas lors de l'exécution de code VBA...

    Trois possibilités pour la recherche de doublons. Une fonction de domaine, DLookup, simple mais pénalisante en terme de performances, utiliser un Recordset, ou mieux encore, le RecordsetClone avec un simple "FindFirst".

    CodeCompany est numérique ?

    Domi2

  9. #9
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut MelaAllIn, rjamin et Domi2 ,

    Citation Envoyé par Domi2
    L'événement Sur erreur du formulaire est très "puissant", passez moi l'expression, mais souffre d'un gros défaut... Il ne se déclenche pas lors de l'exécution de code VBA...
    tu me surprends pour le peu que j'ai utilisé je n'ai pas rencontré ce genre de pb. de plus il n'y a pas de code qui est exécuté et s'il y a code il y a gestion d'erreur possible... je comprends pas bien

    enfin, moi je privilégie le no-erreur ca évite de se prendre la tête avec la gestion qui va avec.

    pourquoi pas gérer la création automatique du CodeCompany ?


  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Merci pour vos réponses.
    Concernant le CodeCompany, il est bien numérique. C'est un code que je récupère d'un autre programme, donc je ne peux pas le générer en automatique.
    Domi2, tu parles d'utiliser un RecordSet ou un Recordsetclone avec un Findfisrst. Est-ce que tu peux m'en dire plus ? Encore une fois, désolée, mais le VBA et moi, ça fait 2 (au cas où vous auriez pas remarqué) !!!

  11. #11
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Piste de solution ?
    Re,
    En fouillant un peu, j'ai trouvé ça sur http://www.info-3000.com/access/daorecordset.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Enr As Recordset
    Set Enr = CurrentDb.OpenRecordset("Personne", dbOpenDynaset)
    Enr.FindFirst "Prenom = 'Pierre'"
    MsgBox Enr("NomPersonne")
    Enr.Close
    J'imagine que c'est les paramètres en rouge que je dois modifier, mais comment ???

  12. #12
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

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

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

    @vodiem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je souhaiterais que, lorsque j'appuie sur le bouton Valider
    me fait penser que l'insertion se fait par code et non en utilisant les boutons de navigation.

    Extrait de l'aide de l'événement Sur erreur :

    Cet événement survient lorsqu'une erreur d'exécution se produit dans Microsoft Access alors qu'un formulaire ou un état est activé. Cela inclut les erreurs du moteur de base de données Microsoft Jet, mais pas les erreurs d'exécution de Visual Basic.
    @MelaAllIn

    Code à insérer dans l'événement Après MAJ du champ qui contient le code et que j'appelle txtCodeCompany :

    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
    'On ne teste la présence de doublons que si le code n'est pas Null
    If Not IsNull(Me.txtCodeCompany) Then
     
        With Me.RecordsetClone
     
            .FindFirst "CodeCompany =" & Me.txtCodeCompany
     
            If Not .NoMatch Then
     
                'Message d 'erreur
                MsgBox "Doublon"
     
            End If
     
        End With
     
    End If
    Domi2

  13. #13
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Re, re !
    Merci Domi2, j'ai intégré ton bout de code, je t'en remercie (je l'ai un peu adapté au niveau des nom des paramètres).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub txtARPCode_AfterUpdate()
     
    'On ne teste la présence de doublons que si le code n'est pas Null
    If Not IsNull(Me.txtARPCode) Then
        With Me.RecordsetClone
            .FindFirst "ARPCode =" & Me.txtARPCode
            If Not .NoMatch Then
                'Message d 'erreur
                MsgBox "Doublon"
            End If
        End With
    End If
     
    End Sub
    Par contre, je l'ai testé en pas à pas en créant une Company avec un CodeComapny qui existe déjà, et il ne passe pas sur l'évènement - If Not .NoMatch Then -

    Je me demande, en fait, comment le système fait pour savoir que le Champ ARPCode que je veux "scanner" pour vérifier les doublons se trouve dans la table Company ? Je crois qu'il ne sais pas où aller chercher l'info. Qu'en penses-tu ?

    me fait penser que l'insertion se fait par code et non en utilisant les boutons de navigation.
    C'est le cas.
    Voilà le code complet que j'ai dans mon formulaire, peut-être que ça a son importance, je ne sais 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
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Option Compare Database
    Option Explicit
     
    Private Sub txtARPCode_AfterUpdate()
     
    'On ne teste la présence de doublons que si le code n'est pas Null
    If Not IsNull(Me.txtARPCode) Then
        With Me.RecordsetClone
            .FindFirst "ARPCode =" & Me.txtARPCode
            If Not .NoMatch Then
                'Message d 'erreur
                MsgBox "Doublon"
            End If
        End With
    End If
     
    End Sub
     
    ' ##############################################################################
    Private Sub Form_Open(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' Ouverture du formulaire.
    ' -----------------------------------------------------------------------------
         SetValidation (False)      ' Initialisation.
     
    End Sub
    ' ##############################################################################
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' Cette procédure est lancée quand Access tente d'ecrire la ligne dans la table.
    ' On ne l'autorise que si on est passé par le bouton validé (le signe de ce point
    ' de passage est GetValidation() = True).
    ' L'interêt de cette procédure est de bloquer toutes les "sauvegardes
    ' sauvages" de l'enregistrement (ajout d'une nouvelle ligne, tir, filtre...)
    ' -----------------------------------------------------------------------------
     
    ' Cancel = True rend impossible la validation.
    Cancel = Not GetValidation()
    ' Si GetValidation = True, on est passé par la validation Bouton
    ' sinon, on refuse l'enregistrement.
     
    End Sub
    ' ##############################################################################
    Private Sub Form_Unload(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' quand on ferme la fiche, on supprime l'enregistrement eventuellement ajouté
    ' sauf si il a été validé correctement (c'est à dire si GetValidation() = True)
    ' -----------------------------------------------------------------------------
        If Not GetValidation Then
     
            DoCmd.SetWarnings False     ' Désactive les messages d'avertissment (ici le message avant suppression)
            On Error Resume Next        ' Masque l'erreur eventuelle "Rien à supprimer"
            DoCmd.RunCommand acCmdDeleteRecord
            DoCmd.SetWarnings True      ' Réactive les messages d'avertissment
     
        End If
     
    End Sub
    ' ##############################################################################
    Private Sub BNouveauLabo_Click()
    ' -----------------------------------------------------------------------------
    ' Clic de l'utilisateur sur le bouton Valider.
    ' Test si l'enregistrement est validable (contenu des champs).
    ' Si OK, on sauvegarde l'enregistrement, et on ferme le formulaire.
    ' -----------------------------------------------------------------------------
    On Error GoTo BNouveauLabo_Click_Error
     
        ' On teste les zones obligatoires :
     
    If IsNull(Me.NomCompany) Then
        MsgBox ("You have to name the lab!")
        Me.NomCompany.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    If IsNull(Me.IndepCaptif) Then
        MsgBox ("You have to indicate if it is about a captive or independent lab!")
        Me.IndepCaptif.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    If IsNull(Me.CountryCompany) Then
        MsgBox ("You have to indicate in what a country is the laboratory!")
        Me.CountryCompany.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    ' On mémorise l'action de valider ce formulaire (pour ne pas supprimer la ligne en fermant le formulaire)
    SetValidation (True)
    ' Tente de sauvegarder l'enregistrement
    DoCmd.RunCommand acCmdSaveRecord
    SetCodeCompany (Me.CodeCompany)
     
    DoCmd.Close     ' ferme le formulaire
     
    DoCmd.OpenForm ("COMPANY")
     
    Exit Sub
     
    BNouveauLabo_Click_Error:
        MsgBox Err.Description
        SetValidation (False)   ' Rétablit cet indicateur si la sauvegarde de l'enregistrement à échoué.
    End Sub
    ' ##############################################################################
    Private Sub BAnnuler_Click()
     
    On Error GoTo BAnnuler_Click_Error
     
    If MsgBox("Are you sure to want to delete all the data contained in this form???", _
               vbYesNo, "Confirmation") = vbYes Then
     
        DoCmd.Close     ' ferme le formulaire
    End If
     
    Exit Sub
    BAnnuler_Click_Error:
        MsgBox Err.Description
        DoCmd.SetWarnings True      ' Réactive les messages d'avertissment
     
    End Sub
    Je précise, bien sûr, que je ne suis pas l'auteur de ce code... Si c'était le cas, je pense que j'aurais besoin beaucoup moins souvent de votre aide !..

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

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

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

    En fait, le RecordsetClone fait référence à l'objet Recordset d'un formulaire spécifié par la propriété Source de ce formulaire.

    Donc si la Source de ton formulaire est ta table "Company" ou une requête basée sur cette table, aucun souci.

    Ca me semble être le cas !

    Ton code est bien numérique ?

    Domi2

  15. #15
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    J'ai revérifié :
    Mon CodeARP est bien en numérique et c'est bien le nom de mon champ dans ma table, avec la bonne orthographe.
    Mon formulaire a bien comme source ma Table COMPANY directement.
    Je ne comprend pas pourquoi le FindFirst ne fonctionne pas...

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

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Hum...

    Tu peux essayer la pièces jointe et voir si ça correspond ?

    Domi2

  17. #17
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Bon, j'ai essayé ton code Domi2 sur une petite base toute simple, et j'arrive bien à avoir la Msgbox... Donc, j'ai cherché à voir les différences que j'avais entre un formulaire "classique" et le mien "customisé"...
    Je me suis rendue compte qu'il faut que le formulaire n'autorise pas l'entrée des données, sinon on ne passe pas sur la Msgbox. Va savoir pourquoi...
    Ca règle donc mon problème, donc merci beaucoup Domi2 (encore une fois !).

    Par contre, du coup, mon problème est que j'ai dû enlever l'autorisation d'entrée des données. Donc, quand j'ouvre mon formulaire, j'ai les données alors qu'il me faudrait un formulaire vierge (il s'agit d'un formulaire qui permet de créer une nouvelle Company).
    Y-a t'il moyen de contourner ça ???

  18. #18
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Désolée, je n'avais pas vu ta réponse.
    Je n'arrive pas à ouvrir ton exemple, je suis en 2000, peut-être que tu as une version plus récente ?
    Sinon, voir mon post précédent, je pense avoir vu d'où viens le problème, mais du coup ça m'en crée un autre...

  19. #19
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

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

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

    Sorry, je l'ai crée en version 2002...

    Bon, c'est pas grave...

    Dans le code qui ouvre ton formulaire, après l'ouverture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Nouvel enregistrement
    DoCmd.GoToRecord , , acNewRec
    Domi2

  20. #20
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Ca marche !
    Hello,

    Désolée de ne pas avoir répondu avant, je n'étais pa au bureau...
    En tout cas, j'ai suivi tes instructions, Domi2, et ça marche !
    J'ai mis le DoCmd.GoToRecord , , acNewRec sur le Form_Open.

    Au final, voilà mon code complet dans le formulaire, si ça peut aider du monde :
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    Option Compare Database
    Option Explicit
    ' ##############################################################################
    Private Sub Form_Open(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' Ouverture du formulaire.
    ' -----------------------------------------------------------------------------
        SetValidation (False)      ' Initialisation.
        'Nouvel enregistrement
        DoCmd.GoToRecord , , acNewRec
     
    End Sub
    ' ##############################################################################
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' Cette procédure est lancée quand Access tente d'ecrire la ligne dans la table.
    ' On ne l'autorise que si on est passé par le bouton validé (le signe de ce point
    ' de passage est GetValidation() = True).
    ' L'interêt de cette procédure est de bloquer toutes les "sauvegardes
    ' sauvages" de l'enregistrement (ajout d'une nouvelle ligne, tir, filtre...)
    ' -----------------------------------------------------------------------------
     
    ' Cancel = True rend impossible la validation.
    Cancel = Not GetValidation()
    ' Si GetValidation = True, on est passé par la validation Bouton
    ' sinon, on refuse l'enregistrement.
     
    End Sub
    ' ##############################################################################
    Private Sub Form_Unload(Cancel As Integer)
    ' -----------------------------------------------------------------------------
    ' quand on ferme la fiche, on supprime l'enregistrement eventuellement ajouté
    ' sauf si il a été validé correctement (c'est à dire si GetValidation() = True)
    ' -----------------------------------------------------------------------------
        If Not GetValidation Then
     
            DoCmd.SetWarnings False     ' Désactive les messages d'avertissment (ici le message avant suppression)
            On Error Resume Next        ' Masque l'erreur eventuelle "Rien à supprimer"
            DoCmd.RunCommand acCmdDeleteRecord
            DoCmd.SetWarnings True      ' Réactive les messages d'avertissment
     
        End If
     
    End Sub
    ' ##############################################################################
    Private Sub BNouveauLabo_Click()
    ' -----------------------------------------------------------------------------
    ' Clic de l'utilisateur sur le bouton Valider.
    ' Test si l'enregistrement est validable (contenu des champs).
    ' Si OK, on sauvegarde l'enregistrement, et on ferme le formulaire.
    ' -----------------------------------------------------------------------------
    On Error GoTo BNouveauLabo_Click_Error
     
        ' On teste les zones obligatoires :
     
    If IsNull(Me.NomCompany) Then
        MsgBox ("You have to name the lab!")
        Me.NomCompany.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    If IsNull(Me.IndepCaptif) Then
        MsgBox ("You have to indicate if it is about a captive or independent lab!")
        Me.IndepCaptif.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    If IsNull(Me.CountryCompany) Then
        MsgBox ("You have to indicate in what a country is the laboratory!")
        Me.CountryCompany.SetFocus
        Exit Sub    ' Quitte la procédure
    End If
     
    ' On mémorise l'action de valider ce formulaire (pour ne pas supprimer la ligne en fermant le formulaire)
    SetValidation (True)
    ' Tente de sauvegarder l'enregistrement
    DoCmd.RunCommand acCmdSaveRecord
    SetCodeCompany (Me.CodeCompany)
     
    DoCmd.Close     ' ferme le formulaire
     
    DoCmd.OpenForm ("COMPANY")
     
    Exit Sub
     
    BNouveauLabo_Click_Error:
        MsgBox Err.Description
        SetValidation (False)   ' Rétablit cet indicateur si la sauvegarde de l'enregistrement à échoué.
    End Sub
    ' ##############################################################################
    Private Sub BAnnuler_Click()
     
    On Error GoTo BAnnuler_Click_Error
     
    If MsgBox("Are you sure to want to delete all the data contained in this form???", _
               vbYesNo, "Confirmation") = vbYes Then
     
        DoCmd.Close     ' ferme le formulaire
    End If
     
    Exit Sub
    BAnnuler_Click_Error:
        MsgBox Err.Description
        DoCmd.SetWarnings True      ' Réactive les messages d'avertissment
     
    End Sub
     
    Private Sub txtARPCode_AfterUpdate()
     
    'On ne teste la présence de doublons que si le code n'est pas Null
    If Not IsNull(Me.txtARPCode) Then
        With Me.RecordsetClone
            .FindFirst "ARPCode =" & Me.txtARPCode
            If Not .NoMatch Then
                'Message d 'erreur
                MsgBox "The ARP-ID " & Me.txtARPCode & " already exist!" & SL() & _
                "Verify that you did not make error and that the company" & SL() & _
                "which you try to create does not already exist"
                Me.txtARPCode.SetFocus
            End If
        End With
    End If
     
    End Sub
    Juste pour info, après le message d'erreur personnalisé, si on ne change par le ARPCode et qu'on appuie sur le bouton Valider, on a toujours le message standard d'Access, mais c'est pas gênant pour moi, puisqu'on est déjà averti qu'il y a un problème et qu'on est censé avoir fait la modif avant !

    En tout cas, un grand merci à toi Domi2 : ça me permet vraiment d'avoir une interface conviviale et facile à utiliser.

    Merci, merci !!!

    MelaAllIn
    Un très grand merci !

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

Discussions similaires

  1. [MySQL] Vérification des données
    Par winkler dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/10/2006, 19h36
  2. Pb de vérification de données
    Par sagitarium dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/05/2006, 14h49
  3. Pb de vérification de données
    Par sagitarium dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/05/2006, 13h45
  4. Vérification de donné dans une table access
    Par xdiethank dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/05/2006, 16h29
  5. Avis sur la vérification des données d'une fiche
    Par AlexB59 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/07/2005, 21h55

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