VB, important

Résolu
Bonjour à tous, (désoler pour le titre pas très évocatuer mais je ne savais pas quoi mettre.

Je vous explique mon problème

je dois faire apparaitre des données contenues dans une colone exel dans une combobox, jusque la rien de bien méchant... Mais le document ayant plusieurs page j'ai fait une listbox pour pouvoir choisir une page en particulier, dans toutes les page la colonne qui m'interresse est la colone A donc il faudrait que la combobox s'actualise en fonction de la page séléctionnée.

Par exemple :

je sélectionne la feuille "feuil1", dans la combobox se trouvent alors les données de la colonne A de la feuille "feuil1". Je sélectionne la feuille "ABC", maintenant dans la combobox se trouvent les données de la colonne A de la feuille "ABC"...

De plus étant donnée que les colonnes des différentes feuilles n'ont pas le même nombre de données, il faudrait que la combobox n'affiche que les case ou il y a une donnée.

je sais pas si j'ai été très claire n'hésite pas a me demander plus d'info si besoin

Merci d'avance pour votre aide,

Charly

7 réponses

  1. Bonjour,

    Je pense avoir compris ce que vous souhaitez faire mais je ne vois pas ou vous péchez...

    Récupérer des données d'excel n'est pas trop compliqué. Pour récupérer les infos sauf les cases vides, il suffit de faire une boucle qui recopie dans la combobox si la valeur de la case est != "", non?
    1. récupérer des données d'exel et effectivement simple mais les récupérer en fonction du feuille qu'on a choisis dans une listbox et déjà plus compliqué (pour moi) (ps : les programmes que j'ai fais jusqu'à maintenant de part mes études n'étaient que des programmes scientifiques qui utilisaient le logiciel VB pour résoudre des équation etc... je n'ai jamais utilisé les macro exel donc faire le lien entre exel et VBA reste un peu compliqué pour moi.)
  2. Peux-tu mettre ton code actuel afin de voir ce qui fait défaut dans ton code ?
    1. Je n'ai pas de code, car je ne sais pas comment commençer cette manip' j'ai uniquement dans mon petit debut de programme la userform, les tableaux de données et les ligne de code permettant de mettre les différente feuilles dans une listbox.

      Je cherche depuit hier mais je n'ai pas trouver de post ou tuto se rapprochant de ce que je veux faire, c'est pourquoi je pose la question sur ce forum.
      1. Je ne sais pas si c'est ce que tu veux mais essai ça :
        J'ai créé une combobox (Combobox1) sur la Feuil1 qui intégrera les données des colonnes A
        J'ai créé une autre Combobox (Combobox2) toujours sur la Feuil1 qui contiendra le nom des différentes feuilles
        Et enfin un petit bouton GO (Sur la Feuil1 egalement) afin de lancer le prog

        **************************************************************

        Private Sub GO_Click()
        Dim Feuille, Donnees
        Feuille = ComboBox2.Value
        'Sélectionner la feuille choisit dans le Combobox2
        Worksheets(Feuille).Activate
        'Sélection de la cellule A1
        Worksheets(Feuille).Range("A1").Select
        'Boucle de emplissage de la Combobox1
        Do
        Donnees = ActiveCell.Value
        'Test si la cellule est vide pour quitter la boucle
        If Donnees = "" Then
        Exit Do
        Else
        End If
        'Remplissage de la Combobox1
        Worksheets("Feuil1").Activate
        Worksheets("Feuil1").ComboBox1.AddItem Donnees
        'Descendre d'une cellule
        Worksheets(Feuille).Activate
        ActiveCell.Offset(1, 0).Activate
        Loop
        End Sub

        **************************************************************

        *Pour mettre les nom de feuille dans la ComboBox2 j'ai utilisé ça :

        Private Sub Workbook_Open()
        Worksheets("Feuil1").ComboBox2.AddItem "Feuil1"
        Worksheets("Feuil1").ComboBox2.AddItem "Feuil2"
        Worksheets("Feuil1").ComboBox2.AddItem "Feuil3"
        End Sub

        En espérant que c'est ce que tu cherchais... (Bon je n'ai pas utilisé de Userform, mais le principe doit pas trop changer)
        1. ce n'est pas exactement sa mais si j'ai tout compris cela peu m'être d'une grande aide.

          petites precisions :
          - je suis obligé de faire une userform car je ne doit pas modifier les pages de données qui sont faite par un robot de dimensionnement de pièce.
          - je ne doit pas avoir a appuyer sur un bouton pour faire ce que je vous demande car ce n'est que la partie "saisie de données" de mon programme les bouton seront réservés pour l'analyse des données

          néamoin je vais fortement m'aider de ce que vous avez fait et je vous tiens au courant quand j'ai fini (j'ai bientôt débaucher se sera peu-être demain)
          1. Bonjour,
            si je comprend bien tu as une userform dans lequel il y a une listbox avec le nom des feuilles du classeur. En fonction du choix dans la listbox afficher dans un combobox la colonne A de la feuille?

            Si c'est le cas voici un exemple avec une listbox qu'on va appeller listbox1 et une combobox qu'on va appeller combobox1:
            - a l'initialize du userform on met les noms des feuilles dans la listbox comme ceci :
            Private Sub UserForm_Initialize()
            
            'je boucle sur la collection des feuilles du classeur
            For Each sh In Worksheets
            'j'ajoute le nom de la feuille à la listbox
            Me.ListBox1.AddItem sh.Name
            Next sh
            
            End Sub
            


            - ensuite pour remplir la combobox il faut utiliser les événements du control listbox. pour l'exemple on va prendre le double_click. Ainsi en faisant un doubleclic sur un item de ta listbox il va remplir le combobox, comme ceci :
            Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
            
            'j'utilise la feuille sélectionnée dans la listbox
            With Sheets(Me.ListBox1.Value)
            'je met dans un tableau les cellules A1:A et dernière cellule utilisée
            tblcombo = .Range("A1:A" & .Range("A" & Rows.Count).End(xlUp).Row)
            End With
            
            With Me.ComboBox1
            'je vide le combobox
            .Clear
            'je remplis la combo avec le tbl ci-dessus
            .List = tblcombo
            End With
            
            End Sub
            


            Dis mois si j'ai bien saisie, et adpate à tes besoins.
            A+
            1. sa ma l'air exactement sa, je reviens pour vous dire si sa fonctionne par contre je ne comprends pas ce qui est entre () dans "Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)"
            2. Bonjour,
              cela sert à identifier le double clic. si double clic cancel retourne une valeur vrai et lance la macro. c'est une valeur standard.
          2. C'est bon sa marche! ;)
            MERCI beaucoup rv83toulon il ma fallut juste faire deux modif minimes car les ligne du style ".clear" ne fonctionnaient pas et ce qu'il y avait entre parenthèses au debut de monctionnait pas non plus donc voici le code fini :

            Private Sub ListBox1_Click()

            'j'utilise la feuille sélectionnée dans la listbox
            With Sheets(UserForm.frm_feuilles.ListBox1.Value)
            'je met dans un tableau les cellules A1:A et dernière cellule utilisée
            tblcombo = .Range("A5:A" & .Range("A" & Rows.Count).End(xlUp).Row)
            End With

            With UserForm.frm_debut.ComboBox1
            'je vide le combobox
            frm_debut.ComboBox1 = Clear
            'je remplis la combo avec le tbl ci-dessus
            frm_debut.ComboBox1.List = tblcombo
            End With

            End Sub

            voilà maintenant il faut que je fasse des graphe avec les données compris entre ce que j'ai choisis dans les combobox1 et 2 (la 2 affichant les même données que la 1)

            mais je vais essayer de m'arracher les cheveux avant de revenir demander votre aide ^^

            Encore merci!
            1. Heureux d'avoir pu t'aider