Transférer une donnée de combobox1 vers combobox2 par clic droit et vice-versa

Toine45

XLDnaute Junior
Bonjour à tous
Avec mon classeur actif : Dans un userform, j'ai 2 combobox (CBX1 et CBX2)
j'ajoute une feuille déterminée (example "donnee") dans Combobox2 avec la méthode :
me.combobox2.additem "donnee"

Je crée la liste de toutes les feuilles du classeur dans Combobox1 avec la méthode :
for each ws in worksheets --- me.combobox1.additem ws.name --- next ws

Toujours dans combobox1, je retire la feuille déjà dans combobox 2 avec la méthode :
me.combobox1.remove "donnee".
Jusque là, tout va bien

Je désire maintenant, en cliquant avec le bouton droit de la souris, envoyer les nom des feuilles sur les quelles je clique (une par une), dans la combobox 2 et les supprimer de combobox1 (possibilité de tout transférer, sauf une)
et, à l'inverse, si je clique droit sur un mot de la combobox2, l'envoyer dans la combobox1, en le supprimant de CBX2.
Je n'ai rien trouver de probant pour le déplacement par clic droit, ni pour le transfert.
j'ai tenté à tout hasard, des trucs avec mouve to et mouve at sans succès.
Avez vous une solution à mon problème ?
Merci d'avance
Cordialement
Toine45
 

Toine45

XLDnaute Junior
Bonjour à tous
Merci à Job75, Robert, SI... pour leur aide

J'ai trouvé les Listbox mieux adaptées à mon besoin.
Avec un simple clic, c'est très bien aussi ça fonctionne impeccable, j'ai très légèrement modifié pour éviter le message d'erreur si l'on clique alors que la listbox est vide.

Par contre, je n'arrive pas à capter la liste entière d'une des 2 listbox afin d'intégrer cette liste à une variable
: Si la listbox contient "Feuil1, Feuil2, Données, Feuille Machin, FeuilleY"
Je voudrais que ma variable "excl4" soit égale à : "Feuil1, Feuil2, Données, Feuille Machin, FeuilleY"
J'ai tenté avec array, ça ne fonctionne pas j'ai essayé avec excl4 = L, sans succès alors que L donne la liste dans une msgBox.
Je travail avec Excel 2003

Je joins mon fichier dans lequel je voudrais adapter ça
c'est certainement tout bête, mais je n'y arrives pas.

Petite question subsidiaire :
Sur Win XP (32bits) et excel 2003 : le bandeau supérieur des box est bleu et la croix est rouge
alors que sur Sur Win 10 (64 bits) et excel 2003 : le bandeau supérieur des box et la croix sont incolores
Pourquoi ? avez-vous aussi rencontré ce phénomène ? pas très gênant en soit mais juste pour me coucher un peu moins bête.

Merci de votre aide
 

Pièces jointes

  • Pieces-Magasin-2016-07-18_3.xls
    1.2 MB · Affichages: 232

Toine45

XLDnaute Junior
Re-Bonjour

Pour mon problème de variable, j'ai essayé :
private sub textbox1_change ()
if L2.listcount = 0 then exit sub
for n = 0 to L2.listcount -1
excl4 = L & L2.list (n)
next
end sub

ça fonctionne partiellement : ça ne prend qu'une seule feuille en compte et pas les autre !

Il faudrait peut-être inclure des guillemets dans la chaine ex.: nom1 & ", & nom2 & "
mais je ne sais comment faire

quelqu'un a t'il une autre idée pour que toute la liste de noms de la textbox soit prise dans la variable ?

Merci d'avance
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

Pourquoi je préfère utiliser ici des ComboBox ? Parce qu'on peut régler facilement la hauteur des listes.

Dans ce fichier voici une autre solution, toujours à partir de MouseDown, avec :

- clic gauche => transfert d'un élément de liste

- clic droit => transfert de la liste entière.

Nota : les fichiers précédents (4) et (4 bis) sont vérolés... Ils ont 3 ThisWorkbook !!!

