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 :

Ajouter des lignes à une listbox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut Ajouter des lignes à une listbox
    Bonsoir,

    Je réalise un programme dans lequel je suis amené à compléter une listbox à la demande de l'utilisateur. Vous trouverez ci dessous une version d'essai correspondant à mon besoin. Il me sert à tester le fonctionnement de ce morceaux pour lequel je "pêche"

    J'ai un formulaire Userform1 avec une listbox et 3 boutons : 1 bouton remplir la listbox (en automatique à l'ouverture sur mon programme), 1 bouton ajout d'une ligne qui ouvre un autre userform, 1 bouton qui renvoie toutes les données de la listbox vers une feuille excel.

    ci dessous 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 CommandButton1_Click()
     
    'charge le contenu de la listbox list
     
    UserForm1.list.RowSource = "f1!a2:b7"
     
    End Sub
     
    Private Sub CommandButton2_Click()
     
    'charge le form 2 pour ajout et ajoute une liste à la listbox list2
     
    Load UserForm2
    UserForm2.List2.RowSource = "f2!a2:b7"
    UserForm2.Show
     
    End Sub
     
    Private Sub CommandButton3_Click()
     
    'copier le contenu de listbox list dans la feuille excel f1
     
    Sheets("f1").Range("d2").Resize(UserForm1.list.ListCount, 2) = UserForm1.list.list()
    Unload UserForm1
     
    End Sub
    Mon problème réside dans le second formulaire userform2 dans lequel se trouve une listbox list2 dans le quel l'utilisateur coche une case suite réglage de la propriété liststyle à fmListStyleOption. L'utilisateur coche une ou plusieurs lignes et clique sur un bouton commandbutton permet de valider son choix et normalement ajouter cette ou ces ligne(s) dans la listbox list1 dans Userform1.

    J'obtient le message suivant dans la configuration actuelle : erreur d'éxécution 70, accés refusé.
    J'ai essayé plusieurs formes sans succès et j'ai eu des messages différents mais jamais un résultat.
    Ci dessous le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
     
    MsgBox UserForm2.List2.Value
    UserForm1.list.SetFocus
    UserForm1.list.AddItem UserForm2.List2.Value
     
    Unload UserForm2
     
    End Sub
    Merci encore pour votre aide précieuse

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Si Enabled est True et Locked False, je jette le gant.

  3. #3
    Invité
    Invité(e)
    Par défaut bonjour,
    dis moi comment tu donnes le focus à un contrôle don le USF n'est pas actif (UserForm1.list.SetFocus)?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton2_Click()
     
    'charge le form 2 pour ajout et ajoute une liste à la listbox list2
     
    UserForm2.List2.RowSource = "f2!a2:b7"
    UserForm2.Show vbModal
     Me.List.SetFocus
    Me.List.AddItem UserForm2.List2.Value
    Unload UserForm2
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
     MsgBox UserForm2.List2.Value
    Me.Hide
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut solution intéressante mais toujours bloqué
    Bonsoir,

    Je confirme à Defluc que les paramètres sont bien ceux qu'il cite.

    J'ai essayé votre solution Rdurupt, elle est intéressante, en particulier sur son fonctionnement.
    S'il existe un tutoriel sur ces fonctionnements modal cela m'intéresse.

    Pour infos, j'ai utilisé le focus en pensant réglé le soucis mais cela n'a pas avancé. Le test sans le focus me donne le même résultat.

    PAR CONTRE, nous sommes toujours bloqué car j'ai le même message d'erreur que ci dessus et le débogueur me signale cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.List.AddItem UserForm2.List2.Value
    A votre avis, y aurait il pas un problème de type de champs ?

    Sinon la msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox UserForm2.List2.Value
    me sert uniquement à vérifier le contenu de la donnée et sera retiré au final.

    Je suis novice et commence à vraiment caler !!!!!
    Merci pour votre aide

  5. #5
    Invité
    Invité(e)
    Par défaut
    Verrouille le focus sur le USF tu ne peux pas te positionner sur un autre ou même un cellule excel. ça évite que le code continue dans le sub qui appel le USF. le me.hide masque le USF et redonne la main au sub appelant qui continu ou il en était. un msgbox en est un USF vbModal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'charge le form 2 pour ajout et ajoute une liste à la listbox list2
    Private Sub CommandButton2_Click()
    UserForm2.List2.RowSource = "f2!a2:b7"
    UserForm2.Show vbModal
    f1.[A8]= UserForm2.List2.List( UserForm2.List2.ListIndex,0)
    f1.[B8]= UserForm2.List2.List( UserForm2.List2.ListIndex,1)
    me.list.RowSource = "f1!a2:b8"
    Unload UserForm2
    End Sub
    tu ne peux pas faire un AddItem car la liste est assignée a un plage de cellule donc interdit en écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UserForm1.list.RowSource = "f1!a2:b7"
    tu dois écrire dans ta feuille excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    f1.[A8]= UserForm2.List2.List( UserForm2.List2.ListIndex,0)
    f1.[B8]= UserForm2.List2.List( UserForm2.List2.ListIndex,1)
    et redimensionner ta plage de cellules:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.list.RowSource = "f1!a2:b8"
    Dernière modification par Invité ; 30/01/2014 à 23h02.

  6. #6
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut Effectivement
    Bonjour,

    J'ai déjà eu ce cas auparavant et je passais par une feuille excel.
    Dans ma feuille d'où les listes de données proviennent doivent rester fixe car ils servent de paramètres.

    Si on ne peut faire autrement que par une feuille excel, je vais créer une feuille qui gérera cette liste et modifierai ma propriété rowsource comme tu me le préconises, et comme je l'ai déjà fait.

    Par contre ton code est bien plus court que le mien et je vais l'exploiter.

    Merci pour ton aide


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

Discussions similaires

  1. [AC-2003] Ajouter des lignes à une tables depuis Excel
    Par DonKnacki dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/12/2010, 16h04
  2. [AC-2007] Ajouter des lignes à une liste basée sur une requête
    Par Cinesra dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2010, 13h19
  3. [WD14] Thread qui ajoute des lignes à une table
    Par rndhnqz dans le forum WinDev
    Réponses: 11
    Dernier message: 09/02/2010, 12h48
  4. Ajouter des valeurs à une listbox multicolonnes
    Par bobosh dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/10/2008, 09h23

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