combobox choix de données importés

  • Initiateur de la discussion Initiateur de la discussion delirium
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

delirium

Guest
Bonsoir tous le monde.

Je suis entrain de simplifier (pour l'utilisateur pas pour le réalisateur du prog !) un classeur excel qui importe des donnés de d'autres classeurs.

Ces données ne sont pas systématiquement importées. L'import se fait en fonction du choix de l'utilisateur.

Pour le moment l'utilisateur à le choix d'importé les données d'un classeur nommé [Atelier.xls] ou d'un classeur nommé [Bureaux.xls], grâce à des boutons dans un userform.

Voici par exemple le code (très raccourci) du bouton "Planning Atelier" :

Private Sub CommandButtonAtelier_Click()
With [EQ54]
.Formula = "=[Atelier.xls]Planning!AI5"
.AutoFill [EQ54:EQ84]
End With
UserForm4.Hide
End Sub

Le problème et que je voudrai que les utilisateurs puissent ajouter des classeurs de données à importé a leur guise. Mais dans ce cas va falloir qu'ils apprennent le VBA !!!

J'ai une idée pour cela (mais pas de pétrole).

Je voudrai donc réaliser la même chose mais en remplaçant les boutons de mon userform par un combobox. A l'ouverture de mon userform, il faudrait que les fichiers présents dans le dossier "Planning" soit détecter et afficher dans mon combobox. Puis que les données du classeur choisit soit importées.

Je ne sais pas du tout comment faire cela (étant très limiter en VBA).

C'est pourquoi je fais appel à vous.

Merci et à bientôt.
 
Salut,


Voici une fontion avec Dir pour récupérer les fichiers dans un dossier et sous dossier si SousRep est = à
à coller dans un lmodule standard et de l'USF
Function ListeFichier(Rep$, Optional SousRep As Byte = 0) 'Zon
Dim NomF$, I&, Temp()
NomF = Dir(Rep, SousRep) 'Récupère le 1 er fichier
While NomF <> ""
ReDim Preserve Temp(I)
Temp(I) = NomF
NomF = Dir 'On passe au 2 nd , 3 eme ....
I = I + 1
Wend
ListeFichier = IIf(I > 0, Temp, "Pas de fichier trouvé dans " & Rep)
End Function

Ensuite dans le code de l'USF
T=listefichier("C:\Planning\*.xls")
if isarray(t) then
Lenomdelacacombobox.list=t
else
msgbox T
end if

A+++
 
Re,

une autre approche avec le filesytemobject de Robert, tu peux rajouter le test suivant pour éviter un erreru d'éxécution:

if combobox1.listcount >0 then combobox1.listindex=0


Pourquoi tu ne trnasormes pas ta procédures en fonction ?
A+++
 
Salut tout le monde et merci de votre aide.

J'ai regardé le fichier joint de Robert mais je n'arrive pas à le transformer comme je veux.

Je m'explique :

1)
Tout d’abord, dans le module1, je voudrai que le chemin d'accès soit modifié par un truc du style "Workbooks.Open Filename:= ThisWorkbook.Path & "\consoprog\Planning\"

Car si je mets un chemin du type de celui que tu à mis cela va fonctionner sur mon PC mais pas sur celui des utilisateurs (je vais créer un auto exe avec winrar une fois le prog terminer pour qu'il soit bien dans un répertoire[consoprog\Planning] mais l'utilisateur pourra le mettre sur un disque c ou d ou...).

[consoprog\Planning] étant mon répertoire :
Dans [consoprog] j'ai mon classeur de recherche et dans [planning] les classeurs de données.



2)
Dans le code de l'userform, je ne vois pas le code que je dois y mettre pour réaliser l'import de donnés.
J'ai testé ceci :

Private Sub ok_Click()
'à toi de placer le code
With [A1]
.Formula = "=[classeur1.xls]feuil1!A1"
.AutoFill [A1:A10]
End With
Unload Me
End Sub

Mais sans succès.


3)
Pour le code à rajouter de Zon "if combobox1.listcount >0 then combobox1.listindex=0" je ne vois pas à quel endroit le mettre j'ai testé à plusieurs endroit, sans succès.

Si j'ai bien compris cette ligne doit permettre que lorsqu'il n'est pas détecter de fichier et que l'on click sur OK il n'y est pas de bogue.



En bref, vous voyez que je suis loin d'être un as en VBA.

Merci à tous et a bientôt.
 
Re,

Regardes dans le fichier joint , j'ai rajouté une listbox pour sélectionner la liaison que l'on veut mettre à jour dans le cas où il y en aurait plusieurs. Enfin on laisse tomber Autfofill puisque tes liaisons existent déjà , un mise à jour est suffisante.

Pour le listcount c'était dans Userform Activate qu'il fallait le mettre.

A+++
 

Pièces jointes

Bonjour Zon

Je te remerci de ton aide.

Je suis entraind éplucher toutes les reponses que j'ai eu pour réaliser l'apli que je veux (dont la tienne).