Bonne journée.
 

Pièces jointes

  • ComboBox Clic gauche et Clic droit(1).xlsm
    42.6 KB · Affichages: 40

laetitia90

XLDnaute Barbatruc
bonjour tous:):):):)
j'avais conservé un fichier pas de moi :(avec des listboxs transfert avec la souris en tenant avec le bouton gauche
prevu avec 5 box au depart j'ai supprimé le code pour les 5 ... code qui merite d'etre simplifier peut être sympa a etudier
 

Pièces jointes

  • Tournoi.xlsm
    39.3 KB · Affichages: 67

job75

XLDnaute Barbatruc
Bonjour Laetitia :)

Pour tester mon fichier précédent, j'ai créé 1200 feuilles de Janvier 2001 à Décembre 2100 avec cette macro :
Code:
Sub CréerFeuilles()
Dim dat As Date, i&
Application.ScreenUpdating = False
dat = "1/12/2000"
For i = 1 To 1200
  dat = DateSerial(Year(dat), Month(dat) + 1, 1)
  Sheets.Add After:=Sheets(Sheets.Count)
  Sheets(Sheets.Count).Name = Application.Proper(Format(dat, "mmmm ")) & Year(dat)
Next
End Sub
Tout va bien, on voit quand même (en un clin d'oeil) se remplir les zones de texte des ComboBox.

Fichier (1 bis).

Edit : on peut ne pas effacer lez zones de texte, ce n'est pas gênant.

Fichier (1 ter).

A+
 

Pièces jointes

  • ComboBox Clic gauche et Clic droit(1 bis).zip
    524.7 KB · Affichages: 48
  • ComboBox Clic gauche et Clic droit(1 ter).zip
    525.3 KB · Affichages: 45
Dernière édition:

Si...

XLDnaute Barbatruc
re
bonjour tous:):):):)
j'avais conservé un fichier pas de moi :(avec des listboxs transfert avec la souris en tenant avec le bouton gauche
prevu avec 5 box au depart j'ai supprimé le code pour les 5 ... code qui merite d'etre simplifier peut être sympa a etudier
Tu « drag » Laetitia :D? C’est bien mais pour coder c’est plus long ;)!

Re-Bonjour

ça fonctionne partiellement : ça ne prend qu'une seule feuille en compte et pas les autre !
e
C'est le bouton "Voir" qui permet d'avoir la liste. Comment veux-tu exploiter celle-ci * ?

*comme déjà dit, tu as pas mal de procédures et je n'ai pas la patience de les décortiquer o_O !
 

Toine45

XLDnaute Junior
Bonjour Laetitia, Job, Si... et aussi à tous les Autres XLDnautes

