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 :

Remplir une zone de liste grâce à une selection dans une autre zone [AC-2000]


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2010
    Messages : 149
    Points : 171
    Points
    171
    Par défaut Remplir une zone de liste grâce à une selection dans une autre zone
    Bonjour à tous,

    J'ai un formulaire dans lequel ce trouve deux zones de liste :
    ChoixProg
    ListeEx

    Je suis censé selectionné une ligne dans la liste ChoixProg pour la mettre dans ListeEx, grâce a un bouton

    Voila le code du bouton :

    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
    Sub AjouterProgramme()
    DoCmd.SetWarnings (False)
    DoCmd.RunSQL "Insert into [tempoProgramme] ([Programme]) values (" & Chr(39) & Me.Liste2.Value & Chr(39) & ")"
     
    With Me.Liste6
    'boucle de parcours de la listBox
     For i = 0 To Me.ListeExport.ListCount Step 1
      If Trim(Me.ListeExport.Column(0, i)) <> "" Then
      tempString = Trim(Me.ListeExport.Column(0, i))
      vfamille = vfamille & ";" & tempString
      'MsgBox vfamille
      End If
     Next i
    End With
    'Ajout de la ligne issue de la combobox
    tempString = Me.ChoixProg.Value
    If vfamille <> "" Then
     vfamille = vfamille & ";" & tempString
    Else
     vfamille = tempString
    End If
    'Affichage dans la listbox
    If vfamille <> "" Then
     Me.ListeExport.RowSource = vfamille
    End If
    'VFamille = Me.cmbProgramme.Value
    'Me.ListeProgramme.RowPDP Source = VFamille
    End Sub
    Cependant, rien ne se passe

    Je tiens à préciser que je reprends la conception de ce formulaire et que le code n'est pas de moi

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2010
    Messages : 149
    Points : 171
    Points
    171
    Par défaut
    J'ai ultra simplifié le code et il me reste seulement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BoutonAjouter_Click()
     
    Me.ListeExport.RowSource = "Select Program.IDPROGRAM, Program.ProgramName FROM PROGRAM where IDPROGRAM = [Forms]![FormsExport]![ChoixProg].Value"
     
    Me.Refresh
    End Sub
    Cependant, en appuyant sur le bouton, j'ai toujours q'une seule ligne dans ma liste alors que je voudrais en avoir plusieurs.

    Comment puis-je faire?

    Merci

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    Bonjour,

    il y a 2-3 choses qui ne servent à rien dans le code (du premier post) mais normalement ca devrait ajouter la valeur.

    Vérifie que la propriété "sélection multiple" de ChoixProg est bien sur "Aucun" et que l'événement Après MAJ appelle toujours AjouterProgramme()

    Attention que la façon dont la liste est remplie dans ton premier post laisse penser qu'il attend une liste de valeur et dans ton deuxième post tu le remplis avec une requête.

    Quel est le RowsourceType? (origine source)

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2011
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par Tydher Voir le message
    J'ai ultra simplifié le code et il me reste seulement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub BoutonAjouter_Click()
     
    Me.ListeExport.RowSource = "Select Program.IDPROGRAM, Program.ProgramName FROM PROGRAM where IDPROGRAM = [Forms]![FormsExport]![ChoixProg].Value"
     
    Me.Refresh
    End Sub
    Cependant, en appuyant sur le bouton, j'ai toujours q'une seule ligne dans ma liste alors que je voudrais en avoir plusieurs.

    Comment puis-je faire?

    Merci
    Remplaces la clause WHERE par HAVING. La piste est là je pense

    Aussi, il n'y a peut-être pas besoin de .Value

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2010
    Messages : 149
    Points : 171
    Points
    171
    Par défaut
    Euh aucune idée pour le RowSource Type.

    Mais comme j'ai repris ce formulaire et que la structure de la base à changé, j'ai changé de mode de fonctionnement.

    Maintenant j'ai une table TempoProg qui stocke les valeurs choisi sur clic de la zone de liste ChoixPRog, et la source de ma zone ListeExport est le contenu de la table TempoPRog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ProgName = ("Select Program.ProgramName from Program where IDPROGRAM = " & [Forms]![FormsExport]![ChoixProg] & "")
    Set ProgN = CurrentDb.OpenRecordset(ProgName)
    Name = ProgN.Fields("ProgramName").Value
     
    DoCmd.RunSQL ("Insert into TempoProg values (" & [Forms]![FormsExport]![ChoixProg] & ",'" & Name & "')")
     
    Me.Refresh
    Mais j'ai une erreur sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Name = ProgN.Fields("ProgramName").Value
    me disant que la propiété est en lecture seule et que je ne peux pas la définir... !!!

    Je ne vois pas pourquoi il m'affiche cette erreur !

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    Citation Envoyé par facedeharicot Voir le message
    Remplaces la clause WHERE par HAVING. La piste est là je pense

    Aussi, il n'y a peut-être pas besoin de .Value
    Having est utilisé pour les requêtes avec regroupement, ce qui n'est pas le cas ici.

    Euh aucune idée pour le RowSource Type.
    propriété "origine source" de ta liste doit être sur table/requêtes

    Name = ProgN.Fields("ProgramName").Value
    Name est le nom de ton formulaire courant (ca équivaut à Me.Name), il est effectivement en lecture seule, pourquoi essayes tu de le changer?

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2010
    Messages : 149
    Points : 171
    Points
    171
    Par défaut
    J'essai pas de le changer justement.
    Je viens de me rendre compte à l'instant que c'etait le nom de mon formulaire, donc du coup j'ai changé le nom de la variable et j'arrive à faire ce que je veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DoCmd.SetWarnings False
     
    ProgName = "Select Program.ProgramName from Program where IDPROGRAM = " & [Forms]![FormsExport]![ChoixProg] & ""
    Set ProgN = CurrentDb.OpenRecordset(ProgName)
    ProgrammeName = ProgN.Fields("ProgramName").Value
     
    DoCmd.RunSQL ("Insert into TempoProg values (" & [Forms]![FormsExport]![ChoixProg] & ",'" & ProgrammeName & "')")
     
    Me.Refresh
     
    DoCmd.SetWarnings True
    J'aurais plus qu'à supprimé toute les données de la table TempoProg a chaque ouverture du formulaire pour avoir ma liste vide.

    Merci beaucoup !

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    ProgName = ...
    Set ProgN = ...
    ProgrammeName = ...
    question rien avoir mais, pourquoi encombre tu la mémoire avec des variables inutiles?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim programName As Recordset
    Set programName = CurrentDb.OpenRecordset("Select Program.ProgramName from Program where IDPROGRAM = " & [Forms]![FormsExport]![ChoixProg] & "")
    DoCmd.RunSQL ("Insert into TempoProg values (" & [Forms]![FormsExport]![ChoixProg] & ",'" & programName.Fields("ProgramName") & "')")

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2010
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2010
    Messages : 149
    Points : 171
    Points
    171
    Par défaut
    C'est une bonne question
    Je pense que je fait comme ça car c'est plus simple de controler la valeur des variables lorsque je fais un pas à pas détaillé.

    Après c'est vrai que c'est plus rapide avec ce que tu viens de m'envoyer

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

Discussions similaires

  1. [AC-2010] Récupérer dans une table la liste des fichiers contenus dans un répertoire
    Par possible924 dans le forum VBA Access
    Réponses: 6
    Dernier message: 22/02/2013, 22h00
  2. [XL-2003] Aficher une colonne suivant un critère de selection dans une page
    Par Imitator92 dans le forum Excel
    Réponses: 1
    Dernier message: 21/01/2011, 20h30
  3. Réponses: 1
    Dernier message: 11/11/2010, 16h48
  4. Réponses: 1
    Dernier message: 31/10/2008, 00h20
  5. Réponses: 1
    Dernier message: 13/09/2006, 11h50

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