Pouvoir ouvrir des fichiers excel avec vba sans le faire planter

Résolu
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011 - 1 déc. 2011 à 14:43
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011 - 8 déc. 2011 à 08:04
Bonjour à tous,

J'ai des userforms sur lesquels se trouvent des boutons accès à un répertoire par exemple :
Private Sub CommandButton1_Click()
Shell "C:\WINDOWS\EXPLORER.EXE /n,/e,C:", vbNormalFocus
    End Sub


Dans ce répertoire j'ai des fichiers excels et je souhaite les ouvrir en cliquant simplement dessus.
Et là le problème c'est que je ne peux pas travailler sur mon fichier excel ouvert car j'ai monfichier vba qui fonctionne.

Donc à l'ouverture de l'userform, j'ai mis :
Code :
UserForm1.Show vb Modeless


Là je peux réduire mon userform mais il se bloque ou se ferme et je ne comprend.

Il faut savoir:
- Il ya plusieurs fichiers excels avec des noms qui peuvent changer dans le répertoire.
- Mes userform sont en plein écran.

Avez vous une solution à cela?

Cordialement,
Perpitou

37 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
2 déc. 2011 à 14:56
Alors à CE stade, regarde :
Dim dialop As FileDialog
    Set dialop = Application.FileDialog(msoFileDialogOpen)
    dialop.InitialFileName = "C:"
    dialop.Filters.Clear
    dialop.Filters.Add "classeurs Excel", "*.xlsm; *.xls", 1
    dialop.Filters.Add "documents Word ", "*.doc; *.doc", 2

    dialop.Show
    If dialop.SelectedItems.Count > 0 Then
      MsgBox "tu as choisi " & dialop.SelectedItems(1) & vbCrLf & _
      " et ton fichier en cours est " & Application.Path & "" & ThisWorkbook.FullName
    End If
    Set dialop = Nothing

J'ai dsans cet exemple :
- supprimé les filtres éventuellement présents
- ajoutés des filtres pour Excel et Word
regarde ce qui t'es maintenant proposé dans l'onglet "type de fichiers"
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 15:29
J'arrive à ouvrir les fichiers excel mais pasl es autres aaaaa
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 15:30
dialop.Filters.Add "Tous les fichiers", "*.*",
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 15:35
Dim x As Excel.Application
With Application.FileDialog(msoFileDialogOpen)
    .InitialFileName = ActiveWorkbook.Path & ""
    .Filters.Clear
    .Filters.Add "Tous les fichiers", "*.*"
    .AllowMultiSelect = False
    .Show
    If .SelectedItems.Count > 0 Then
        Set x = CreateObject("Excel.Application")
        x.Visible = True
        x.Workbooks.Open .SelectedItems(1)
                   
           Set x = Nothing
    End If
End With


En prenant compte ce que tu m'avais dit et en utilisant des bouts de code sur facebook j'ai fait ça
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 15:36
Enfin internet, je ne vois pas pourquoi j'ai écrit facebook
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 déc. 2011 à 15:55
J'arrive à ouvrir les fichiers excel mais pasl es autres aaaaa

Comme nt cela ! ?
As-tu bien lu :
regarde ce qui t'es maintenant proposé dans l'onglet "type de fichiers"

