Lister/sélectionner fichier/feuille ouvert dans InputBox
Bonjour à tous,
J’utilise régulièrement des macro au boulot et je voudrait facilité légèrement leur utilisation.
Je compare ou transfert des données entre deux fichiers différents. Je fais la sélection "manuellement" et je voudrais pouvoir le faire plus facilement.
Voici le code que j'utilise actuellement pour sélectionner mon fichier et la feuille dans laquelle travailler.
Sub MajFichier()
Dim ws1, ws2, fichier, feuille, dlr, cs, cd, cdb, i, j, f, p
fichier = InputBox("nom fichier1 :", "fichier1 -> 2")
Workbooks(fichier).Activate
feuille = InputBox("feuille fichier1 :", "fichier1 -> 2")
Set ws1 = Workbooks(fichier).Worksheets(feuille)
ws1.Activate
fichier = InputBox("nom fichier2 :", "fichier1 -> 2")
Workbooks(fichier).Activate
feuille = InputBox("feuille fichier2 :", "fichier1 -> 2")
Set ws2 = Workbooks(fichier).Worksheets(feuille)Je voudrait pouvoir faire dans l'ordre:
1) Lister dans une fenêtre les fichiers ouvert.
2) Sélectionner le fichier dans lequel je souhaite travailler
3) Sélectionner la feuille dans laquelle travailler.
4) Stocker le résultat dans ma variable.
Merci pour votre aide :)
Bonjour,
Sur quel fichier se trouve le code ? Combien de fichiers ouverts avez-vous ? Ce sont toujours les mêmes ?
Je pense à une alternative :
- lister quelque part (un endroit réservé à ça) les fichiers ouverts,
- double-cliquer sur les noms de fichiers (ou solution du même genre),
- appuyer sur un bouton afin d'exécuter le code.
Cdlt,
Alors je stock mes macros dans excel directement (cad dans VBAproject ou personal.xlsb).
J'ai parfois plusieurs fichiers qui ne sont pas toujours nommé de la même façon.
Un cas d'utilisation par exemple : Un fournisseur me demande mes statistiques de vente pour une période déterminée et me transmet un fichier excel à remplir. Il a souvent une structure dans le nom de son fichier. Je sors mes statistiques de mon système de caisse au format excel et une macro remplis automatiquement le fichier de mon fournisseur en fonction de mon fichier interne.
Je voulais pouvoir sélectionner les deux fichiers avec lesquels la macro va fonctionner dans une liste afin d'éviter les fautes de frappe dans mon InputBox.
Je pourrais sans problème passer par un troisième fichier où je ferais la macro serait stockée et où je ferais la sélection.
En espérant avoir éclairci la situation
Re,
Je pense avoir compris. Donc il y a un fichier extrait du système de caisse (dont le nom peut être déterminé en fonction du nom du fournisseur et de la date, j'imagine) et un fichier envoyé par le fournisseur qui se trouve dans les téléchargements ?
Voilà c'est exactement ça...
En fait j'utilise ce "module" de sélection de fichier pour plusieurs macro en fonction de la manipulation que je dois faire sur mes fichiers.
D'accord. D'où la seconde inputbox pour sélectionner le nom de la feuille ? L'idéal serait de trouver une façon d'exécuter le code invariablement.
Donc je pensais à chercher le nom du fichier source (de la caisse) dans le dossier téléchargements et chercher le nom du fichier de destination (à renvoyer au fournisseur) ou alors l'obtenir grâce à une boite de dialogue de sélection de fichier.
Mais dans ce cas, il faut, à chaque exécution de ce code, que les fichiers soient dans le dossier téléchargements, qu'ils répondent au modèle, qu'on trouve un point commun sur les feuilles manipulées (l'index par exemple) et un point commun sur les plages manipulées. Est-ce que ça parait possible ?
En fait le restant de mon code pour la comparaison est déjà fais et fonctionnel (je peux le mettre ici pour ceux que ça intéresse).
J'avais en tête un ComboBox pour lister.
Je viens de trouver ceci qui fonctionne pour lister les classeurs ouverts et qui me renvois le fichier que j'ai sélectionner.
Option Explicit
Private Sub UserForm_Activate()
Dim vWorkbook As Workbook
ComboBox1.Clear
For Each vWorkbook In Workbooks
ComboBox1.AddItem vWorkbook.Name
Next
End Sub
Private Sub CommandButton1_Click()
If ComboBox1.ListIndex <> -1 Then
Call YourMacro(ComboBox1)
End If
End Sub
Private Sub YourMacro(vWorkbookName As String)
MsgBox Workbooks(vWorkbookName).Name
End SubIl me reste juste à voir pour l'intégrer dans mon code et voir pour lister les feuilles