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 et VBA Excel Discussion :

Attribuer une valeur à une listbox sans cliquer sur un item [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut Attribuer une valeur à une listbox sans cliquer sur un item
    Bonjour,
    Comme dit dans le titre du sujet, je souhaite attribuer une valeur à une listbox sans que l'opérateur sélectionne une valeur.
    Vous allez me dire à quoi ça sert mais pour faire simple, j'ai une base de données d'acquisitions avec plusieurs paramètres sélectionnés par listbox.
    Je souhaite que l'opérateur puisse modifier une acquisition, dans ce cas, il la sélectionne et tous les paramètres se préremplissent dans les listbox, l'opérateur modifie ce qu'il a à modifier et enregistre.
    Or j'arrive à mettre en surbrillance l'item dans la listbox mais listbox.value ne prends pas la valeur (pas à chaque fois...)

    J'ai essayé .listindex=k, .activated(k)=true,.value=LB_application.List(k) mais ça ne fonctionne pas, quand je récupère la valeur de la listbox je récupère "".

    Quelqu'un peut-il m'aider, le fichier est en PJ.

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut


    premiere petite question, la zone de liste que tu souhaites activer est-elle mono ou multi valeur ?

    POur activer un item, tu peux le faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Selected(1) = True
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut
    Merci, cela fonctionne pour mettre en surbrillance l'item sélectionné dans la listbox, par contre la valeur de la listbox est null.
    Dans le bout de code ci-dessous, LB_application.Selected(k) = True me sélectionne bien l'item k, pas de problème, par contre MsgBox (LB_application.Value) m'affiche ""..., il ne prends pas la valeur, vous pouvez faire le test sur le fichier joint plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For k = 0 To LB_application.ListCount - 1
            If LB_application.List(k) = .Range("B" & ligne_acq_modif) Then
            LB_application.Selected(k) = True
            MsgBox (LB_application.Value)
            End If
    Next k
    Slts,

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    Attention, Listbox.Value sera toujours null si la listbox est multi selection
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut
    Toutes mes listbox sont à sélection unique 0-fmMultiSelectSingle

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox LB_application.List(k)

  7. #7
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut
    Toujours pas...
    J'ai besoin de récupérer la valeur de la list box mais celle-ci ne prends pas systématiquement la valeur. Il y a un côté aléatoire qui me gêne et rends compliqué le traitement du problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For k = 0 To LB_application.ListCount - 1
            If LB_application.List(k) = .Range("B" & ligne_acq_modif) Then
             LB_application.Selected(k) = True
            LB_application.Value = LB_application.List(k)
            End If
    Next k

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    - je n'ai pas ouvert ton classeur (je n'en ouvre jamais)
    - aucune raison (avec les seules explications que tu donnes), pour que ton code (y compris le tout premier montré) ne fonctionne pas comme tu l'entends
    N'aurais-tu pas par hasard mis d'autres instructions dans un autre évènement (change, par exemple et surtout) de ta listbox ?
    - ceci étant dit : je ne comprends pas l'utilité d'un tel mécanisme. Nul besoin de sélectionner pour connaître la valeur d'un item ! Et la valeur d'un item est à lire ainsi :
    Exemple avec une listbox1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For k = 0 To ListBox1.ListCount - 1
            'If  (tes conditions patatiopatata) Then        
            MsgBox ListBox1.List(k)
            'End If
    Next k
    EDIT : je ne sais pas (sans ouvrir le classeur) si cette listbox est sur un userform ou sur une feuille de calcul.
    si sur userform : connaît les deux évènements Change et Click
    si sur feuille de calcul : connaît l'évènement click

    Il se trouve que cette seule instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LB_application.Selected(k) = True
    déclenche un évènement click + (si sur userform) un évènement Change
    Si l'un de ces deux évènements contient une instruction, elle est exécutée avant même ton msgbox. Et si elle est contradictoire, ma foi ...
    Une "instruction contradictoire" provoquant cette réaction serait par exemple (et entre autres) la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub LB_application_Click()
     LB_application.ListIndex = 0
    End Sub
    Ce qui mettrait (avant même ton msgbox,) la propriété Value de ta listbox à "" si le 1er article de la listbox (d'index 0) est vide !

  9. #9
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut
    Bonjour,
    Merci à tous d'avoir pris le temps de répondre à ma demande, ça ne fonctionne toujours pas mais la discussion peut être cloturée, je vais contourner ce problème en abordant ma macro différemment.
    Le mode pas à pas montre bien qu'il n'y a aucune instruction contradictoire avant le MsgBox ListBox1.List(k), il doit y avoir une subtilité quelque part...

  10. #10
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2016
    Messages : 10
    Par défaut
    Bonjour,
    Pour finir et après de nombreuses recherches sur internet, il s'avère que c'est un bug connu d'excel .
    La solution est de remplacer listbox.value par listbox.list(listbox.listindex).

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

Discussions similaires

  1. Lancer une action struts sans cliquer sur un bouton submit
    Par cryosore94 dans le forum Struts 1
    Réponses: 10
    Dernier message: 22/03/2009, 16h08
  2. Réponses: 5
    Dernier message: 20/11/2008, 10h12
  3. Lancer une video avec ShadowBox sans cliquer sur le submit
    Par french-petzouille dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/10/2008, 09h30
  4. fermer une JFrame sans cliquer sur la croix rouge
    Par canary dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 26/04/2008, 13h26
  5. Réponses: 5
    Dernier message: 26/12/2007, 12h51

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