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
Dernière intervention
8 décembre 2011
- 1 déc. 2011 à 14:43 - Dernière réponse : perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
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
Afficher la suite 

Votre réponse

37 réponses

Meilleure réponse
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 17:39
3
Merci
Exact ! T'as tout compris
Alors comment traiter ?
on va commencer par le plus simple : un classeur Excel. Pourquoi ? ===>>
Parce que ce coquin de Microsoft/Excel s'est "réservé" une priorité assez bienvenue : l'ouverture d'un classeur utilisera spontanément l'application Excel si l'on utilise la méthode execute de l'objet dialop ===>>
Regarde et vois ce qui se passe en choisissant un classeur (donc index 1) :
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 
    End If
    Select Case dialop.FilterIndex
      Case 1: dialop.Execute
      Case Else: MsgBox "pas encore traité. On y viendra ensuite"
    End Select
    Set dialop = Nothing


____________________
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

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 1 déc. 2011 à 16:59
0
Merci
Bonjour,
Pourquoi te compliquer ainsi la vie, à passer par l'explorateur, alors que VBA/Excel t'offre l'objet FileDialog (à voir dans ton aide VBA), bien plus souple et élégant et que tu peux de surcroît assortir d'une expression conditionnelle pour refuser ton propre fichier en cours ?

Même l'intruction DIR et une listbox, moins élégants , seraient mieux que l'utilisation de Explorer.exe !


____________________
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
Commenter la réponse de ucfoutu
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 1 déc. 2011 à 17:01
0
Merci
Sans compter que tu pourrais utiliser un filtre pour ne proposer que des classeurs Excel et non TOUS les fichiers présents !


____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 1 déc. 2011 à 17:32
0
Merci
Bonjour ucfoutu,

tout d'abord merci de t'interesser à mon travail. Je ne veux pas de filtre car je souhaite pouvoir récupérer et ouvrir tous types de fichiers mais mon problème je le rencontre en ouvrant des fichiers excels.

Après j'utilise l'explorateur pour aller chercher des dossiers sur son ordinateur.

Pour "VBA/Excel t'offre l'objet FileDialog" et "Même l'intruction DIR et une listbox, moins élégants , seraient mieux que l'utilisation de Explorer.exe" : ce n'est pas que je ne veux pas mais je ne connais pas donc j'ai fait avec ce que j'ai pu trouver sur le net.
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 1 déc. 2011 à 17:52
0
Merci
mais je ne connais pas donc j'ai fait avec ce que j'ai pu trouver sur le net

