MsgBox des éléments de la Listbox

Bonjour,

Je suis débutant en macros. Je souhaite réaliser une petite macro, j'ai besoin de votre aide s'il vous plaît.

J'aimerais bien qu'une listbox liste toutes les feuilles d'un fichier excel. Il faudrait ensuite qu'il soit possible pour l'utilisateur de sélectionner un ou plusieurs des éléments de cette listbox. (je crois qu'il suffit pour ça d'activer une propriété de la listbox)

Ensuite, il y aurait un bouton où l'utilisateur cliquerait. En faisant cela, apparaîtra un Msgbox qui nous écrit un à un les éléments que l'utilisateur a sélectionnés dans la listbox (je pensais pour ça à une boucle sur les éléments sélectionnés)

Merci d'avance vraiment

bonjour,

dans to Userform

Private Sub UserForm_Initialize()
Dim i As Byte, Nom As String

    For i = 1 To ActiveWorkbook.Sheets.Count              ' boucle sur les onglets de ton classeur
        Nom = Sheets(i).Name
        ListBox1.AddItem (Nom)                                    ' rempli la ListBox avec le nom des onglets
    Next i

End Sub

dans les propriétés de ta ListBox tu dois choisir "MultiSelect -> 1 - fmMultiSelectMulti

dans ton CommandButton

Private Sub CommandButton1_Click()
Dim i As Byte

   With UserForm1.ListBox1
        For i = 0 To .ListCount - 1                     ' boucle sur les Items de la ListBox1
            If .Selected(i) Then MsgBox .List(i)     ' affiche les onglets selectionnés
        Next
    End With

End Sub

Bonjour,

Une petite précision, la propriété "Sheets" retourne toutes les feuilles du classeur et donc aussi les feuilles graphiques. Si tu ne veux que les feuilles de calcul, il te faut utiliser la propriété "Worksheets".

Hervé.

Bonjour titico et Hervé,

Je vous remercie vraiment. Titico j'ai essayé le code et il marche parfaitement, vraiment j'en suis content.

Et toi aussi merci Hervé pour ton information car jusqu'à présent je n'avais jamais compris la différence entre les deux.

Merci encore à vous. Là je vais poster un nouveau fil et si vous interveniez j'en serai ravi car vos réponses sont à la fois claires et efficaces. Il se nommera "écrire dans labelbox sous conditions"

Re,

Maintenant que j'ai bien compris cette partie, j'aimerais bien améliorer le code du coup. J'espère que cela ne vous dérange pas bien sûr que je vous sollicite à nouveau.

Voilà la nouvelle idée:

Je voudrais que pour chaque feuille sélectionnée dans la listbox, il y ait une étude comparative entre ces feuilles.

J'ai commencé à le faire et le voici dans le fichier joint mais ça ne marche pas très bien.