Reprends mon code et regarde mieux (car tes "*.*" ===>> pas convenable car = tous les fichiers !)
Et cesse de chercher ailleurs ce que tu as dans ton aide VBA (tu t'en porteras mieux, crois-moi).
Rappel : o n'en est pas encore à les ouvrir, mais juste à les afficher ppour y choisir. Et le reste, qui viendra en dernière étape, devra dépendre du choix, précisément.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 16:04
On repart sur Ton code :

Dim dialop As FileDialog
    Set dialop = Application.FileDialog(msoFileDialogOpen)
    dialop.InitialFileName = "C:"
    dialop.Filters.Clear
 dialop.Filters.Add "classeurs Excel", "*.xlsm; *.xls", 1
 dialop.Filters.Add "documents Word ", "*.doc; *.doc", 2
 dialop.Filters.Add "Documents autocad ", "*.dwg; .dxf", 3
 dialop.Filters.Add "Les photos ", "*.jpeg", 4

    dialop.Show
    If dialop.SelectedItems.Count > 0 Then
      MsgBox "tu as choisi " & dialop.SelectedItems(1) & vbCrLf & _
      " et ton fichier en cours est " & Application.Path & "" & ThisWorkbook.FullName
    End If
    Set dialop = Nothing
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 16:52
Mes compétences s'arrêtent là... Je n'y arrive pas! Merci quand même
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 déc. 2011 à 17:13
Bon (j'en déduis que cette fois-ci tu as "vu")

Juste une petite explication générale, maintenant.
Les "mots" de Microsoft se terminant par la lettre "s" ré réfèrent toujours à une collection des objets de même nom au singulier.
Ainsi, dans le code montré : Filters veut dire la collection des objets Filter, SelectedItems veut dire collection des objets selecteditem.
Toutes les collections d'objets répondent aux même méthodes (add, pour ajouter un objet, Clear, pour effacer, etc ...) et ont un index (que l'on a utilisé par exemple pour ajouter des filtres : index 1 pour les classeurs Excel, 2 pour les documents Word). Ont peut en ajouter ainsi autant que l'on veut).
Pigé ? ===>> on continue === >>
tu veux maintenant, si j'ai bien compris, pouvoir ouvrir/exécuter le fichier choisi ?

Or, il va falloir les ouvrir différemment selon leur catégorie (un classeur Excel, par exemple, ne s'ouvre pas comme un document Word, un fichier texte, etc...)

Etape 3, donc : savoir à quelle catégorie appartient le fichier choisi ===> fastoche ! nous allons le savoir grâce à la propriété FilterIndex de ton objet dialop . Elle te retourne tout bêtement l'index du filtre (Filter) choisi dans la collection Filters ===>> regarde ce que ton donne maintenant la msgbox avec, cette fois-ci :
Dim dialop As FileDialog
    Set dialop = Application.FileDialog(msoFileDialogOpen)
    dialop.InitialFileName = "C:"
    dialop.Filters.Clear
    dialop.Filters.Add "classeurs Excel", "*.xlsm; *.xls", 1
    dialop.Filters.Add "documents Word ", "*.doc; *.doc", 2
    dialop.Show
    If dialop.SelectedItems.Count > 0 Then
      MsgBox "tu as choisi " & dialop.SelectedItems(1) & vbCrLf & _
      " et ton fichier en cours est " & Application.Path & "" & ThisWorkbook.FullName & vbCrLf & _
      "et tu as sélectionné sur le filtre d'index " & dialop.FilterIndex '<regarde ici
    End If
    Set dialop =  Nothing

C'est cet index (la denière ligne affichée) qui va nous permettre de savoir avec quel logiciel ouvrir le fichier affiché en 2ème ligne.
Pigé ? Teste et on passe à la 4ème étape ensuite.

PS : il faut que tu saches trois choses :
1) je n'utilise personnellement jamais cette boîte de dialogue, ni même le composant CommonDialog (j'utilise pour mes applis directement les fonctions de l'Api de Windows)
Pour te renseigner, j'ai donc étudié en même temps que toi l'utilisation de cette boîute de dialogue
2) je n'utilise non plus jamais ce que je vais te faire faire en 4ème étape (pour celle-la également, j'utilise une fonction de l'Api de Windows - ShellExecute - qui m'affranchit de la nécessite de déterminer à l'aide de quel logiciel ouvrir le fichier choisi).
Mais tu es débutant ! Je veux donc éviter pour l'instant d'utiliser autre chose que ce que t'offre nativement VBA quitte à te montrer autre chose après que tu auras assimilé ce qui est à ta portée. Je serais à ce propos assez reconnaissant aux visiteurs avertis de cette discussion de ne pas venir "étaler" d'ores et déjà ShellExecute
3) le fait que nous sommes en fin de semaine m'a paru l'opportunité donnée d'y aller ainsi pas-à-pas, tout en m'assurant de rester à ta portée. Ce n'est dans mon esprit pas peine perdue, ni pour toi, ni pour d'autres débutants "tombant" sur la présente discussion.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
2 déc. 2011 à 17:24
J'ai utilisé shellexecute, c'est vrai c'est simple mais après quand je l'ouvrais il se mettait dans l'application excel de mon fichier excel.
Merci de m' expliquer tous les détails.

C'est top! Tu choisis le dossier que tu veux mais il t'indique l'index donc le type de fichier que tu as choisis.

Donc si j'ai bien compris ta démarche, tu me montres qu'on établit des index selon les extensions.
En choisissant, un fichier, on choisit donc un type de fichier renseigné par l'index que nous allons utiliser pour l'ouverture de nos documents. Exact?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 déc. 2011 à 20:06
Ah ... Mais je viens de voir que (et en plus sur la base de ce que tu as appris ici), tu es allé "à la pêche" ailleurs (et pour tout te dire, je n'apprécie pas vraiment) . Pourquoi continuerais-je alors sur une lancée didactique, qui me demande des efforts, dans de telles conditions ? Il est certain que tu y trouveras (là-bas) une bonne âme (faux cadeau, à mon avis) qui t'écriras un code que tu n'auras plus qu'à copier, sans être vraiment passé par les étapes de compréhension auxquelles je voulais te conduire pas à pas, en parfaite connaissance de cause.
Tu voudras alors bien comprendre que j'arrête ici tout net ce que j'avais entrepris.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
5 déc. 2011 à 15:03
Bonjour,
J'ai vraiment besoin de ton aide car je n'arrive pas à trouver seul les codes ! Oui je suis allé voir ailleur car je croyais que tu n'allais pas m'aider!
peux tu finir ton explication stp!

Excuses moi encore une fois!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 déc. 2011 à 15:10
J'ai vraiment besoin de ton aide car je n'arrive pas à trouver seul les codes ! Oui je suis allé voir ailleur car je croyais que tu n'allais pas m'aider!

Elle est bien bonne ! Et à la même heure !
Et tu ne reviens que parce qu'abandonné "ailleurs"...
Bon ..
Tu étais impatient ? un peu capricieux ? ===>> je reviendrai dans ce cas continuer, mais pas avant une bonne semaine, maintenant.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
5 déc. 2011 à 15:15
Impatient et stupide car en plus de me donner les codes tu m'expliquais les fonctions et c'est important si je veux les adapter...
Enfin si tu as le temps un de ces 4 c'est avec plaisir.

Désolé merci et à la prochaine!
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
5 déc. 2011 à 15:27
Juste pour info cette partie reste pour une énigme!
 Select Case dialop.FilterIndex
      Case 1: dialop.Execute
      Case Else: MsgBox "pas encore traité. On y viendra ensuite"
    End Select
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
6 déc. 2011 à 15:52
J'ai essayé avec shell, shell execute...

Mais ce qui est bizare c'est que par moment il s'ouvre normalement sans faire planter vba et on réeffectue la même opération et hop ça plante...
0
perpitou Messages postés 41 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 8 décembre 2011
8 déc. 2011 à 08:04
Bon je n'ai pas de solution à mon problème... Si quelqu'un peut m'aider??
0
Rejoignez-nous