Ajouter un élément dans une liste déroulante – Episode 2

Ces articles pourraient également vous intéresser...

14 réponses

  1. Hervé Inisan dit :

    Brutus > Ça ne marche pas avec l’autre méthode du fait que le formulaire est ouvert en mode “Boîte de dialogue” (acDialog). Dans ce cas, la boîte de dialogue bloque l’exécution du code VBA appelant (donc le Forms![...] = ... n’est pas traité tout de suite. Ensuite, lorsque le formulaire est fermé, l’exécution reprend, la ligne de VBA peut s’exécuter mais le formulaire n’existe plus (d’où le message d’erreur).

  2. Brutus dit :

    En fait, pour faire apparaître automatiquement dans un 2e formulaire le nom recherché dans la liste déroulante d’un premier formulaire (et qui n’existe pas, donc ça déclenche l’événement NotInList), il faut insérer ce code dans le 2e formulaire :

    Private Sub Form_Load ()
    If Not IsNull(Me.OpenArgs) Then
    Me![Nom] = Me.OpenArgs
    End If
    End Sub

  3. Brutus dit :

    Merci Hervé. Malgré tout, ça ne fonctionne pas.
    Dans le formulaire 1, appelé Lexique, j’ai ce code :

    Option Compare Database

    Private Sub Form_Activate()
    On Error Resume Next
    Me.Modifiable0.Requery
    End Sub

    Private Sub Modifiable0_NotInList(NewData As String, Response As Integer)
    If MsgBox(“Voulez-vous ajouter ” & NewData & ” au Dictionnaire ?”, _
    vbYesNo + vbQuestion + vbDefaultButton2, “Ajout”) = vbYes Then

    DoCmd.OpenForm “Termes”, , , , acFormAdd, acDialog, NewData
    Forms![Termes]![Terme] = NewData
    Response = acDataErrAdded
    Else
    Response = acDataErrContinue
    Modifiable0.Undo
    End If
    End Sub

    la valeur NewData est bien enregistrée (véifiée par un MsgBox à l’ouverture du formulaire 2), mais la valeur n’apparaît pas dans son champ, et à l’enregistrement du formulaire 2 j’ai un message d’erreur 2450, me disant que le formulaire “Termes” n’existe pas… alors que c’est lui qui est ouvert !
    Et le nouveau terme est enregistré dans ma base, avec le champ vide !

    Le code du formulaire 2, nommé Termes, est le suivant :

    Option Compare Database

    Private Sub Form_Open(cancel As Integer)
    ‘Test
    MsgBox Me.OpenArgs
    End Sub

    Private Sub Enregistrer_Click()
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.Close
    End Sub

    J’ai essayé de remplacer NewData par Me.OpenArgs, ça ne change rien.

    Auriez-vous une idée d’une solution pour passer et écrire ce NewData à sa place dans le 2e formulaire ? Merci.

  4. Hervé Inisan dit :

    Brutus > J’imagine qu’il y a un DoCmd.OpenForm dans l’événement NotInList. A vue de nez, il suffit d’ajouter après :

  5. Brutus dit :

    Bonjour,
    Super, cet exemple fonctionne bien, mais je voudrais faire plus. J’ai un événement not in list qui propose d’ouvrir le 2e formulaire, au lieu de cliquer sur “ajouter”. Je souhaiterais qu’un nom, recherché dans la liste déroulante mais qui n’y figure pas, apparaisse directement dans le 2e formulaire de saisie qui va s’ouvrir, et que je puisse saisir les autres infos concernant la personne (suite à l’événement not in list, le formulaire de saisie s’ouvre bien sur un nouvel enregistrement, mais le formulaire est complètement vierge, j’aimerais que la valeur – présente dans NewData et aussi dans un OpenArgs – soit automatiquement écrite dans mon champ “nom”). Est-ce possible ? Merci.

  6. greg0uld dit :

    Hervé Inisan => Merci Hervé pour ta réponse, je me suis débrouillé autrement afin de rafraîchir mes listes. J’ai créer un bouton de rafraîchissement par combobox avec le code VBA correspondant pour chacune d’elle. Du coup, sa fonctionne parfaitement.
    Merci encore,

    Bonne continuation!

  7. Hervé Inisan dit :

    cyrielle > Ça peut se faire de différentes manières, dont une requête UNION. Un peu délicat à détailler dans un commentaire, mais si j’ai un peu de temps, j’essaierai de poster un article sur le sujet…

  8. Hervé Inisan dit :

    greg0uld > Est-ce que les autres listes existent bien sur le formulaire (et avec ces noms précis) ?

    Au cas où, l’idée serait de supprimer la ligne On Error Resume Next, pour voir où ça peut casser (et de la remettre ensuite).

  9. greg0uld dit :

    Bonjour,

    Ce tuto est super il m’a permis de bien avancer dans mon projet. J’ai cependant une petite question concernant l’actualisation de la combobox. Dans mon formulaire principal d’ajout, j’ai plusieurs combobox à actualiser. Mon code a donc cette forme :
    Private Sub Form_Activate()
    On Error Resume Next
    cboCategory.Requery
    cboTechno.Requery
    cboVoltage.Requery
    cboCapacity.Requery
    End Sub
    Ce code me permet d’actualiser la première liste à sa voir cboCategory mais pas les autres… Que faire ? Erreur dans le code ? (Je suis novice en VBA…)
    Aidez moi svp,
    Merci

  10. cyrielle dit :

    Bonjour,

    Ici, vous proposez une méthode pour ajouter un élementà la liste. Mais comment fait t on pour ajouter ” aucun filtre ” à la liste déroulante ?

    Merci par avance

  11. Hervé Inisan dit :

    Guillaume > Ça veut dire que le bouton “Ajouter” ne fonctionne plus à partir de la deuxième fois ? (plus d’effet ?)

  12. Guillaume dit :

    Bonjour,

    Je d’utiliser cette méthode pour ajouter une personne à une liste déroulante, cela marche parfaitement. Cependant, après avoir ré-ouvert ma base, je ne peux plus ajouter de nouvel utilisateur, seulement modifier la premiere ligne de ma base…
    Une idée d’où peut venir le problème ? (niveau access débutant)

    Merci par avance,

  13. Hervé Inisan dit :

    az0te > Et demain, une petite variante pour Access 2007 et +. Mais l’essentiel est ici. :)

  14. az0te dit :

    Merci beaucoup pour cette article!! il met vraiment d’une grande aide. Et surtout ayant poser la question que hier avoir un post si complet déjà maintenant c’est incroyable !!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">