choix du classeur de données a importées

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

delirium

Guest
Bonjours tout le monde.

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

Zon, Adelec et Robert m'ont déja filé un petit coup de main sur ce poste :
http://www.excel-downloads.com/html/French/forum/messages/1_110318_110318.htm
mais je n'arrive pas encore à faire ce que je désire (je débute le VBA et c'est hard par moment).

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 à combobox dans un userform.

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

J’ai donc crée un classeur matrice, que l’utilisateur renomme comme bon lui semble (par exemple école) et sur le quel il met ces données dans des cellules définies (dans le fichier joint, il s’agit des cellules A1 à A10). Il doit ensuite mettre ce classeur dans le dossier «Planning».


Lorsque l’on lance l’userform, celui ci détecte les fichier.xls qui sont dans le dossier «Planning». Sur mon PC sa marche mais pour l’utilisateur il faut qu’il est le même chemin que sur mon PC. Je ne vois pas comment y remédier.

Ensuite, lorsque l’on à fait notre choit et que l’on click sur OK, je veux importer les données du classeur choisit. Mais je ne vois pas comment l’écrire dans mon code.


Merci à tous et a bientôt.
 

Pièces jointes

  • consoprog.zip
    18.5 KB · Affichages: 14
  • consoprog.zip
    18.5 KB · Affichages: 15
  • consoprog.zip
    18.5 KB · Affichages: 14
K

K@d

Guest
Salut !

Afin de ne pas trop surcharger la procédure (utilisation d'un modèle comme tu le décris ci-dessus), tu peux continuer d'afficher ta liste dans le userform et rajouter sur celui-ci un bouton "autre".
Derrière ce bouton, rajoute le code suivant qui te renvoie en string le chemin d'accès sur un disque (local ou non) à un fichier :

DECLARATIONS :

Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type
Public Server As String
'32-bit API declarations
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long


Function GetDirectory(Optional Msg) As String

'***********************************************
'Fonction: permet de récupérer un chemin sur le disque
'Arguments: optionnel - string inscrite sur l'explorateur
'***********************************************

Dim bInfo As BROWSEINFO
Dim path As String
Dim r As Long, X As Long, pos As Integer

'Définit le Bureau comme dossier racine
bInfo.pidlRoot = 0&

'Invite de la boite de dialogue
If IsMissing(Msg) Then
bInfo.lpszTitle = "Selectionnez un dossier."
Else
bInfo.lpszTitle = Msg
End If

'Type de renvoi : dossier
' bInfo.ulFlags = &H1
'Type de renvoi : fichier
bInfo.ulFlags = &H4000


'Affiche la boite de dialogue (explorateur)
X = SHBrowseForFolder(bInfo)

'Traite le résultat
path = Space$(512)
r = SHGetPathFromIDList(ByVal X, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
GetDirectory = Left(path, pos - 1)
Else
GetDirectory = ""
End If

End Function

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

Tu peux ensuite récupérer cette valeur, ouvrir le fichier et traiter tes informations. Rien ne t'empêche également de rajouter le nouveau fichier dans ton combobox ; je ne connais pas ta source, mais on peut avoir un code du type :

Sub Bouton_AutreClick

Dim StrNewFile as string

StrNewFile=GetDirectory 'récupère le nom d'un fichier

if StrNewFile<>"" then

select case msgbox("Voulez-vous ajouter ce fichier à la liste des fichiers d'import ?",vbQuestion+vbyesno,"Nouveau fichier")

Case vbyes
'on ajoute le fichier à la source du combobox

'ceci est un exemple
ThisWorkbook.activate
Range("PremierFichier").end(xldown).offset(1,0).value=StrNewFile

'import des données ou on remontre le userform avec la liste mise à jour
Code:
Case vbno
'on importe juste les données du fichier

[CODE]

end select

End Sub


J'espère que cela répond à ton problème... Je reste à ta disposition.
Bon courage !

Clément

"S'il n'y a pas de solution, c'est qu'il n'y a pas de problème." (devise Shadock)
 
D

delirum

Guest
Salut Clément et merci de ton aide.

J'ai regardé les codes que tu m'as donnés, mais je ne pense pas que cela corresponde vraiment à ce que je souhaite.

Sur un autre forum, quelqu'un m'as donné des code que j'ai mis en place dans mon application (voire pièce jointe).

Mais il y a encore 2 problèmes, qui sont :

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
 

Discussions similaires

Réponses
7
Affichages
405

Statistiques des forums

Discussions
312 488
Messages
2 088 867
Membres
103 979
dernier inscrit
imed