Comment ouvrir un classeur à partir d'une macro

BABUDROME Messages postés 151 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2016 - 25 mars 2016 à 09:10
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 25 mars 2016 à 17:16
Bonjour,
J'ai 2 classeurs : "TRAITER" sur disque dur du PC et "DATA" sur clé USB.

Cas 1) Si j'ouvre DATA, puis TRAITER, la macro Workbook_Open sait identifier chacun des classeurs et traiter les données de DATA.
Cas 2) Si j'ouvre TRAITER seulement (workbooks.count=1), comment ouvrir DATA avec Dialog, afin de me retrouver comme le cas 1 ?

J'ai bien chercher dans l'explorateur d'objet, mais c'est aussi nébuleux que l'aide souvent muet.
J'espère de pas trop abuser de votre temps.
A+ bab

PS : la copie d'une partie de feuille d'un classeur vers un autre classeur fonctionne. Merci à ucfoutu.

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 25/03/2016 à 09:39
Bonjour,
C'est à cela que sert la méthode Workbooks.open
exemple :

Workbooks.Open "D:\blabla.xlsm"


EDIT : tu pourras trouver intéressant d'attribuer une variable objet au classeur ainsi ouvert, puis de t'en servir comme tu le souhaites ...
Exemple :
Dim toto As Workbook
Set toto = Workbooks.Open("D:\abab.xlsm")
For Each feuille In toto.Worksheets
MsgBox feuille.Name
Next

qui te permet d'utiliser toto

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
BABUDROME Messages postés 151 Date d'inscription lundi 16 janvier 2006 Statut Membre Dernière intervention 19 avril 2016
25 mars 2016 à 14:18
Rebonjour,
Dans le cas 2, il se peut que le nom du classeur me soit inconnu, de même que le chemin dans le support. Je dois alors rechercher son origine puis le saisir dans le classeur TRAITER qui pourra l'ouvrir.
J'espérais extraire ce classeur (chemin compris) via un Dialogue interne d'une macro de TRAITER afin d'éviter les erreurs de saisie d'un utilisateur Lambda.
Merci quand même de ta réponse, que je peux mettre en place pour l'instant. A+ Bab
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/03/2016 à 06:22
regarde ce que fait par exemple ceci :
titi = Application.Dialogs(xlDialogOpen).Show
If titi Then
Set toto = ActiveWorkbook
MsgBox toto.Name
End If

clique sur le classeur de ton choix deanbs la boîte de dialogue et regarde

EDIT : une autre méthode ? ====>>>
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant
With fd
.Filters.Add "Classeurs Excel", "*.xl*", 1
If .Show = -1 Then
For Each vrtSelectedItem In .SelectedItems
MsgBox "tu as choisi le fichier : " & vrtSelectedItem
Next vrtSelectedItem
Else
MsgBox "tu n'as choisi aucun fichier"
End If
End With
Set fd = Nothing

Le reste, avec cette seconde méthode, est facile à deviner (suffit de continuer avec le code de mon tout premier message, puisque le chemin complet est ainsi connu.

Je te précise qu'il t'est également possible de définir un répertoire "initial", en ajoutant par exemple, immédiatement après With fd :
.InitialFileName = "D:\monoutil"

(la boîte de dialogue s'ouvrira ainsi d'abord sur le répertoire D:\monoutil
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous