Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

combobox choix de données importés

  • Initiateur de la discussion delirium
  • Date de début
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.
 
Z

Zon

Guest
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+++
 
A

Adelec

Guest
Bonjour,

Avec les packs de @+Thierry dans la centrale et/ou en cherchant export de donnees avec michel, il semble qu'il y ait eu de la matiere de faite deja la dessus.......mais a suivre.

Adelec
 
R

Robert

Guest
Salut Delirium, Zon, Adelec, Salut le forum,

Le temps de cogiter sur ton cas, Maître Zon a déjà donné la soluce... Comme c'est fait (et pas forcément bien fait) je t'envoie quand même un petit exemple en pièce jointe.

À plus,

Robert
 

Pièces jointes

  • Classeurs.zip
    13.5 KB · Affichages: 20
  • Classeurs.zip
    13.5 KB · Affichages: 26
  • Classeurs.zip
    13.5 KB · Affichages: 24
Z

Zon

Guest
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+++
 
D

delirum

Guest
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.
 
Z

Zon

Guest
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

  • controlesZon.zip
    20.7 KB · Affichages: 19
D

delirum

Guest
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

  • consoprog.zip
    18.6 KB · Affichages: 23
  • consoprog.zip
    18.6 KB · Affichages: 24
  • consoprog.zip
    18.6 KB · Affichages: 21
Z

Zon

Guest
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+++
 
D

delirium

Guest
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

  • consoprogZon.zip
    32.5 KB · Affichages: 17
  • consoprogZon.zip
    32.5 KB · Affichages: 20
  • consoprogZon.zip
    32.5 KB · Affichages: 18
Z

Zon

Guest
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

  • consoprogZon.zip
    49.8 KB · Affichages: 24
  • consoprogZon.zip
    49.8 KB · Affichages: 26
  • consoprogZon.zip
    49.8 KB · Affichages: 28
D

delirum

Guest
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).
 

Discussions similaires

Réponses
27
Affichages
876
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…