une des solution qui semble s'approcher de ce que je souhaite ma été donné sur un autre forum par TI. Je l'ai mise en pièce jointe.

Mais il existe encore les 2 problèmes :

1° Problème :
Lorsque je choisit le fichier avec mon combobox, et click ok, j'ai une fenêtre fichier introuvable qui apparait et je suis obligé de le renceigné à chaque fois. Alors que mon classeur contrôle et bien dans le repertoire "consoprog" et que le dossier "planning" et bien un sous répertoire de "consoprog".

2° problème :
la donnée qui doit être chargé en cellule A1 du classeur "contôle" ne se charge pas.

Comment faire pour résoudre cela ?

Car avec ta solution il faut que l'utilisateur mette les liaisons à jour.

Or comme mon classeur "contrôles" sera toujours dans le répertoire "consoprog" et que le dossier comportant les planning sera toujours un sous répertoire de "consoprog", je voudrais qu'il n'y est pas de chemin à déterminer par l'utilisateur. Mais dans le code, le chemin ne doit pas être une constante mais plustôt un truc du genre :
Chem = ThisWorkbook.Path & "\Planning"

Et encore une fois merci de ton aide
 

Pièces jointes

Salut,

Je trouve pas trés correct de ta part de nous interpeller par courriel, de tripler tes posts et de poser ta question ailleurs.

Je me demande si tu as lu et testé ma démo.
Ma constante est "\Planning\" , j'initialise NomRep = ThisWorkbook.Path & Chem => il n'y a aucune différence avec Chem = ThisWorkbook.Path & "\Planning"

Je passe par une mise à jour des liens pour éviter à l'utlisateur n'ait cette fenêtre pour qu'il sélectionne le fichier en question. => 1 er problème

C'est une démo qui pourra intéresser quelqu'un d'autre une de ces jours et si on a plusieurs liaisons on choisit laquelle modifier. Tu peux trés bien te passer de ma listbox supplémentaire et le faire directement une ligne de code à changer:

ChangeLienS ThisWorkbook, ListBox1.Value, NomRep & ComboBox1.Value
par
ChangeLienS ThisWorkbook, ComboBox1.Value
, NomRep & ComboBox1.Value


A+++
 
Bonsoir Zon.

Désolé de vous avoir "interpeller par courriel, de tripler tes posts et de poser ma question ailleurs" mais lorsque j'ai fais cela je n'obtenais plus de reponse à mon post.

Pour ce qui est de ta démo contrairement à ce que tu a l'air de croire je l'ai testé. Je ne me serais pas permis de te demander de l'aide et ne pas regarder les solutions que tu me propose.

J'ai testé ta démo que j'ai placé dans mon dossier consoprog mais lorsque je lance ton userform et que je veux mettre à jours avec le classeur bureau.xls par exemple, la mise à jour ne s'effectue pas (le msg "mise à jour éffectué" apparait). Pour info dans la liste de liens de ton userform seul apparait le liens correspondant au lien du classeur "atelier".

J'ai tenté aussi la modif que tu m'as donné :

code à changer:

ChangeLienS ThisWorkbook, ListBox1.Value, NomRep & ComboBox1.Value
par
ChangeLienS ThisWorkbook, ComboBox1.Value
, NomRep & ComboBox1.Value

Mais je ne vois pas ce que cela change exactement (mis à part que dans l'userform on voit le chemin complet du lien "atelier).

Dans ton code je ne vois pas ce qui correspond à :

With [A1]
.Formula = "='" & Chem & "\[" & ComboBox1.Value & "]feuil1'!E10"
.AutoFill [A1:A10]
End With

Pour que je puisse modifier ce que je veux exactement importé dans "contôles" et à quel endroit.

Tu trouvera dans mon fichier joint ton classeur que j'ai intégré à mon répertoire "consoprog". Tu verra les problèmes que je t'ai expliqué.

Je voudrai que dans ton userform, l'utilisateur n'est pas à selectionner de lien (d'apré ce que j'ai compris sa correspond au code que tu m'as fait changé), le lien doit se mettre à jour automatiquement.

Voila et encore une fois merci deta contribution.

A+ tard
 

Pièces jointes

Re,

J'avais oublié de te préciser qu'il fallait enlever un test (If instr(...))dans Changeliens c'est cette procédure qui équivaut à l'autofill. Elle n'est valable que si des liens exsitent déjà.

Donc j'ai enlever la listbox et modifier ChangelienS que tu trouveras dans la piéce jointe.

A+++
 

Pièces jointes

Bonjour Zon.

C'est bon cela fonctionne comme je le désirais.

Je te remercie de ton aide qui m'as été vraiment très précieuse sur ce coup (c'est le moins que je puisse dire).

Grâce à toi je devrais bien avancer sur mon application qui devient de plus en plus énorme. (d'ailleurs il faut que je cherche sur des posts existant ou sur un nouveau, si excel et limiter au niveau poids, nombre de code VBA, etc...).

Enfin Merci encore et à bientôt sur un nouveau poste !!! (lol, je pose beaucoup de questions sur ce forum).
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour