Passer des "données" d'une listebox a une autre (UserForm)

Bonjour à tous,

J'utilise déjà Excel, mais je n'ai jamais utiliser la programmation VBA.

Je me suis un peu documenter sur différents sites mais j'avoue que je patauge un peu sur la programmation VBA.

J'aurai besoin à l'aide d'un UserForm, de sélectionner des "noms" dans une liste pour les faire passer dans une seconde liste.

Une fois cette sélection faite, je voudrais que les noms de cette deuxième liste soit afficher dans des cellules en Feuil2.

Il faudrait aussi que quand un nom est sélectionné qu'il disparaisse de la liste 1.

J’espère être assez clair.

J'ai créer un fichier avec l'UserForm dans le fichier joint.

Quelqu'un peut-il me créer le code pour effectuer ceci.

En vous remerciant d'avance.

Nyco46

15essai.xlsm (15.53 Ko)

Bonjour,

Pourquoi ne pas utiliser une seule ListBox en multisélection ?

Les noms sélectionnés restent surlignés, on peut les désélectionner par un nouveau clic... et à la fin on transfère l'ensemble de la sélection.

Cordialement.

Salut MFerrand,

C'est ce que je souhaiter faire dans un premier temps, mais je n'arrive pas à récupérer les noms surlignés.

En selection simple cela fonctionne bien mais en multiselection j'ai "0" comme valeur.

Et en recherchant sur le net je n'ai pas réussi a trouver la solution ou bien j'ai pas franchement compris.

Si tu peut me faire une proposition je suis preneur

Merci

Proposition dans fichier.

Remarques :

2 plages nommées dynamiques : LstNoms et SlcNoms

la première nomme la liste de noms... la seconde la sélection sur Feuil2, j'ai ajouté une en-tête (incluse dans le nom, on en tient compte dans l'utilisation, mais cela garantit que la plage soit toujours définie, donc laisser une en-tête).

J'ai conservé l'affectation de la liste par RowSource, ça colle dans ce cas de figure... mais pour info cela n'aurait pas collé avec le dispositif que tu prévoyais : il fallait alors modifier la liste au fil des sélections et la liaison établie entre plage et listbox par RowSource l'aurait empêché (ou au moins pas mal compliqué...). Affecter avec List si on doit manipuler la liste...

A l'ouverture, la plage est triée en ordre alpha. ce qui désorganise la succession des numéros... mais les noms ne comporteront pas de numéro en principe...

Pour récupérer la sélection, tu auras ainsi la méthode... Note qu'on les récupère en les listant dans un tableau, tableau qu'on affecte en une fois à la fin à la plage cible redimensionnée (en transposant car tableau à une dimension).

Cordialement.

22nyco46-essai.xlsm (24.17 Ko)

Super merci MFerrand !!

Je vais maintenant essayer de combiner ça avec ceux que je veux faire.

SI j'ai d'autres questions, puis je te recontacter ?

Par MP ou sur ce post ?

Encore merci.

Sur ce sujet pour poursuivre... MP c'est pour des considérations particulières...

Je reçois les signalisations de la même façon !

Cordialement.

Ok !

encore un petit renseignement, j'essaye de chercher ou trouver les plages dynamiques ?

Je voudrais comprendre comment cela fonctionne

merci


c'est bon j'ai trouver dans "gestionnaire de noms",

si je comprend bien je peut rajouter autant de noms que je veux dans la colonne A ?

remerci

Dans le gestionnaire de noms : une plage dynamique se définit au moyen d'une formule utilisant la fonction DECALER.

La plage s'adapte alors aux extensions. Tu rjoutes ou enlèves des noms, tu n'as rien à change, le nom est toujours bon. Il faut seulement éviter d'intercaler des vides, la dimension étant calculée sur le nombre de valeurs dans la colonne.

Encore merci de ton aide

Bonjour MFerrand!

Je reviens vers toi car j'ai pu un peu avancé sur mon projet, et j'ai encore besoin de ta science d'excel !

J'ai besoin d'une macro qui va me créer une feuille à partir d'une feuille existante ; c'est à dire je veux reprendre les données de

ma feuille de base (Matrice) en copiant que les valeurs (sans les formules). Et en même temps je veux qu'elle me renomme cette nouvelle feuille à la date du jour.

J'ai bien réussi qq chose mais il y a une erreur dans ma formule.

Peut tu me regarder çà et m'en faire une correction.

Je te remercie d'avance.

cdt..

Nico


Voici le fichier !!

10ajout-feuille.xlsm (15.47 Ko)

Bonsoir,

Ce n'est pas du tout dans la continuité du sujet initial !

De plus si tu me proposes du code enregistré, ça ne va pas aller longtemps !

Je conseille toujours comme premier conseil pour faire du VBA d'oublier l'enregistreur !

Il convient de partir de ce que tu veux faire, décrit précisément à partir de l'existant, pour définir la méthode la plus adéquate pour y parvenir.

Salut,

Dois je faire un nouveau sujet alors ?

Sinon je t'explique ce que je souhaite :

  • créer une nouvelle feuille qui recopie les valeurs (sans les formules) de ma feuille "matrice"
  • puis que cette nouvelle feuille se renomme avec la date du jour sous la forme "jj-mm"

Merci de ta patiente !

Nico

Voilà un moyen simple de le faire :

Sub ajout_feuille()
    Worksheets("Matrice").Copy after:=Worksheets(Worksheets.Count)
    With ActiveSheet
        .Name = Format(Date, "dd-mm")
        .UsedRange.Value = .UsedRange.Value
    End With
End Sub

Super parfait, c'est ce que je voulais.

Merci beaucoup de ton aide !!

Salut MFerrand

J'aurai besoin d'une modification sur ton fichier.

En fait je mets des valeurs en face de chaque noms dans la colonne B,

il me faudrait que ces données soit triées en même temps que les noms quand je rajoute un nom en colonne A.

Si tu peut m'aider.

D'avance merci

MFerrand a écrit :

Proposition dans fichier.

Remarques :

2 plages nommées dynamiques : LstNoms et SlcNoms

la première nomme la liste de noms... la seconde la sélection sur Feuil2, j'ai ajouté une en-tête (incluse dans le nom, on en tient compte dans l'utilisation, mais cela garantit que la plage soit toujours définie, donc laisser une en-tête).

J'ai conservé l'affectation de la liste par RowSource, ça colle dans ce cas de figure... mais pour info cela n'aurait pas collé avec le dispositif que tu prévoyais : il fallait alors modifier la liste au fil des sélections et la liaison établie entre plage et listbox par RowSource l'aurait empêché (ou au moins pas mal compliqué...). Affecter avec List si on doit manipuler la liste...

A l'ouverture, la plage est triée en ordre alpha. ce qui désorganise la succession des numéros... mais les noms ne comporteront pas de numéro en principe...

Pour récupérer la sélection, tu auras ainsi la méthode... Note qu'on les récupère en les listant dans un tableau, tableau qu'on affecte en une fois à la fin à la plage cible redimensionnée (en transposant car tableau à une dimension).

Cordialement.

S'il ne s'agit que de ça :

Private Sub UserForm_Initialize()
    With [lstNoms].Resize(, 2)

Ajout surligné.

Parfait tu est un chef !!

Encore merci;

Rechercher des sujets similaires à "passer donnees listebox userform"