Appliquer une macro à plusieurs fichiers avec des noms différents
Bonjour à tous et toutes !
Je m'excuse si cela a déjà été demandé auparavant mais même après quelques recherches, je n'ai pas trouvé exactement la réponse à ma question. Je souhaite pouvoir appliquer une macro à des fichiers différents.
Par exemple, le nom du premier fichier sera "Diagnostic Boîte A" puis le deuxième "Diagnostic Boîte B", puis Boîte C etc. Il me faudrait un code au format "Diagnostic Boîte *" dans ma macro, sachant que les fichiers auront toujours cette structure. Je sais que cela se fait en définissant * via la formulation Dim as mais je bloque complètement et je me remets tout juste dans VBA...
Auriez vous la solution à mon problème ?
Par avance, un grand merci pour vos réponses et bon dimanche.
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
Je suis loin d'être un expert. Mais il me semble bien que pour ce que tu veux faire, il faut enregistrer ta macro au format xlam. Ainsi, chaque fichier pourra y avoir accès via un bouton dans ta zone d'accès rapide par exemple.
Hello JoyeuxNoel ! Merci beaucoup pour ta réponse.
Petite précision importante, ma macro copie/colle des infos d'un fichier à un autre. Donc dans mon code je fais apparaître ces lignes :
Windows("Réponses.xlsx").Activate
Range("E2:E23").Select
Selection.Copy
Windows("Diagnostic Boîte A.xlsx").Activate
Sheets("Clients").Select
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=FalsePour la ligne suivante, il faut que je puisse faire apparaître un nom de type "Diagnostic Boîte *" pour faire en sorte que la macro copie/colle les infos à partir du fichier ouvert, peu importe son nom :
Windows("Diagnostic Boîte A.xlsx").ActivateJ'espère que c'est plus clair. Merci encore à toi.
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Re,
Tant que tu n'en dis pas plus sur le projet global je ne vois pas top quoi te dire de plus.
Je reste persuadé qu'au lieu d'aller essayer de trouver un moyen de deviner sur quel fichier tu es, une macro accessible sur chaque fichier pourrait être une solution.
Ton fichier de destination serait celui duquel est lancé le code, et il irait chercher les données dans ton fichier source. D'ailleurs, tous les .select son inutiles.
Bref, n'hésite pas à donner un peu plus de ton code.
A nouveau, merci pour tes indications super claires. Ok pour lancer ma macro en xlam sur tous les fichiers.
Mon code VBA c'est juste ce que j'ai donné précédemment, répété sur plusieurs onglets excel donc t'en donner plus ne serait pas utile (même si j'aimerais...)
'Ouvrir le fichier Réponses, copier la colonne
Windows("Réponses.xlsx").Activate
Range("E2:E23").Select
Selection.Copy
'Ouvrir le fichier Diagnostic, coller dans l'onglet Clients
ThisWorkbook.Activate
Sheets("Clients").Select
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sauf que la fonction ThisWorkbook.Activate m'active le fichier source (intitulé "Réponses") et non pas le fichier de destination (intitulé "Diagnostic Boîte A"). Comme expliqué précédemment, chaque fichier sera intitulé différemment, donc je ne peux pas écrire Windows("Diagnostic Boîte Tartampion").Activate
Je recherche une formulation de type Windows("Diagnostic Boîte *").Activate, l'étoile signifiant qu'on se fiche du nom de la boîte.
En gros : comment matérialiser le nom de mon fichier de destination sur le code VBA ?
J'espère que j'explique pas trop mal...
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
C'est sans doute moi qui me suis mal exprimé. Je voulais savoir le reste du code pour voir si tu avais plusieurs fichiers diagnostique ouverts, ou si tu allais en ouvrir plusieurs au fil de la macro.
Un exemple ci-dessous si jamais tu as un seul fichier diagnostique ouvert. (Le code est à mettre dans un module du fichier réponses, et donc à enregistrer en .xlsm
Sub copie()
Dim WBS As Workbook 'déclare la variable WBS (Classeur Source)
Dim WSS As Worksheet 'déclare la variable WSS (Onglet Source)
Dim WBC As Workbook 'déclare la variable WBC (Classeurs)
Dim WSC As Worksheet 'déclare la variable WSC (Onglets)
Set WBS = Workbooks("Réponses.xlsm") 'définit le classeur source "Réponses"
Set WSS = WBS.Sheets("Feuil3") 'définit l'onglet de travail
For Each WBC In Application.Workbooks 'boucle : sur tous les classeurs ouverts
If WBC.Name Like "Diagnostic Boîte" & "*" Then 'condition : si le nom du classeur contient "diagnostique boite"
Set WSC = WBC.Sheets("Clients") 'définit l'onglet cible
WSS.[E2:E23].Copy Destination:=WSC.[C3:C24] 'copie les données où tu le souhaitais
End If 'fin de la condition
Next 'prochain classeur de la boucle
End SubSi jamais tu veux faire ça sur plusieurs onglets, il y a moyen de rajouter une boucle sur plusieurs onglets.
De même, si tu veux le faire pour plusieurs fichiers diagnostique, il y a moyen de demander à Excel d'aller ouvrir ces fichiers dont tu as besoin.
(inspiré d'un vieux code posté par Thauthème en 2016)