Macro avec ComboBox

B

Blues

Guest
Bonjour Forum,

J'essaye de créer une macro qui une fois lancée, irait chercher les infos d'une colonne d'un autre classeur excel, à travers une selection de colonne, et les afficheraient dans un menu déroulant de mon UserForm de mon classeur actif (cf. image jpg en annexe).

Cependant, j'ai un premier problème, c'est que ma macro ne veut pas s'afficher dans le lanceur de macro. Donc, déjà là, je ne peux pas l'essayer. Aurais-je manquer une ligne, fais une faute de syntaxe, etc... Et comme je suis débutant, j'ai souvent du mal à cerner les problèmes quand je n'ai pas l'aide du deboggeur.

Ensuite, je ne sais pas comment stipuler le fait qu'il doive aller chercher les informations dans l'autre classeur, pour selectionner le nom des colonnes, et les afficher dans une liste ? Et ensuite, les lui faire ecrire, dans mon classeur en cours. J'ai tenté une approche, mais elle me parait incomplète. Si qqlu arrive à trouver déjà mon prob concernant le lanceur de macro... Puis si le temps, juste regarder la macro dans le fichier joint...

Merci d'avance
 

Pièces jointes

  • test.zip
    32.7 KB · Affichages: 81
  • test.zip
    32.7 KB · Affichages: 83
  • test.zip
    32.7 KB · Affichages: 86
G

G.David

Guest
Salut
le code del'userform n'apparait pas dans les macros
pour lance l'userform tu as une macro a faire
sub affiche()
userform1.show
end sub
la reference à l'objet va le charger en memoire (explicatio de Laurent Longres)
pour les information dans le combobox
dans la section initialize de l'userform
Combobox1.ColumnCount=1
Combobox1.rowsource="feuil1!A2:A12"
ceci donnant les cellule A2 à A12 de la feuille 1 du classeur Actif
à partir là je suis dans le peut etre :
en rajoutant le chemin du fichier devant le localisation il est possible qu'excel aille prendre ses données à la source mentionnée
Cordialement
G.David
 
B

Blues

Guest
Bonjour G.David,

Merci pour l'info concernant le lanceur. Maintenant je peux la lancer. Par contre, le code ne fonctionne pas, mais j'avance au moins au pas. En fait, je pense qu'il me manque le lien entre le classeur indices et le classeur actif. Vu qu'il doit switcher entre les deux --> aller chercher les infos dans le classeur indices, mais les afficher dans le classeur actif, il doit merder lors de l'affichage...

J'essaie donc d'avancer au pas, mais cest de la vrai me..e ! Aller
courage, ne baissons pas les bras. D'ici la fin de la journée,
j'arriverais au moins à la faire tourner sans plantage (même si elle
fait pas ce que je désire tant pis). 2 pas un avant, 5 en arrière,
mais ne pas perdre espoir, la lumière est au bout du tunnel... Ou
serait-ce les flammes de l'enfer, et de l'eternité... Glups

Merci encore...
 
B

Blues

Guest
Bon, voilà impossible à la faire fonctionner en tant soit peu. Si vous arrivez à jeter un coup d'oeil, et à me dire ce qui ne joue pas... Normalement c'est censé ouvrir un autre classeur, récupérer sous forme de liste les noms des colonnes à partir de "D2" --> D2 ; E2 ; F2 ; etc...

Et en même temps récupérer dans le classeur ouvert à l'origine (donc celui qui a lancé la macro), sous forme de liste les dates présentes dans la colonne A (à partir de "A3" --> A3 ; A4 ; A5 ; etc...).

Mais je n'arrive pas à le faire. Je me perds entre - j'imagine - le switchage entre les 2 pages. Siouplait, aidez moi , voilà la partie du code qui pose soucis :

------------------------------------------------------------------------------------------------------------------------------------------------------

Private Sub UserForm_Activate()

Dim ActWB As Workbook
Set ActWB = ActiveWorkbook 'permet après de selectionner rapidement le classeur d'origine

Workbooks.Open Filename:="U:\test\indices.xls" 'ouvre le classeur d'où les données doivent être récupérer.

Dim i As Integer
Dim p As String

i = 0

Range("D2").Select

LISTEportefeuilles.Clear
For i = 0 To 30

p = ActiveCell.Offset(0, i * 3).Text

if p = "" Then Exit For

p = Right(p, Len(p) - 7)


LISTEportefeuilles.AddItem p
Next i
LISTEportefeuilles.ListIndex = 0

ActWB.Activate

Range("A3").Select
LISTEdates.Clear
For i = 0 To 250
p = ActiveCell.Offset(i, 0).Text

If p = "" Then Exit For

LISTEdates.AddItem p
Next i
LISTEdates.ListIndex = 0

End Sub
 
B

Blues

Guest
Re,

J'ai déjà trouvé un semblant de réponse... En fait, une partie du prob (mais seulement une partie) vient de là : p = Right(p, Len(p) - 7)

Une fois ôté mon - 7 qui me permettait avant d'effacer une partie des caractères d'une de mes anciennes macro cela fonctionne tout de suite mieux. Parce que avant, avant le nom de la celulle, il y avait un autre nom de 7 lettre qui devait disparaitre. Dans cette macro, se retrouvant des fois avec des celulles contenant des noms à 4 lettres, on tombait sur un chiffre négatif, ce qui fesait plantés la machine... :sic:

Maintenant mes listes fonctionnent parfaitement, mais je ne sais pas comment faire une petite chose. En fait, j'utilise une formule VLOOKUP, et j'ai besoin d'un numéro de colonne. Cependant mon numéro de colonne dépends du nom que je choisis dans la liste. Donc en fait, il faudrait qu'il se cale par rapport à cela. :

"=IF('U:\test\[indices.xls]Performances mensuelles'!R[3]C2<>"""",VLOOKUP(RC1,'U:\test\[indices.xls]Performances mensuelles'!C2:C52," + TXTcolreturn.Text + ",False),"""")"

J'ai bien une solution, mais je ne sais pas comment l'appliquer. Savez-vous par hasard comment ranger de manière provisoire la valeur de la colonne du nom selectionné (par exemple dans le terme Xcol), et comme cela de pouvoir l'introduire dans ma formule VLOOKUP, afin qu'il puisse écrire la formule ?

Merci encore pour le mal que vous vous donnez.
 
G

G.David

Guest
Wlookup ?!? j'ai déjà vu ça sur veriti et veriland avait tradiuit ce terme mais ma memoire avec l'anglais... par contre si tu as ta cellule ou ton nom se situe ne peut tu pas recupéré le numero de colonne de la même façon que l'on récupère un n0 de ligne lg=activecells.row n'y a t il pas d'instruction activecells.column il faudra peut etre activé la cellule reperee avant
Cordialement
G.David
 
B

Blues

Guest
Re G.David,

VLOOKUP, est en français la fonction RechercheV. Elle récupère des valeurs dans d'autres feuilles ou classeurs par rapport à un critère (chez moi une date). Mais afin qu'elle puisse récupérer les bonnes valeurs, il faut stipuler la colonne en question.

Sinon, pour ta solution, j'y avait pensé, mais en fait je ne savais pas comment le faire. De plus, après il faut encore que jessaye de l'adapter au reste de mon code. Mais j'essaye ça ce soir ou demain, et je te tiens au courant.

Merci encore.

A+
 

Discussions similaires

Réponses
20
Affichages
585
Réponses
8
Affichages
325
Réponses
14
Affichages
435

Statistiques des forums

Discussions
314 177
Messages
2 106 872
Membres
109 711
dernier inscrit
leveille