Bonjour,
Je souhaiterai savoir s'il y a une "formule" sous Excel qui permet de récupérer le nom du fichier en cours, sans passer par VB.
Merci
Version imprimable
Bonjour,
Je souhaiterai savoir s'il y a une "formule" sous Excel qui permet de récupérer le nom du fichier en cours, sans passer par VB.
Merci
pas à ma connaissance
t'es obligé de passer par du VB
Code:
1
2 ActiveWorkbook.Name
En fait, ce que je voudrais c'est un menu déroulant dont le contenu change selon le nom du fichier.
Pour un menu déroulant simple, j'ai utilisé la fonction intégrée dans Excel. pour créer les menu déroulant.
Je suppose que je peux générer le menu déroulant sous VB?
exactement
Code:
1
2
3
4
5
6 taListe.AddItem "valeur1" taListe.AddItem "valeur2" taListe.AddItem "valeur3" taListe.AddItem "valeur4" etc ....
mm je suis pas sur que ca fasse ce que je veux...
En fait la liste déroulante sous excel c'était valable pour toute la colonne A par exemple en utilisant "validation de données" puis liste.
Si j'utilise ta méthode, sauf erreur de ma part, je suis obligé de dupliquer le bouton sur l'ensemble de la colonne
tu fais un truc du genre
Dans ta liste tu auras toutes les valeursde la première colonne de ta feuilleCode:
1
2
3
4
5 while cells(i,1).value <>"" taListe.addItem cells(i,1).value i= i + 1 Wend
Si j'ai bien compris, tu veux, selon le fichier, que ta liste soit mise à jour...
Auquel cas, à chaque changement de fichier, tu dois nettoyer la liste existante avant de la renseigner
fait ça très bienCode:LaListe.clear
Mais est-ce bien ce que tu souhaites faire ?
Je m'explique par un exemple.
Actuellement, quelque soit mon fichier, j'ai la même liste déroulante dans une colonne.
Ce que j'aimerais c'est, par exemple :
Si nomfichier = "liste 2006.xls" afficher les éléments de la liste 2006
Si nomfichier = "liste 2007.xls" afficher les éléments de la liste 2007
Je veux bien utiliser cela mais supposons que j'ai 100 cellules ou je désire afficher la liste, c'est assez ennuyeux de devoir duplique la liste.Code:taListe.AddItem "valeur1"
enfin s'il faut le faire...
Et tu la mets où ta liste ?
Que je t'explique : Si tu la mets dans un fichier, il faudra qu'elle existe dans l'autre...
Si tu mets une liste par fichier, ça peut se faire avec une macro placée dans auto_open de chaque fichier + une liste dans ta feuille de calculs.
Si tu mets ta liste dans un fichier indépendant, tu vas devoir détecter l'événement Open du classeur ouvert... Et sans macro... :cry:
Voilà. Je pense que tu n'as pas tellement l'embarras du choix, quoique, ne savant pas l'utiisation que tu veux faire de ta liste... il y aurait bien l'utilisation d'userform contenant un combo qui se mettrait à jour à l'ouverture de chaque fichier d'une liste de fichier placée dans un autre combo afin de pouvoir sélectionner celui que tu veux ouvrir...
Bref, si tu nous en disais plus...
A+
NB - Dans un userform, tu peux renseigner un combo d'un seul coup d'un seul avec RowSource ;)
Pour la liste, j'aurai bien voulu la mettre dans une feuille du classeur et dire qq chose comme :
Si nomfichier = "blabla.xls" alors contenu du menu dans la matrice A1:A15 et si nomfichier = "blabla2.xls" alors contenu du menu dans la matrice B1:B15
En fait, c'est pour éviter de déployer 2 versions de l'application avec juste le contenu du menu qui change par exemple.
ah oui comme j'ai dit, le menu déroulant est visible dans toute la colonne B d'une feuille du classeur
tu fais un truc du genre
Evidemment ce truc va te remplir une Liste déroulante faites avec la boite à outils.... tu es obligé de faire comme çàCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Sub auto_open() dim nom as string nom = Workbooks.name select case nom case "Classeur1" Call initListe(1,15,1) case "Classeur2" Call initListe(1,15,2) End Select End Sub sub initListe(ligneDebut as long, ligneFin as long, colonne as integer) dim i as integer i = ligneDebut while i<=ligneFin taListeDeroulante.Additem = Activesheet.Cells(i,colonne).value i=i+1 wend End Sub
Si veux rester avec les listes de validation, je ne pense pas que tu puisse interagri dessus en VBA
Je vais regarder quand même
j'ai trouvé pour tes listes déroulantse avec validation
Y a sans doute plein de paramère inutile dans ce que je t'ai mis, a toi de faire le triCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Sub auto_open() dim nom as string nom = Workbooks.name select case nom case "Classeur1" Call initListe(1,15,"A") case "Classeur2" Call initListe(1,15,"B") End Select End Sub sub initListe(ligneDebut as long, ligneFin as long, colonne as string) dim i as integer i = 1 while condition Range("B" & i).Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$" & colonne & "$" & ligneDebut & ":$" & colonne & "$" & ligneFin .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With i=i+1 wend End Sub
Pour ta condition de boucle tu peux imagine de mettre des listes déroulante que si la colone A est remplie par exemple
Code:
1
2 while activesheets.cells(i,1).value <>""
Hello,
sans passer par VB, tu as :
Code:=CELLULE("filename";A1)
Citation:
Envoyé par trihanhcie
Merci de vos réponses !
Bon ce que je pense faire pour contourner le problème c'est :
A l'ouverture du fichier, en vb, récupérer le nom du fichier. Selon le nom, d'inscrire le contenu dans une feuille et afficher cela dans une liste de validation. Cela vous parait-il une bonne idée?
J'ai essayé Workbooks.Name pour récupérer le nom du fichier en VB mais sans succès, la méthode n'existe pas
Code:ThisWorkbook.Name
vi je viens de voir ca :) faut que je fasse un traitement dessus pour récupérer juste le nom et pas le chemin ^^
J'ai défini sous excel un "nom" qui présente une matrice sous excel.
Exemple : maliste = "Feuille2!A1:A12"
Je voudrais savoir si sous VBA, on peut récupérer cette variable et la modifier ?
Exemple : si fichier1 alors maliste = "feuille1!A1:A12" sinon maliste = "feuille2!A1:A12"
Oui, si ma liste est le nom d'une cellule contenant un résultat, tu peux dire
A+Code:Var1 = Range("maliste")
L'inverse en fait je voudrais :)
je voudrais modifier "les coordonnées" de ma liste
Alors il faut modifier la formule
Par exemple
A+Code:Range("maliste").formulalocal = "=feuille2!A1:A12"