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

Macros Access Discussion :

Déclencher macro sur sélection enregistrement [AC-2013]


Sujet :

Macros Access

  1. #1
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut Déclencher macro sur sélection enregistrement
    Bonjour a tous , attention, je suis plutôt débutant mais je m'améliore grâce à vous
    J'ai une table, puis une requête et un formulaire crée avec l’assistant.
    je souhaiterais déclencher une macro à chaque fois que l'on sélectionne une ligne dans le tableau de résultat (le petit triangle à l’extrême gauche..)
    Je n'ai pas trouvé comment faire...

    Merci d'avance pour votre temps et votre aide..
    Nom : selection.jpg
Affichages : 690
Taille : 57,6 Ko

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut,
    Voir dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Current()
    If Forms("NomDuForm").RecordSelectors = True Then
    ...
    Me.refresh
    End If
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Merci de ton intérêt.
    Je suis un peu trop débutant pour appliquer ta réponse, et je suis surtout très très mauvais pour écrire du VBA... j'utilise l'assitant pour macros...

    Je vais essayer d'être plus précis dans ce que je veux faire.
    J'ai donc un formulaire [FormRendreMachine]
    Dans la zone détail, mon tableau de résultat, provenant d'une requête, elle même basée sur une table.
    Dans mon pied de formulaire, il y a des cases qui affichent des valeurs basées sur la même table correspondant à l'enregistrement sélectionné dans la zone détail.
    Il y a 3 cases en jaune (Date Enlevement, VendeurRetour et NomRepreneur)
    La finalité de ce formulaire est de remplir les 3 cases jaunes.
    Je veux "obliger" à remplir ces 3 cases avant de pouvoir changer d'enregistrement.
    Donc: si les 3 cases sont vides, je peux sélectionner une autre ligne.
    Si les 3 cases sont remplies je peux aussi sélectionner une autre ligne.
    Si 1 ou 2 cases sont remplies, je ne peux pas sélectionner un autre enregistrement, et une zone message apparaît avec le message:" il faut remplir toutes les cases jaunes !"
    Je sais faire ce genre de conditions avec une macro pour des boutons (je bloque l'action du bouton si les conditions ne sont pas remplies). Mais là je ne vois pas comment faire.

    J’espère avoir été clair..

    Merci d'avance!
    Nom : Formrendremachine creation.jpg
Affichages : 655
Taille : 71,8 Ko

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Le problème, à mon avis, n'est pas tant de parcourir les enregistrements avec le sélecteur dans votre form FormRendreMachine.
    A partir du moment où l'utilisateur décide, pour un n°Suivi, de saisir Date Enlevement et NomRepreneur et de sélectionner VendeurRetour il faut s'assurer qu'il saisisse une valeur dans les 2 zones de texte et sélectionne une valeur dans la liste.

    Désolé, je ne suis plus à la page avec les macro incorporées. Éventuellement une solution vba
    En mode création de votre formulaire FormRendreMachine, dans le ruban à droite, cliquez sur "Visualiser le code" pour passer en vba et copier/coller les 3 codes.

    Ce premier code permet simplement de vérifier en sortant de la zone de texte Date enlevement que l'utilisateur a bien saisi une valeur. Tant qu'une valeur n'a pas été saisie, il reste sur la zone de texte Date enlevement. La valeur saisie il passe directement sur la liste déroulante VendeurRetour.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Date_enlevement_Exit(Cancel As Integer)
    If IsNull(Date_enlevement.Value) Or IsEmpty(Date_enlevement.Value) Then
        MsgBox "Vous devez saisir une date d'enlèvement !", vbExclamation
        Cancel = True
        Exit Sub
    End If
    Me.VendeurRetour.SetFocus
    End Sub
    Ici on vérifie que l'utilisateur a bien sélectionné une valeur dans la liste. Et tant qu'il n'a pas sélectionné de valeur il ne peut pas sortir de la liste. La valeur sélectionnée, il passe à la zone de texte NomPreneur
    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 VendeurRetour_Click()
    If VendeurRetour.ListIndex > 0 Then
    Me.NomRepreneur.SetFocus
    ElseIf VendeurRetour.ListIndex = -1 Then
        MsgBox "Vous devez sélectionner un vendeur retour !", vbExclamation
    End If
    End Sub
    Private Sub VendeurRetour_Exit(Cancel As Integer)
    If VendeurRetour.ListIndex = -1 Then
        MsgBox "Vous devez sélectionner un vendeur retour !", vbExclamation
        Cancel = True
        Exit Sub
    End If
    End Sub
    Idem que le tout 1er code. Tant qu'il n'a pas saisi de valeur, il ne peut pas quitter la zone de texte NomRepreneur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub NomRepreneur_Exit(Cancel As Integer)
    If IsNull(NomRepreneur.Value) Or IsEmpty(NomRepreneur.Value) Then
        MsgBox "Vous devez saisir un nom de repreneur !", vbExclamation
        Cancel = True
        Exit Sub
    End If
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Merci, je rentre de WE. .
    Je teste dans la journée et te dis ce que ça donne

  6. #6
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Le code fonctionne, je te remercie.
    Par contre , je pense qu'il faut ajouter plusieurs conditions supplémentaires:
    en français: si date enlevement et nomvendeur et nomrepreneur sont vides, alors je peux cliquer ailleurs pour changer d'enregistrement.
    En l'état actuel, une fois cliqué dans une des 3 cases, je suis obligé de la remplir, même si j'ai choisi le mauvais enregistrement, ou oublié de le choisir
    C'est une appli qui sert à gérer le SAV .La liste correspond à l'ensemble des machines revenues de réparation, prêtes à être cherchées par les clients.
    En toute logique, le vendeur qui rend la machine est censé selectionner en premier l'enregistrement de la machine qu'il rend, puis saisir date, son nom et celui de la personne à qui il donne la machine
    J'essaie de border pour que le vendeur ne puisse pas faire n'importe quoi...

    Si l'utilisateur commence par nomvendeur par exemple, il peut après avoir renseigné ce dernier cliquer pour changer d'enregistrement et ça il ne faut surtout pas.
    En mettant au niveau de chaque champ, il va falloir mettre pas mal de conditions pour couvrir tous les cas de figure...


    Existe t il un moyen de dire à access: on ne peut changer d'enregistrement que si date enlevement et nomvendeur et nomrepreneur sont soit vides, soit tous les 3 remplis?
    Sachant que j'ai déjà les macros qui empêchent de sortir du formulaire si tout n'est pas rempli...

    Cela éviterait un code assez long pour tester les 3 cases.. et les lier entre elles pour éviter qu'une fois une case saisie, on puisse cliquer pour changer d'enregistrement...

    Mon idée est elle réalisable?

  7. #7
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Si je continue sur mon idée, et en essayant ta première réponse, cela donnerait un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_Current()
    If (Forms(FormRentreMachine).RecordSelectors = True) And ((IsNotNull(Date_enlevement.Value) Or IsNotEmpty(Date_enlevement.Value)) Or (IsNotNull(NomRepreneur.Value) Or IsNotEmpty(NomRepreneur.Value)) Or (VendeurRetour.ListIndex > 0)) Then
    MsgBox "Je change d'enregistrement !", vbExclamation
    Me.Refresh
    End If
    End Sub
    Bien sur, la deuxième ligne a des erreurs (ais je déjà dit que j'ai du mal en VBA??): erreur de compilation, fonction non définie et c'est IsNotNull qui est surligné... j'ai mis ça pour dire que justement la date d’enlèvement ne doit pas être nulle.
    Pour être clair: si je change de selecteur et une des 3 cases date enlevement ou nomvendeur ou nomrepreneur est remplie, alors...
    il faudrait mettre un code à la place de la msgbox qui empêche de bouger le selecteur
    en supposant que ce qui est ci dessus soit possible, il faudrait ensuite préciser que si les 3 cases sont remplies ou vides toutes les 3 alors je peux changer de selecteur...

    réalisable??

    merci d'avance

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    IsNotNull n'existe pas: c'est IsNull ou Not IsNull
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Not IsNull(Date_enlevement.Value)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    merci aussi Tee.
    J'ai corrigé , et fait pareil pour IsEmpty, plus d'erreur de syntaxe
    Par contre je ne sais toujours comment mettre un code à la place de la msgbox qui empêche de bouger le sélecteur... as tu une idée?

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    sur l'évènement avant MAJ du formulaire, tu mets 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub Form_BeforeUpdate(Cancel As Integer)
     
    If (Not IsNull(Me.Date_enlevement)) And (IsNull(Me.NomRepreneur) Or IsNull(Me.VendeurRetour)) _
    Or (Not IsNull(Me.NomRepreneur)) And (IsNull(Me.Date_enlevement) Or IsNull(Me.VendeurRetour)) _
    Or (Not IsNull(Me.VendeurRetour)) And (IsNull(Me.Date_enlevement) Or IsNull(Me.NomRepreneur)) _
    Then
        Cancel = True
        If IsNull(Me.Date_enlevement) Then
            MsgBox "Veuiller saisir la date d'enlèvement"
            Me.Date_enlevement.SetFocus
            Exit Sub
        ElseIf IsNull(Me.NomRepreneur) Then
            MsgBox "Veuillez saisir le nom du repreneur"
            Me.NomRepreneur.SetFocus
            Exit Sub
        ElseIf IsNull(Me.VendeurRetour) Then
            MsgBox "Veuillez choisir le nom du vendeur retour"
            Me.VendeurRetour.SetFocus
            Exit Sub
        End If
    End If
     
    End Sub
    Si un des 3 champs obligatoires contient quelque chose et que l'un des 2 autres est vide, il y aura un message d'erreur tant qu'ils ne seront pas tous remplis (mais il y a toujours la possibilité d'appuyer sur la touche Echap pour annuler la saisie en cours)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    C'est exactement ce que je voulais!!!

    Génial

    Merci à tous les deux pour votre intérêt.
    Je vais juste inverser nom repreneur et nom vendeur pour être dans le même ordre que le formulaire.

    Merci encore, je met résolu

  12. #12
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Une question subsidiaire
    Tee, j'ai mis ton code dans d'autres formulaires, en adaptant les noms, ça marche impeccable.
    Cependant dans un formulaire, je voulais ajouter un message sur une quatrième case
    Si les cases Modifiable56 ou Texte58 ou Modifiable60 sont remplies et que le montant du devis est nul (correspondant à la case Texte49 , qui est une case ), alors il me demande de le remplir...
    J'obtiens une erreur de compilation, bloc if sans end if...
    J'ai dû faire une boulette quelque part, mais vu mon niveau abyssal en VBA, je ne vois pas où...

    Le 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
    Private Sub Form_BeforeUpdate(Cancel As Integer)
     
    If (Not IsNull(Me.Modifiable56)) And (IsNull(Me.Texte58) Or IsNull(Me.Modifiable60)) _
    Or (Not IsNull(Me.Texte58)) And (IsNull(Me.Modifiable56) Or IsNull(Me.Modifiable60)) _
    Or (Not IsNull(Me.Modifiable60)) And (IsNull(Me.Texte58) Or IsNull(Me.Modifiable56)) _
    Then
        Cancel = True
        If Me.Texte49 = 0# Then
            MsgBox "Veuiller saisir le montant du devis"
            Me.Texte49.SetFocus
            Exit Sub
        If IsNull(Me.Modifiable56) Then
            MsgBox "Veuiller saisir la décision du devis"
            Me.Modifiable56.SetFocus
            Exit Sub
        ElseIf IsNull(Me.Texte58) Then
            MsgBox "Veuillez choisir la date de décision"
            Me.Texte58.SetFocus
            Exit Sub
        ElseIf IsNull(Me.Modifiable60) Then
            MsgBox "Veuillez saisir le nom du vendeur ayant marqué la décision du client"
            Me.Modifiable60.SetFocus
            Exit Sub
        End If
    End If
    End Sub

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    la ligne 12 est fausse il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ElseIf IsNull(Me.Modifiable56) Then
    à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNull(Me.Modifiable56) Then
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Effectivement, une fois que tu le dis cela parait logique


    Merci encore!!

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

Discussions similaires

  1. [AC-2010] Ouverture lien hypertexte sur sélection enregistrement.
    Par Axe_Débutant dans le forum VBA Access
    Réponses: 5
    Dernier message: 04/01/2015, 12h16
  2. Réponses: 7
    Dernier message: 28/01/2013, 16h00
  3. [XL-2003] Activer une macro sur sélection d'une feuille
    Par Flaguette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2012, 21h41
  4. [E-97] Pb sur fonction enregistrée dans macro complémentaire
    Par babol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/12/2008, 09h38
  5. [access] exécuter macro sur chaque enregistrement
    Par alain105d dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 15h50

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