Pourquoi chercher plus loin ce que tu as tout près (ton aide VBA) et assorti d'un exemple, en plus ?
Tu ne veux pas de filtre ? C'est encore plus simple, alors (ça en moins)
Vas-y (lis ce qu'est FileDialog) et essaye. Reviens si tu t'y perds malgré cette lecture.
____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 1 déc. 2011 à 18:06
0
Merci
Le problème reste le même j'ouvre le fichier excel et ça fonctionne pas
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 1 déc. 2011 à 18:13
0
Merci
et je t'ai dit plus haut :
tu peux de surcroît assortir d'une expression conditionnelle pour refuser ton propre fichier en cours

l'as-tu fait ?


____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 10:10
0
Merci
Excuses moi encore d'être aussi mauvais mais je n'arrive toujours pas à ouvrir le fichier... et
tu peux de surcroît assortir d'une expression conditionnelle pour refuser ton propre fichier en cours

Je n'en parle même pas...
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 10:24
0
Merci
Hé bé !
Tu attends du tout cuit ? As-tu ouvert ton aide VBA, comme je te le demandais, au moins ?
Je veux bien commencer un peu, mais pas à pas, juste pour voir ...
Premier pas :
un bouton de commande et :
Private Sub CommandButton4_Click()
Dim dialop As FileDialog
Set dialop = Application.FileDialog(msoFileDialogOpen)
dialop.InitialFileName = "C:"
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.Name
End If
Set dialop = Nothing
End Sub

tu cliques sur ce bouton ===>> et tu vois ===>> tu choisis un fichier ===>> ouvrir ===>> et tu vois ...
Je t'ai là non seulement mis sur la voie, mais t'ai pratiquement tout fait
Te reste juste une expression conditionnelle (super-évidente) pour ne traiter qu'un fichier qui ne serait pas le tien.
A toi,maintenant (quand-même) !

____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 10:31
0
Merci
Ok ok! je partais sur un truc complètement différent... J'essaye de voir.

Merci beaucoup pour ta patience et ta disponnibilité..
Commenter la réponse de perpitou
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 10:51
0
Merci
Ok je suis vraiment nul je n'arrive pas à modifier ce code... Je suis désolé pour mon incompétence mais je ne comprend pas..
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 10:54
0
Merci
Il n'y a à ce stade rien à modifier à ce code ! Il est à compléter (les actions à conduire sur le fichier choisi ).
Qu'entends-tu par "modifier" ?


____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 11:00
0
Merci
Oui en le testant je me suis bien rendu compte qu'il fonctionnait mais je souhaite sélectionner et ouvrir. Pour cela j'ai modifier : (msoFileDialogOpen)par (msoFileDialogFilePicker). J'ai pas réussit après, j'ai fait ce code qui ne fonctionne pas :

Private Sub CommandButton1_Click()
Dim Wbk As Workbook
Dim dialop As FileDialog
Set dialop = Application.FileDialog(msoFileDialogOpen)
dialop.InitialFileName = "C:"
dialop.Show
If dialop.SelectedItems.Count > 0 Then
Set Wbk = Workbooks.Open(dialop)

Wbk.Close False

End If
Set dialop = Nothing

End Sub
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 11:19
0
Merci
Tu as pourtant vu ce qui s'affichait dans la msgbox (mon code).
Quel y est selon toi le chemin du fichier que tu as choisi ?
dialop seul n'est pas un fichier, mais (regarde bien) : la boîte de dialogue elle-même !
Je vais te laisser là et te laisser travailler avec sérieux. Ne reviens pas avant cet effort (je ne reviendrai sur cette discussion avant d'avoir laissé passer un temps raisonnable ... deux heures ... pas avant, de sorte à ce que tu en profites pour exercer tes neurones ).


____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 12:11
0
Merci
Je vais y arriver.. Mais je vais manger là je reviens plsu tard.
Private Sub CommandButton4_Click() 
Dim dialop As FileDialog 
Set dialop = Application.FileDialog(msoFileDialogOpen) 
dialop.InitialFileName = "C:" 
dialop.Show 
If dialop.SelectedItems.Count > 0 Then 
Workbooks.Open Filename: = dialop.SelectedItems(1) 
End If 
Set dialop = Nothing 
End Sub
Commenter la réponse de perpitou
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 14:11
0
Merci
Je peux l'ouvrir donc pas de problème .
Le showmodal de chaque userform est false.
Maintenant j'ai toujours le problème de pouvoir ouvrir et travailler sur d'autres fichiers.

J'ai essayé d'ouvrir une nouvelle application de Excel afin d'ouvrir le fichier mais mon code ne fonctionne pas:
Private Sub CommandButton3_Click()
Dim x As Excel.Application
Dim dialop As FileDialog
Set dialop = Application.FileDialog(msoFileDialogOpen)
dialop.InitialFileName = "C:"
dialop.Show
Set x = CreateObject("Excel.Application")
If dialop.SelectedItems.Count > 0 Then
x.Visible = True
Workbooks.Open Filename:=dialop.SelectedItems(1)
End If
Set dialop = Nothing
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 14:18
0
Merci
Bon !
2ème étape, maintenant (avant d'aller plus loin, mais après, hein ...)
1) Que veux-tu maintenant exactement faire avec le fichier choisi ?
2) tu as dit plus haut que tu voulais ouvrir "tous fichiers", mais voilà que tu ne t'intéresses apparemment qu'aux classeurs Excel (ton "Workbooks.Open Filename:=dialop.SelectedItems(1)")
Qu'en est-il exactement, donc ?


____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 14:25
0
Merci
Oui je veux ouvrir tous les fichiers et oui je m'aperçois donc que je me suis planté...
Commenter la réponse de perpitou
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 2 déc. 2011 à 14:30
0
Merci
Oui je veux ouvrir tous les fichiers et oui je m'aperçois donc que je me suis planté...

Tu commences à mesurer la nécessité d'être terès précis.
Mais dis-nous : vraiment TOUS les fichiers ? (car, y compris depuis Explorer, tous ne s'ouvriront pas ainsi). Précise ce point également.

____________________
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
Commenter la réponse de ucfoutu
perpitou
Messages postés
41
Date d'inscription
jeudi 17 novembre 2011
Dernière intervention
8 décembre 2011
- 2 déc. 2011 à 14:40
0
Merci
Excel, Word, Pdf ,Dwg et c'est tout! La je suis entrain de chercher le code correspondant
Commenter la réponse de perpitou

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.