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 :

Sélection multiple dans une zone de liste


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Points : 60
    Points
    60
    Par défaut Sélection multiple dans une zone de liste
    Bonjour,

    J'ai une zone de liste L_ouvrages qui permet de sélectionner un ouvrage afin d'ouvrir le formulaire correspondant.

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub L_ouvrages_DblClick(Cancel As Integer)
    Dim stDocName As String
    Dim stLinkCriteria As String
     
        stDocName = "F_modification_ouvrages"
        stLinkCriteria = "[IdOuvrage]=" & Me![L_ouvrages]
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    Ce que je voudrais c'est pouvoir sélectionner plusieurs ouvrages dans la zone de liste et donc ouvrir le formulaire pour les ouvrages sélectionnés.

    J'ai créé un bouton de commande pour l'ouverture du formulaire avec le code suivant, mais ça ne fonctionne 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
     
    Private Sub B_ouvrir_ouvrages_Click()
    Dim NbLignes As Long
    Dim NoOuvrage As Long
    Dim i As Long
    Dim j As String
     
    Dim stDocName As String
    Dim stLinkCriteria As String
     
    j = ""
     
    NbLignes = Me.L_ouvrages.ListCount
     
    For i = 1 To NbLignes
        If Me.L_ouvrages.Selected(i) = True Then NoOuvrage = j & Me.L_ouvrages.Value
    Next i
     
    stDocName = "F_modification_ouvrages"
    stLinkCriteria = "[IdOuvrage]=" & j
    DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    Je ne vois pas du tout comment faire!

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Dans une zone de liste (non déroulante) on peut utiliser la sélection multiple (1 propriété à régler dans le controle). Pour traiter les sélections utilise la propriété ItemsSelected du controle dans une boucle. En composant avec un In() tu devrais t'en sortir facilement.

    3 choses sont donc à regarder :

    La propriété Selection multiple du controle (voir l'aide pour son fonctionnement)
    Le ItemsSelected dans VBA
    la clause SQL In().

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    Une idée peut-être (je n'ai pas essayé ): Créer par concaténation l'expression In(10;15;25)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To NbLignes
        If Me.L_ouvrages.Selected(i) = True Then NoOuvrage = j & Me.L_ouvrages.Value & ";"
    Next i
    
    ' Suppression du dernier ;
    j = Left(j,Len(j)-1)
    ' Création de la syntaxe finale
    j= "In(" & j & ")"
    stDocName = "F_modification_ouvrages"
    stLinkCriteria = "[IdOuvrage]=" & j
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Points : 60
    Points
    60
    Par défaut
    J'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim ctl As Control
    Dim varItm As Variant
    Set ctl = Me.L_ouvrages
    For Each varItm In ctl.ItemsSelected
        Debug.Print ctl.ItemData(varItm)
    Next varItm
    Tout fonctionne bien, ce sont bien les numéros d'ouvrages qui s'affichent dans la fenêtre exécution.
    Maintenant ce que je voudrais c'est ouvrir le formulaire "F_modification_ouvrages" qui regroupe les infos sur les ouvrages en filtrant par le/les numéros d'ouvrages.

    Merci

    J'ai essayé ça :
    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
     
    Private Sub B_ouvrir_ouvrages_Click()
    Dim NbLignes As Long
    Dim NoOuvrage As Long
    Dim i As Long
    Dim j As String
     
    Dim stDocName As String
    Dim stLinkCriteria As String
     
    Dim ctl As Control
    Dim varItm As Variant
     
    j = ""
     
    Set ctl = Me.L_ouvrages
    For Each varItm In ctl.ItemsSelected
        j = j & ctl.ItemData(varItm) & ";"
    Next varItm
     
    stDocName = "F_modification_ouvrages"
    stLinkCriteria = "[IdOuvrage]=" & j
    DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    mais j'ai un problème de syntaxe au niveau du filtre. Je ne vois pas trop comment faire..
    peut être est-ce que je devrais passer par une requête sql au lieu d'un filtre pour ouvrir le formulaire...?

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Regarde dans l'aide pour comprendre ce que le code donné par Jeannot45 fait.

    Tu as tout en main, il suffit d'appliquer.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2004
    Messages : 87
    Points : 60
    Points
    60
    Par défaut
    c'est bon, j'ai réussi :
    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
     
    Private Sub B_ouvrir_ouvrages_Click()
    Dim NbLignes As Long
    Dim NoOuvrage As Long
    Dim i As Long
    Dim j As String
     
    Dim stDocName As String
    Dim stLinkCriteria As String
     
    Dim ctl As Control
    Dim varItm As Variant
     
    j = ""
     
    Set ctl = Me.L_ouvrages
    For Each varItm In ctl.ItemsSelected
        j = j & ctl.ItemData(varItm) & ","
    Next varItm
     
     
    ' Suppression du dernier ;
    j = Left(j, Len(j) - 1)
    ' Création de la syntaxe finale
    j = "In (" & j & ")"
    stDocName = "F_modification_ouvrages"
    stLinkCriteria = "[IdOuvrage] " & j
    DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    merci à tous de votre aide!

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

Discussions similaires

  1. [AC-2003] Suppression d'un selection multiple dans une zone de liste
    Par yieiyiei dans le forum VBA Access
    Réponses: 15
    Dernier message: 25/02/2015, 15h34
  2. Réponses: 1
    Dernier message: 06/07/2007, 13h44
  3. selection multiple dans une zone de liste
    Par issam16 dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 10h44
  4. sélection multiple dans plusieurs zones de liste
    Par malabar92 dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2006, 01h08
  5. Sélection valeur par défaut dans une zone de liste
    Par Cécile154 dans le forum IHM
    Réponses: 2
    Dernier message: 15/02/2005, 18h20

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