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

Résolu
Alem13 Messages postés 44 Statut Membre -  
Alem13 Messages postés 44 Statut Membre -
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

4 réponses

  1. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    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
    1. Alem13 Messages postés 44 Statut Membre
       
      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
    2. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
       
      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
    3. Alem13 Messages postés 44 Statut Membre
       
      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
    4. Alem13 Messages postés 44 Statut Membre
       
      Pardon, je sais comment enregistrer une macro. Par contre, je ne sais enregistrer un code VBA ce qui est le cas ici.
      0
    5. Alem13 Messages postés 44 Statut Membre
       
      Pardon, en relisant vous répondez à mes questions concernant S2.
      0
  2. rEVOLV3r Messages postés 223 Date d'inscription   Statut Membre Dernière intervention   28
     
    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
  3. Alem13 Messages postés 44 Statut Membre
     
    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
  4. Alem13 Messages postés 44 Statut Membre
     
    Cela fonctionne bien.

    Je vous remercie pour votre aide.
    0