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 :

Fonction Iif + Msgbox


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut Fonction Iif + Msgbox
    Bonjour à tous.
    Nouveau sur le forum, j'ai passé une partie de ma vie de fonctionnaire à programmer sous Access...mais 1997 voire 2000. Moralité: ayant arrêté depuis plus de 10 ans, je suis un peu perdu!
    Je cherche à faire un petit programme pour un ami qui a une entreprise, et j'ai du mal avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub REFERENCE_LostFocus()
    Dim res As String, res1 As String
    Dim Msg, Style, Title, Response, MyString
    Msg = "CET APPAREIL EXISTE DEJA, SOUHAITEZ-VOUS EN MODIFIER LE PRIX?"
    Style = vbYesNo + vbCritical
    Title = "ATTENTION"
    Response = MsgBox(Msg, Style, Title)
    IIf (res = DLookup([MODELE],[APPAREILS], Me.MODELE) And res1 = DLookup([REFERENCE], [APPAREILS], Me.REFERENCE),response=MsgBox (msg,style,title),Docmd.GotoControl ([COULEUR]))
    If Response = vbOK Then
    DoCmd.OpenTable [APPAREILS], acViewNormal, acEdit
    Else: DoCmd.RunCommand acCmdUndo
    End If
    End Sub
    Cela me donne un "attendu:=" que je ne comprend pas dans la ligne Iif.
    Un cerveau plus jeune pourrait-il me donner un coup de main?
    Merci d'avance
    Ben

  2. #2
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Par défaut
    Bonjour benji124,

    Peux-tu nous en dire un peu plus sur ce que tu veux faire et décrire plus précisément ton environnement (Tables utiles, formulaires, champs...)
    J'avoue que pour moi ton objectif n'est pas très clair dans le code. Tu cherches simplement à valider une saisie dans un formulaire en fonction d'un champ de table?

    PS: Utilise la balise code (bouton #) lorsque tu écris du code...
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut
    Bonjour et merci de ta réponse.
    Je veux tout simplement vérifier qu'un enregistrement n'existe pas déjà dans la table "APPAREILS", par contrôle des champs "MODELE" et "REFERENCE". Je ne veux pas deux enregistrements soient identiques au niveau de ces deux champs. Ils pourraient être de même modèle mais ne pas avoir la même référence (à cause de la couleur par exemple).
    Donc, si ces deux champs s'avéraient identiques: boite message qui permettrait soit de changer le prix de l'appareil existant déjà, soit d'annuler l'enregistrement.
    Merci d'avance.
    Excuses pour la balise.
    Ben

  4. #4
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Par défaut
    Alors si j'ais bien compris (il manque toujours pas mal d'info...), la solution à ton problème est toute simple (enfin, il me semble)

    Il te suffit de lié ton formulaire à ta table appareil (si ce n'est pas déjà le cas!)
    Dans tous les cas, il m'étonnerait fort que deux appareils puissent avoir la même référence. Donc, dans la table appareil, en mode création, déclare ton champ référence en tant que clé primaire et indexe le sans doublons.
    Ensuite tu dois ouvrir ton formulaire en mode ajout.
    Lorsque tu valides une clé déjà existante, Access va te crier fort dessus en disant que cette clé existe déjà
    Il ne te reste plus qu'à capter cette erreur dans le code, puis de rouvrir le formulaire en mode modif en ciblant l'enregistrement en question.
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Par défaut
    Oui, mon formulaire est déjà lié à ma table et fonctionne correctement en utilisation normale.
    J'ai bien pensé à créer un index sur ces deux champs, mais je veux qu'un utilisateur(trice...) lamda puisse avoir le choix entre annuler l'enregistrement ou retourner au premier et modifier son prix, par exemple, s'il a reçu un nouveau catalogue.
    Donc il faut une Msgbox pour ce choix.
    Merci.
    Ben

  6. #6
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Par défaut
    Bonjour Ben,

    Voici un exemple de gestion d'erreur qui te permet de questionner l'utilisateur sur la suite à donner en cas de doublon:
    Code VBA : 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
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim strRef As String
    
    On Error GoTo err
    
    '*********************
    ' Traitement éventuel
    '*********************
    
    'Gestion erreur
    err:
        '** Si l'erreur est égal à 0 (En l’occurrence, doublon sur la clé primaire)
        If err.Number = 0 Then
            ' On demande à l'utilisateur ce qu'il veut faire
            If MsgBox("Cette référence existe déjà. Voulez-vous modifier l'article éxistant?" & vbCrLf & vbCrLf & _
                        "Cliquez sur OUI pour modifiez ou sur NON pour annuler.", _
                        vbYesNo, "Article existant") = vbYes Then
            '** Si l'utilisateur clique sur OUI
                ' on mémorise la référence
                strRef = Me.TonChampReference.Value
                ' on annule la modification en cours
                Me.Undo
                ' on ferme le formulaire
                DoCmd.Close acForm, Me.Name
                ' et on l'ouvre à nouveau en se positionnant sur l'enregistrement à modifier
                DoCmd.OpenForm "NomDeTonFormulaire", acNormal, , "REFERENCE = " & strRef
                
            '** sinon
            Else
                ' on annule la modification en cours
                Me.Undo
                ' on ferme le formulaire
                DoCmd.Close acForm, Me.Name
            End If
            
        '** si l'erreur est différente de zéro
        Else
            ' on affiche cette erreur
            MsgBox err.Number & vbCrLf & err.Description, vbCritical, "Erreur innatendue"
        End If
    End Sub
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

Discussions similaires

  1. Fonction IIF sous Oracle
    Par noirot dans le forum Oracle
    Réponses: 8
    Dernier message: 27/04/2009, 17h13
  2. [Debutant] Fonction Iif dans requete
    Par Lanig22 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 07/01/2007, 22h13
  3. Question MDX avec la fonction Iif
    Par toc2000 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/11/2006, 21h14
  4. [VB.NET] Difficulté de construction... fonction IIF
    Par Pleymo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/02/2005, 21h28
  5. Fonction IIF
    Par ParisMath dans le forum SQL
    Réponses: 2
    Dernier message: 16/01/2004, 22h18

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