Paramétrage macro si fichiers séparés (cloud)
Bonjour,
Voici la situation en image et en couleurs pour faciliter la lecture :
Comme vous pouvez le constater, je dois télécharger des documents qui ont des structures similaires.
Le code écrit peut déjà traité les 3 fichiers indépendamment.
Néanmoins, j'ai écrit le code directement sur un fichier téléchargé. Or je ne souhaite pas devoir ajouter la macro dans chaque fichier à chaque fois.
Mon objectif serait de créer un fichier contenant cette macro, qui serait exécutable sur l'autre. Pour cela, je crois qu'il faut simplement ouvrir les deux fichiers en même temps. Quelqu'un pour confirmer ?
Aussi en l'état, je dois copier une feuille de ce potentiel nouveau fichier vers le fichier téléchargé avant l'exécution de la macro. Cela me permet de revenir dans la configuration où j'ai écrit cette macro, à savoir : sur un fichier téléchargé.
Donc il me faudrait réaliser cette copie en début de macro sachant que chaque fichier du drive contient "Lot" dans son nom de fichier.
J'imagine qu'un test IF avec cette caractéristique rendrait la macro applicable à n'importe quel fichier.
Je vous remercie pour le temps accordé à cette situation un peu particulière.
Bonjour Lama_Del_Ray
Si ce que vous souhaitez faire est faisable directement d'Excel, alors il "suffit" d'utiliser l'enregistreur de macros
Sinon et bien ce n'est pas possible
Toujours est-il qu'une image ne suffit pas à tout expliquer
A+
Bonjour Bruno,
Je ne suis pas sûr de comprendre. Vous parlez d'enregistrer des macros pour des actions tels que "Enregistrer sous", "exécuter une macro", etc. ?
J'ai réussi à trouver des codes qui font des interactions entre fichiers. C'est de ça dont il est question. Parce que mon problème est que si j'utilise l'enregistreur de macro, il risque de garder des références fixes, comme par exemple le chemin de la feuille que je veux copier. Et si cette feuille n'est pas strictement à la même adresse la macro ne le trouvera pas.
Dans ce que je veux faire, il y a des variables. Et j'ai l'impression qu'on peut les paramétrer avec des boîtes de dialogue, pour sélectionner le fichier source et le fichier cible par exemple. C'est ce genre de choses que je recherche. Je ne sais pas si je suis très clair mais je peux repréciser mon idée.
Re,
Effectivement, vous n'avez pas compris, je pense
En utilisant l'enregistreur de macros sur votre fichier "maitre" celui contenant la macro
Vous pouvez faire toutes les interactions souhaitées, ce qui va vous créer du code
Ce code, il faudra juste le modifier pour pouvoir utiliser des variables
Car sans code initial, nous ne pourrons pas vous aider à grand chose
A+
Ok, j'ai tenté le coup. Pour des raisons pratiques j'ai fait deux macros dans deux classeurs (ou fichiers du coup) différents.
- J'ai un fichier qui s'appelle "Fichier source". C'est le fichier téléchargé depuis le drive. Je change son format pour qu'il puisse supporter les macros.
Ça donne ceci (Macro enregistré sur le fichier téléchargé donc) :
Sub OuvrirFichierTelecharge()
' Ouvrir le fichier téléchargé depuis le drive Macro
Workbooks.Open Filename:= _
"C:\VARIABLE_CHEMIN\Fichier source.xlsx"
End Sub
Sub FormatMacro()
' Changer le format du fichier en format ".XLSM"
ActiveWorkbook.SaveAs Filename:= _
"C:\VARIABLE_CHEMIN\Classeur1_test170222.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End SubPuis j'ai mon deuxième fichier (le bleu vert sur l'image) avec une macro. Elle doit copier une feuille de ce fichier pour la coller dans le nouveau classeur (Classeur1_test170222.xlsm).
Sub CopierCollerFeuilACopier()
' Copier coller une feuille d'un fichier donné sur le classeur créé précédemment
Sheets("Feuille A COPIER").Select
Sheets("Feuille A COPIER").Copy Before:=Workbooks("Classeur1_test170222.xlsm"). _
Sheets(1)
End SubDonc j'ai deux macro sur deux fichiers différents.
L'idée serait de grouper les macros sur le second fichier (bleu vert).
Pour ce qui est des pistes, j'imagine ceci :
- identifier les variables (nom des fichiers, adresse du fichier à ouvrir, adresse du fichier à enregistrer, et d'autres peut-être).
- utiliser des boîtes de dialogue pour charger les fichiers à ouvrir et indiquer où les enregistrer
- enchaîner avec un traitement (que je n'ai pas indiqué ici, qui existe, et que je rajouterai moi-même plus tard).
Qu'en pensez-vous ?
Re,
Bon et bien voilà, je pense qu'on commence à y voir plus clair
Ce que vous ne savez pas faire il me semble c'est d'utiliser des variables
Je ne vous conseillerais que trop d'aller voir https://www.excel-pratique.com/fr/vba/variables
Voici une possibilité de code (à tester)
Option Explicit
Sub IntégrerFeuille()
Dim sPath As String, sFicS As String
Dim WbkS As Workbook
' Définir le chemin et fichier source
sPath = "C:\VARIABLE_CHEMIN\"
sFicS = ChoixFichier(sPath, "Choisissez votre fichier à traiter", "Fichier Source, *.xlsx")
If sFicS = "" Then Exit Sub
' Ouvrir le fichier source en définissant la variable objet
Set WbkS = Workbooks.Open(Filename:=sPath & sFicS)
' Copier la feuille du fichier master
Sheets("Feuille A COPIER").Copy Before:=WbkS.Sheets(1)
' Traitement possible ICI
' Sauvegarder le classeur
WbkS.SaveAs Filename:=sPath & "Classeur1_test170222.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
Function ChoixFichier(DefaultPath As String, sTitre As String, Optional sFilter As String)
' Le filtre doit être du type : "Fichier à traiter (*.xlsx), *.xlsx"
Dim fd As FileDialog, TabFilter() As String
' Initialiser les variables
If Right(DefaultPath, 1) <> "\" Then DefaultPath = DefaultPath & "\"
' Initialiser l'intance du dialogue
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
' Si un filtre a été donné
If sFilter <> "" Then
TabFilter = Split(sFilter, ",")
.Filters.Add TabFilter(0), Trim(TabFilter(1))
End If
.Title = sTitre
.InitialFileName = DefaultPath & TabFilter(0)
If .Show = -1 Then
ChoixFichier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End FunctionA+
Bonjour,
Je vous remercie pour cet ajout. Je ne l'ai pas testé puisque je vais d'abord essayer de comprendre les opérations ligne à ligne. Ca risque de prendre un peu de temps puisque je vais également suivre avant cela votre conseil et voir les bases du VBA, notamment sur les variables.
Puis je reviendrai vers vous
Encore merci !