Appliquer code vba à tous les classeurs ouverts/d'un dossier

Résolu/Fermé
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013 - 12 juin 2013 à 10:39
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013 - 12 juin 2013 à 13:13
Bonjour à tous,

Je cherche à appliquer une macro à tous les classeurs d'un dossier ou à défaut à tous ceux qui sont ouverts.

Quelqu'un a voit-il comment faire?

Merci d'avance
A voir également:

4 réponses

rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
12 juin 2013 à 10:45
Bonjour,

Plusieurs solutions s'offrent à vous.

1) Pour chaque fichier excel, créer un module et copier la macro pour l'activer.
2) Aller dans un fichier Excel, enregister une macro bidon mais dans un "classeur de macros personnelles". Ensuite copier le contenu de votre macro dedans. Vous n'avez plu qu'à activer la macro de ce classeur lorsque vous avez sélectionner un autre classeur excel.
Cette solution crée une fichier Personal.xlsb qui s'ouvre à chaque fois quand excel se charge et cela est légèrement gavant a la longue, cependant vous pouvez le supprimer.
3) Créer une macro qui va ouvrir tous les classeurs excel d'un certain dossier (chemin) et appliquer une macro à la suite puis les fermer.
- si vous voulez la 3eme solution j'ai déjà certaines macros faites maison que je peux poster ici.

Amicalement,
rEVOLV3r
1
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 10:59
Merci rEVOLV3r pour votre rapidité,

Pour S2, qu'entendez-vous par enregistrer une macro dans un "classeur de macros personnelles"?

Pour S3, je veux bien. Je pensais initalement ajouter un code pour qu'il s'applique à tous les classeurs ouverts mais cette solution est plus élégante.


En vous remerciant
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
12 juin 2013 à 11:01
Lorsque vous enregistrez une macro vous pouvez l'enregister dans un classeur, dans ce classeur ou dans un classeur de macro personnelles, voila ;-)

Je vous la macro de S3 tout de suite, par contre quel genre de macro voulez vous activer sur vos classeur ? il faut qu'elle soit codée en "relatif" afin de pouvoir s'activer sur tous vos classeurs.
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 11:05
En fait, je ne sais pas enregistrer une macro; habituellement, j'enregistre un classeur avec une macro mais jamais une macro seule.


Il s'agit simplement d'une macro effaçant tous les noms d'un classeur:

Sub suppression_nom()
Dim N As Name
For Each N In Names: N.Delete: Next
End Sub


Merci pour votre aide
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 11:07
Pardon, je sais comment enregistrer une macro. Par contre, je ne sais enregistrer un code VBA ce qui est le cas ici.
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 11:10
Pardon, en relisant vous répondez à mes questions concernant S2.
0
rEVOLV3r Messages postés 223 Date d'inscription jeudi 12 août 2010 Statut Membre Dernière intervention 21 septembre 2022 28
12 juin 2013 à 11:33
Essayez cela.

___

Sub ApplicationMacro()

Dim ClasseurSource As Workbook
Set ClasseurSource = ThisWorkbook

Dim N As Name


Dim chemin As String
chemin = "C:\Users\re...\Desktop\test"
chemintypedonnees = "C:\Users\...\Desktop\test\*.*"

ChDir chemin
RetVal = Application.Dialogs(xlDialogOpen).Show(chemin & "\*.*")
'ouverture de la boite de dialogue
'Ce bout de code sert à montrer à la macro le chemin du dossier des fichiers
If RetVal = True Then Exit Sub 'Pressez "annuler" si le chemin est CORRECT


' Turn off screen updating.
Application.ScreenUpdating = False

'Y a t'il des fichiers dans le répertoire ?

If Dir(chemintypedonnees) <> "" Then
ClasseurSource.Activate

'Gérer le répertoire de fichiers excel
fichier = Dir(chemintypedonnees)
Do While fichier <> ""
Set wbsource = Workbooks.Open(fichier) 'open the file
'activation de la première feuille du fichier excel. Cela peut etre modifié
Sheets(1).Activate

For Each N In Names: N.Delete: Next

wbsource.Close True 'close the current source file and save
fichier = Dir 'go to next file in the directory
Loop 'restart the process with next file

Else
Application.ScreenUpdating = True
MsgBox "Aucun fichier présent!!!"
Exit Sub
End If

Application.ScreenUpdating = True

End Sub

____

Par contre je n'ai pas très bien compris votre macro.
N est défini comme un nom. Names est le nom des onglets ? Car je n'ai pas vu de changement dnas mes fichiers test excel dans lesquels j'ai appliqué la macro.

Il vous faut mettre pour chemin : le chemin de votre dossier contenant vos fichiers excel
et pour chemintypedonnee : juste rajouter \*.* ou \*.xlsm ou \*.xls à choix. Il vaut mieux garder la première extension mais il ne faut pas qu'il y ait des fichiers excel qui ne doivent pas etre modifiés, ou encore des fichiers qui ne sont pas excel !

copier tous les fichiers excel dans un répertoire test avant de lancer la macro, par sécurité.
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 11:42
D'accord merci, j'essaie cela.

En fait, il s'agit d'une macro qui supprimer les noms que l'on trouve dans "Gestionnaire de noms" dans Formule.
Les supprimer permet de ne pas avoir de problèmes de liaisons lors de compilations de classeurs. (redondance de certains noms sinon)
0
Alem13 Messages postés 40 Date d'inscription jeudi 6 juin 2013 Statut Membre Dernière intervention 5 juillet 2013
12 juin 2013 à 13:13
Cela fonctionne bien.

Je vous remercie pour votre aide.
0