Par exemple, supposons que je sélectionne feuille 1 et feuille 3 et après je clique sur le bouton. Alors il apparaît un nouveau fichier Excel où on retrouve deux colonnes nommées: "Feuilles" et "Valeur Puissance". Alors il faut que sous la colonne "Feuilles" apparaissent Feuille 1 suivi en bas de Feuille 2 (moi ça ne m'affiche que Feuilles 3 :/ ) et pour la colonne "Valeur Puissance", on doit avoir les bonnes puissances correspondantes aux feuilles, c'est à dire 12 suivi en bas de 100000. (moi ça m'affiche que 100000 :/)

Merci et je suis prêt à répondre à n'importe quelle question car j'ai besoin de votre aide. Merci


J'ai oublié de joindre le fichier. Le voici.

113listbox.xlsm (21.67 Ko)

Si ce n'est pas clair, je répondrai avec plaisir à vos questions.

Merci

Bonjour Housse

j'ai bien vu ton problème.

mais je voudrais aussi que tu réfléchisse un peu à ce qu'il se passe dans ton code

quand tu cliques sur ton "Command_Button1" tu fais une boucle sur ta ListBox,... exact ?

quand ta boucle est terminée, tu ajoutes un classeur, et dans la Feuil1 tu veux mettre

la valeur de "i" et la valeur de "puissance"

mais comme ta boucle est terminée, quelle est la valeur de 'i' ? ........ la dernière valeur

et quelle est la valeur de "puissance" ? ...... la dernière valeur aussi

le code ne se trompe pas. il met bien les valeurs de "i" et de "puissance" qu'il a en mémoire

à savoir les dernières valeurs qu'il a enregistré.

essaye de bricoler ton code, même si ça marche mal.

ensuite si vraiment tu n'y arrives pas je te renverrais le bon

bon courage

bon, je t'envoie une version

c'est un peu ronflant, mais c'est juste pour que tu visualise ce que fait le code.

fait un point d'arrêt au début du code et ensuite clique sur F8 pour voir chaque étape

59listbox-v1.xlsm (24.16 Ko)

Bonjour titico,

Alors là je tiens vraiment à te remercier parce que c'est complet et les explications me plaisent beaucoup.

Merci de m'avoir envoyé la version qui marche. J'ai bien compris tous les commentaires sauf 2 choses qui me restent encore un peu flou:

- .Cells(LgA, "A").Offset(1, 0).Value = i + 1 'cette ligne je ne l'ai jamais rencontré encore et je n'arrive pas à saisir ce qu'elle fait'

- et l'autre chose est ce qui est présent dans le Module 1 qui est en lien avec la création d'un powerpoint, je n'arrive pas bien à saisir son rôle dans le code car sans lui ça me semble bien marcher.

Excuse moi de mon faible niveau en vba, peut-être que ces notions te semblent simples mais désolé de te solliciter autant, je fais mon possible avec des efforts (mon nouveau travail est de manipuler les macros et je n'avais jamais fait ça avant)

Dernière chose: maintenant que ça marche bien, j'aimerais bien conclure sur ce projet en ajoutant une dernière chose (si tu refuses de m'aider dessus, je te comprendrais, je t'en voudrais pas car tu m'as déjà été d'une très grande aide)

Voilà ce que je souhaiterais:

on a maintenant une liste d'animaux. L'utilisateur va choisir l'un d'entre eux dans la listbox (j'ai réussi à les afficher dans la listbox )

Et quand il clique maintenant, cela va lui afficher dans un nouveau fichier excel chacun des tableaux, présents dans les autres feuilles, où se trouve le fameux animal choisi de la combobox. Je sais pas si c'est clair. Ex: si je choisis "lion" dans la combobox et que je clique sur le bouton alors se crée le nouveau fichier excel où on trouvera : le 1er tableau complet de la feuille 2 et en bas on trouvera le 2ème tableau complet de la feuille 3 car c'est en ces tableaux qu'est présent le mot "lion".

C'est juste cela Pour moi ça a l'air compliqué de faire cela. Merciiiiii du temps que tu me consacres en tout cas.

A plus

53listbox-v2.xlsm (24.96 Ko)

Bonjour Housse,

il y a plusieurs façons de sélectionné une cellule, dont celle-ci :

Cells(n° de la ligne , n° de la colonne)

avec cette méthode tu peux rajouter .Offset(nombre1 , nombre2) en positif ou en négatif, pour sélectionner une autre cellule

Offset veut dire : en dehors de. (sous-entendu de cells)

nombre1 = nombre de ligne dessus ou dessous la cellule Cells

nombre2 = nombre de colonne à gauche ou à droite de la cellule Cells

en clair :

pour les lignes :

Cells(5 , 4) = la cellule "D 5" : 4 étant la colonne "D". 5 la colonne "E". 6 la colonne "F". etc.

Cells(5 , 4).Offset(1 , 0) = la cellule "D 6' c'est comme si on écrivait Cells(5+1 , 4+0)

Cells(5 , 4).Offset(-2 , 0) = la cellule "D 3" : c'est comme si on écrivait Cells(5-2 , 4+0)

pareil pour les colonnes

Cells(5 , 4).Offset(0 , 1) = la cellule "E 5' c'est comme si on écrivait Cells(5+0 , 4+1)

et Cells(5 , 4).Offset(-3 , -2) = la cellule "B 2' c'est comme si on écrivait Cells(5-3 , 4-2)

voilà pour le .Offset

pour le i = + 1

c'est parce que les Items d'une Listbox (ou ComboBox) commence toujours par "0"

donc ta boucle commence bien par "0"

for i = 0 To .ListCount - 1

tes numéros de feuilles sont : Feuille1, Feuille2, Feuille3, etc.

quand tu parcours la boucle

tu commences par l'Item "0" mais ta feuille s'appelle "1"

donc pour avoir un "1", il te faut bien "0 + 1"

voilà pour le i + 1

pour la sub test() dans le module 1 c'était pour quelqu'un d'autre

tu peux l'effacer

bonne continuation

regarde si ça te convient

A+

24listbox-v3.xlsm (29.19 Ko)

Je suis très content du résultat, vraiment merci

Ca effectue bien le transfert des tableaux concernés, c'est excellent. Par contre, peut-être que je te l'avais pas dit ou je me suis mal exprimé, mais pour que ce coit parfait, il manque une toute petite condition:

C'est que le transfert des tableaux ne doit se faire que pour les feuilles sélectionnées. Bon, ici il n'y en a que 2 c'est vrai mais par exemple si je choisis "lion" et puis "feuil1" uniquement, alors uniquement le tableau du "lion" présent dans la "feuil1" se transfèrera et non pas le tableau de la feuil2. Je pense pas t'avoir dit cette condition, désolé.

En fait le changement à ta version, ce serait juste de prendre en compte la ou les feuilles sélectionnées, je pense. Je sais pas s'il suffit d'un With Listbox.ListIndex.Selected.

P.S: merci pour les explications complètes que tu m'as données dans le message précédent. Cela me fait apprendre plus de vba Excel

A +

Bonjour Housse,

bon là, je ne comprends plus très bien

alors je vais te poser quelques questions

1 - est-ce que la ComboBox et la ListBox sont liées ?

c'est à dire quand tu choisi "lion" dans la ComboBox et "Feuille 1" dans la ListBox

faut-il transférer que le tableau où il y a "lion" ?

2 - la ListBox MultiSelect te sert elle justement à ça ?

à savoir transférer les tableaux où il y a "lion" de chaque feuille sélectionnée

dans la ListBox les uns en dessous des autres ?

3 - où veux tu transférer tout ça ?

dans le même classeur que celui crée pour les besoin de la ListBox ?

essaye ça

42listbox-v4.xlsm (29.49 Ko)

A+

Bonjour titico,

C'est bien ça que je voulais, ça m'a l'air de fonctionner bien, merci

Pour répondre à tes questions:

1- Ils sont bien liés. En fait la 1ère étape pour l'utilisateur est de choisir l'animal, "lion" par exemple, ensuite dans la listbox il choisit les tableaux (où est présent "lion") des feuilles qu'il veut. Ex: il peut ne vouloir transférer que le tableau de "lion" présent en feuil2 ou bien seulement celui en "Feuil2", ou bien les 2 tableaux. Effectivement, la feuil1 n'a plus trop d'utilité car il ne contient pas de tableau. L'utilisateur ne va donc jamais sélectionné "Feuil1" dans la listbox. (Quand aux valeurs sur lesquels on avait travaillé au tout début de ce fil, on peut les oublier si on décide de travailler qu'avec les noms d'animaux et leurs tableaux). (En fait le premier travail sur les valeurs me servaient pour un autre projet que celui des noms d'animaux, désolé de ne pas te l'avoir dit plutôt)

2- oui c'est bien ça, elle sert uniquement à cela finalement

3- quand je disais transférer, c'était dans le nouveau fichier Excel (comme tu l'as fait dans la version que tu viens de m'envoyer, merci)

Voilà j'espère que j'ai éclairci les choses, désolé encore.

J'ai une petite question pour finir: pourquoi dans le module c'est écrit UseForm0? Moi je pensais que c'était UserForm1.

A +

non, il y a bien Userform1 mais suivi de show 0 (Userform non Modal)

ça veut dire que tu as accès à ta feuille excel même si l'Userform est affiché

Ok merci beaucoup titico

Rechercher des sujets similaires à "msgbox elements listbox"