Userform ouverture fichier Excel (nouveau ou existant)
Bonjour à tous,
Je suis débutant en VBA et voici mon problème, J'ai crée une userform qui doit me permettre de soit :
Ouvrir un nouveau fichier Excel
Ouvrir un fichier excel existant (stocké dans mes documents)
Pour l'ouverture du fichier excel : Pas de problème
Par contre je n'arrive pas à ouvrir un fichier existant
Private Sub MAJ_Click()
Application.GetOpenFilename
Dim wbks As Object
Set wbks = oExcel.ActiveWorkbook
Set oSheet = oBook.ActiveSheet
'## Display the Excel
Application.Visible = True
End SubJ'arrive à parcourir mes documents mais rien ne se passe quand je clique dessus.
Comment faire pour activer la feuille excel de mon fichier
Si quelqu'un à une idée ou un conseil, je suis preneur
Merci
Salut fehmous,
Juste à vue, sans regarder le reste du code, tu lui dis de faire la rechercher, mais tu ne lui dis pas ce qu'il faut faire, si tu lui dit pas d'ouvrir la porte, Excel va se contenter de s'y rendre et attendre ^^
Un exemple de code pour ouvrir un fichier avec GetOpenFileName :
Si la fonction contient un chemin/fichier, alors tu ouvres le dossier qui porte ce nom (et tu met un message précisant que tu as ouvert tel fichier).
Sub Macro1()
'
' Macro1 Macro
'
fileToOpen = Application _
.GetOpenFilename
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
Workbooks.Open fileToOpen
End If
'
End SubSi tu veux mieux comprendre la fonction en général tu suis le lien, c'est celui de Microsoft
https://msdn.microsoft.com/fr-fr/library/office/ff834966.aspx
Si tu as toujours des questions sur la formule, signale le.
En détaillant la fonction tu peux "enregistrer" un chemin sur ta macro pour te rendre à un dossier en particulier, ajouter un filtre pour ne voir qu'un type de fichiers (texte, excel97-2003, ...), ça dépend juste de ce que tu souhaites
Salut Timothe, premierement merci pour ta réponse et ton lien
J'ai réussi dans ma userform à coder pour ouvrir un fichier Excel quelconque ; J'ai rajouté un filtre comme tu m'as conseillé pour ne sélectionner que des fichiers formats Excel
Private Sub CommandButton2_Click()
Dim Monfichier As String
Monfichier = Application.GetOpenFilename(Title:="Sélection du fichier", FileFilter:="Fichiers Excel *.xls (*.xls),")
If Not Monfichier = "Faux" Then Call ShellOuvre(Monfichier)Puis dans le module :
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub ShellOuvre(NomFichier As String)
If Dir(NomFichier) <> "" Then
ShellExecute 0, "open", NomFichier, "", "", 0
Else
MsgBox "Chemin ou fichier introuvable."
End If
End SubMaintenant j'aimerais rendre active la feuille de mon classeur que je viens d'ouvrir. Mais je ne trouve pas comment faire pour récupérer la feuille. (Sachant que selon le fichier Excel que j'ouvre le nom de la feuille est différent)
Si quelqu'un à une idée...
Merci en avance
J'ai essayé de placer les bouts de ton code dans un classeur que j'ai ouvert, ça n'a pas l'air de fonctionner chez moi (il n'arrive pas à faire le lien entre les deux bouts.
Sinon en théorie, quand on ouvre un fichier avec GetOpenFileName il me semble que le fichier ouvert devient le classeur ouvert ("actif") et une des feuilles du fichier est affichée ?
En faite, j'arrive à l'ouvrir un Excel quelconque mais pas à travailler dessus.
J'aimerai maintenant écrire des données dans la feuille de Excel
Ci dessous j'ai réussi à écrire dans un fichier existant précis (j'appelle directement un fichier précis)
Set oExcel = CreateObject("Excel.Application")
If Err.Number <> 0 Then
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = True
End If
oExcel.Visible = True
Set oBook = oExcel.Workbooks.Open("C:\Users\bt\Desktop\Test.xls")
Set wbks = oExcel.ActiveWorkbook
Set oSheet = oBook.ActiveSheet
'## Export data to Excel
oSheet.Range("A6").Value = Name
oSheet.Range("A7").Value = Mass
oSheet.Range("A8").Value = Size
'## Display the Excel
oExcel.Visible = TrueMais dans le cas d'un fichier existant quelconque je n'arrive pas à activer la feuille pour y inscrire les données. La feuille ne semble pas active.
Je suis pas sur de tout avoir compris, donc dans le doute je t'ai fait un programme d'essai qui va créer un nouveau fichier et y faire des modifications, je n'ai pas mis de fonction sauvegarde automatique après l'ouverture mais c'est faisable.
Sub Macro1()
'
' Macro1 Macro
'
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
fileToOpen = Application.GetOpenFilename
'Si l'utilisateur choisit un fichier, on l'ouvre
If fileToOpen <> False Then
MsgBox "Open " & fileToOpen
Workbooks.Open fileToOpen
'Sinon on créer un autre classeur, on renomme la feuille du premier classeur en "Salut"
'on ajoute une feuille au nouveau classeur, appelée "New"
'et on ajoute "Hello" dans la cellule A1 dans la feuille "New"
Else
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
xlApp.Visible = True
ActiveSheet.Name = "Salut"
xlBook.Worksheets.Add.Name = "New"
xlBook.Sheets("New").Cells(1, 1) = "Hello"
End If
'
End SubSalut Timothe,
J'ai repris ton code, mais chez moi il ne fonctionne pas. Quand je sélectionne un fichier et que je l'ouvre :
J'ai seulement le msgbox qui me dit : Open C:\adresse du fichier.xls puis c tout le fichier ne s'ouvre pas
Puis j'ai l'erreur : Run time error '91' Object variable or with block variable not set
J'ai refait un fichier Excel que tu trouvera ci joint ça sera peut être plus compréhensible.
J'ai une boite de dialogue avec 3 bouton : Nouveau Excel - Mise à jour d'un Excel - Annuler
- Nouveau Excel : ici j'appelle un fichier Excel bien précis et j'inscrit une valeur numérique dans une cellule : ça marche parfaitement
- Mise à jour d'un Excel : ici l'explorateur s'ouvre je choisit un fichier quelconque puis j'essaye d'écrire dans une cellule : impossible
- Annuler : En cliquant dessus, la boite de dialogue est caché
Ci quelqu'un à une petite idée...
Merci
Bonjour,
Je t'envoie le code avec le dossier test que j'utilisais. Les boutons sont sur la feuille "Salut", pas sur une userform (normalement le code y marche aussi).
Et chez moi les deux fonctionnent (il y a juste que le code pour écrire sur un fichier éxistant, ne connaissant pas le nom de la feuille, j'appelle la feuille active, donc si il y a 3 feuilles, la feuille active c'est la dernière utilisée la dernière fois que le fichier à été sauvegardé puis fermé, du coup, si par exemple tu veux écrire sur la feuille 1, si le fichier a été sauvegardé en utilisant la feuille 3, sa écrira sur la feuille 3) Donc à vérifier.
Salut Timothe,
Merci pour ton fichier Excel, il m'a permit de mieux comprendre la structure.
(dsl pour le retard)
A+