Merci pour vos aides
(Laétitia, Je n'arrive malheureusement pas à faire fonctionner ta macro : J'utilise Excel 2003 et il ne me converti pas totalement ton fichier, j'ai donc des fonctions désactivées ou non reconnues.)

J'ai vu pas mal de choses intéressantes dans tous ce que vous avez proposés
dont certaines fonctions dont j'ignorais totalement que l'on pouvais faire avec aussi peu de code.
je vais les conserver précieusement pour une utilisation ultérieur (j'ai déjà quelques petites idées d'utilisation).

En ce qui concerne mon userform, je pense que je vais rester avec les listbox : On a directement sous les yeux, le contenu de chaque liste et pour le transfert, ça fonctionne très bien également. (A l'origine, j'ignorais que les listbox étaient capables de faire celà.)

Par contre, j'ai toujours mon problème pour récupérer l'ensemble des noms d'une listbox et les transformer en une variable exploitable. example si dans une listbox, j'ai : Feuil1 - Avril - Total - Global - Donnees - Feuil2 :

Je veux que ma variable "excl4" soit = à : array ("Feuil1", "Avril", "Total", "Global", "Donnees", "Feuil2)
(Voir mon fichier joint un peut plus haut

avez-vous une solution ?
Je bute toujours là dessus

Merci d'avance et bonne soirée à tous
 
Dernière édition:

Toine45

XLDnaute Junior
Bonjour à tous
Merci Job75 pour ton aide. (ainsi qu'à tous les contributeurs précédents)

J'ai regardé ton fichier, c'est sensiblement pareil que les fichiers que j'ai eu précédemment du point de vue résultat.

Ce n'est plus celà qui me pose problème.

Ce que je cherche à faire : c'est récupérer le contenu complet d'une Listbox ou d'une Combobox afin de passer tous les noms qu'elle contient, dans une variable exploitable (que je nommerai excl4).

example si dans une listbox ou une Combobox, j'ai : Feuil1 - Avril - Total - Global - Donnees - Feuil2 :

Je veux que ma variable "excl4" soit = à : array ("Feuil1", "Avril", "Total", "Global", "Donnees", "Feuil2)

Pour l'instant, j'ai ajouté un bouton et j'ai réussi avec une macro, à mettre tous ces noms dans des cellules différentes, sur une même ligne, dans une feuille excel ("Feuil1").
je cherche maintenant à les concaténer dans une seule cellule en insérant des guillemets et des virgules entre chaque nom de feuille. pour obtenir ("Feuil1", "Avril", "Total", "Global", "Donnees", "Feuil2) dans une seule cellule et je dirai que excl4 est = à la cellule B2 de la feuille ("Feuil1").

Je vais tenter de déterminer le nombre de cellules utilisées dans la ligne 4 de ("Feuil1") et essayer de les concaténer avec Chr(34) pour les guillemets et une virgule + 1 espace en séparation....c'est pas gagné...

(Pas très concluant pour l'instant) mais je suis comme lycos....je cherche....
Je fais peut être fausse route, mais pour l'instant j'ai pas d'autre idée.

Si vous avez une solution pour me dépatouiller, ce sera bienvenu

Merci d'avance
 

job75

XLDnaute Barbatruc
Re,

L'Array dont vous parlez est tout simplement donné par la propriété List des ListBox.

Par exemple si l'on veut transférer les 2 listes dans la feuille "Accueil" :
Code:
Private Sub CommandButton1_Click()
With Feuil1 'CodeName
  .Range("H4:I" & .Rows.Count) = "" 'RAZ
  If ListBox1.ListCount Then .[H4].Resize(ListBox1.ListCount) = ListBox1.List
  If ListBox2.ListCount Then .[I4].Resize(ListBox2.ListCount) = ListBox2.List
  .[H:I].Columns.AutoFit
End With
End Sub
Fichier (2).

Quant à votre histoire de concaténation l'intérêt paraît très limité.

A+
 

Pièces jointes

  • ListBox Clic gauche et Clic droit(2).zip
    527.8 KB · Affichages: 37

Toine45

XLDnaute Junior
Bonjour Job75
Le résultat de ton fichier est quasiment semblable à ce que j'ai fait de mon côté, (sauf que moi, je l'ai mis en ligne et ne me sert que d'une seule listbox pour ma variable.)
avec le code
dim x as integer, NB_L_ListBox as integer
with worksheets("Feuil1")
.range ("B2).entireRow.clear
for x =1 to me.L2.listcount
.cells(2, x) = me.L2.list(x - 1, à)
next x
endwith

ça me convient tout à fait

maintenant, il me faut toutes ces cellules concaténées en une seule cellule, pour obtenir
("Feuil1", "Avril", "Total", "Global", "Donnees", "Feuil2)
le but est d'avoir le nom de toutes ces feuille dans une variable.

Ma variable excl4 doit contenir tous les noms contenu dans la ListBox 1 (ou éventuellement une combobox)
afin d'être utilisée dans mon fichier (module varpublique)

Suis preneur de toute nouvelle suggestion

Merci
Bonne soirée à tous
 

job75

XLDnaute Barbatruc
Re,
Ma variable excl4 doit contenir tous les noms contenu dans la ListBox 1 (ou éventuellement une combobox)
afin d'être utilisée dans mon fichier (module varpublique)
Vous êtes têtu et vous perdez votre temps, mais enfin :
Code:
excl4 = Application.Transpose(ListBox1.List)
Edit : on obtient ainsi un tableau à une dimension (vecteur ligne).

A+
 
Dernière édition:

Toine45

XLDnaute Junior
Re-bonjour
Je n'ai malheureusement pas réussi à utiliser Application.Transpose....ça me met une erreur.
(Peut-être dû à Excel 2003 ?)

J'ai tout de même réussi à concaténer une listbox comme je le désirais, par contre, la variable ne prend pas la concaténation en compte, alors que si je l'intercepte dans une msgbox, ça marque bien ce que je désire. Mystère !!!

("transfert", "Divers A trier-1", "Recherche", "M850", "Booko", "Kolbus", "Puma", "Clauberg 104", "WPM", "M600")

Ci-dessous, ce que j'ai fait :

P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); widows: 2; orphans: 2; }P.western { font-family: "Times New Roman",serif; font-size: 12pt; }P.cjk { font-family: "Times New Roman",serif; font-size: 12pt; }P.ctl { font-family: "Times New Roman",serif; font-size: 10pt; }

‘Copie du contenu de la listbox en ligne dans la feuille « transfert » en ligne B

Private Sub CommandButton15_Click()
Dim x As Integer, Nb_L_ListBox As Integer
With Worksheets("transfert")
.Range("B2").EntireRow.Clear
For x = 1 To Me.L1.ListCount
.Cells(2, x) = Me.L1.List(x - 1, 0)
Next x
End With
'Feuil1.Activate
Sheets("transfert").Activate
End Sub

‘Concaténation

Private Sub TextBox1_Change()

Sheets("transfert").Range("A4") = "(" & Chr(34) & [A2] & Chr(34) & ", " & Chr(34) & [B2] & Chr(34) & ", " & Chr(34) & [C2] & Chr(34) & ", " & Chr(34) & [D2] & Chr(34) & ", " & Chr(34) & [E2] & Chr(34) & ", " & Chr(34) & [F2] & Chr(34) & ", " & Chr(34) & [G2] & Chr(34) & ", " & Chr(34) & [H2] & Chr(34) & ", " & Chr(34) & [I2] & Chr(34) & ", " & Chr(34) & [J2] & Chr(34) & ")"
End sub

Résultat concaténation:

("transfert", "Divers A trier-1", "Recherche", "M850", "Booko", "Kolbus", "Puma", "Clauberg 104", "WPM", "M600")

Resultat désiré :
excl4 = array ("transfert", "Divers A trier-1", "Recherche", "M850", "Booko", "Kolbus", "Puma", "Clauberg 104", "WPM", "M600")

Pour l'instant: pas de message d'erreur, mais variable ignorée.

La nuit portant conseil, parait-il
Bonne nuit

A suivre....
 

job75

XLDnaute Barbatruc
Bonjour Toine45, le forum,

Si l'on tient absolument à concaténer (en Accueil!B4), utiliser la fonction Join :
Code:
Private Sub CommandButton1_Click()
With Feuil1 'CodeName
  .[B3] = "ListBox1"
  If ListBox1.ListCount Then .[B4] = Join(Application.Transpose(ListBox1.List), ", ") Else .[B4] = ""
  .Rows(4).AutoFit
End With
End Sub

Private Sub CommandButton2_Click()
With Feuil1 'CodeName
  .[B3] = "ListBox2"
  If ListBox2.ListCount Then .[B4] = Join(Application.Transpose(ListBox2.List), ", ") Else .[B4] = ""
  .Rows(4).AutoFit
End With
End Sub
Noter que la hauteur d'une cellule étant limitée à 409 on ne peut pas toujours tout afficher...

Fichier (3).

A+
 

Pièces jointes

  • ListBox Clic gauche et Clic droit(3).zip
    529.3 KB · Affichages: 40

Discussions similaires

Statistiques des forums

Discussions
312 304
Messages
2 087 069
Membres
103 453
dernier inscrit
Choupi