Application d'une MACRO à un ensemble de classeurs

Bonjour,

J'ai créé une macro pour un classeur et j'aimerais l'appliquer à l'ensemble des classeurs contenus dans un dossier.

Est-ce possible?

Merci.

Bonjour,

Hum... ça se discute !

On peut voir la bête ?

A+

Voici le code de la macro. Elle travail sur des classeurs avec quatre feuilles. Certains indices (le 16 par exemple) est fixé par la forme standardisée de tous les classeurs.

15macro.txt (1.05 Ko)

Je suis un peu dubitatif : Ta macro est très vague.

D'ou tu sors les Daten()

Les valeurs de daten() sont issues du classeur "Source" (une feuille indéterminée)

Ton code s'applique pour le moment à la feuille 4 du classeur actif "Source".

Dans le classeur cible ou ta macro va-t-elle aller pécher les valeur de daten()

Ce sera toujours les valeurs issues de ClasseurSource : (Daten(8) ne variera plus pour les 300 classeurs que tu veux traiter) ? Ou avec d'autres valeurs issues de la même feuille indéterminée de ClasseurCible ?

Comment "reconnait-on" les classeurs "Cible" :

Ils sont tous dans un même répertoire. (Le même répertoire que ClasseurSource ? ou un autre ?)

Il faut traiter TOUS les fichiers de ce répertoire, il n'y a pas d'autre fichiers parasites dans le répertoire ?

Je suis quand même un peu étonné du genre de truc. A moins d'avoir très peu de classeurs à mettre à jour, avec deux boucles For imbriquées, tu comptes parcourir (et modifier éventuellement) quelques 30 000 cellules dans chaque classeur.

Ben... Tu auras surement le temps de boire quelques cafés avec ce genre de macro !

A minima un petit coup de Application.ScreenUpdating = False ...sera pas superflu !

Enfin... ça doit être possible mais je ne garantis rien. Il vaudra mieux avoir une copie de sécurité avant bricolage !

Fournir une macro enregistrée ou tu ouvres un des fichiers à mettre à jour. (pour avoir le nom et chemin des fichiers à traiter)

S'il y a une partie commune dans le nom des fichiers, le signaler.

A+

Les Daten() sont effectivement issus d'une feuille source et ensuite je souhaite modifier la feuille 4 de tout mes classeurs.

Pour les éventuels 30 000 changements en fait y'en a beaucoup moins (max 100) par feuille.

Pour les classeurs, ils sont tous dans le même dossier et il n'y a pas de classeur parasite.

Merci pour tes conseils, je débute clairement en programmation Excel, et comme je travaille sur un Excel en allemand, je galère un peu sur les fonctions Excel. Il y a peut-être plus simple en utilisant directement des fonctions Excel.

Re...

Quel que soit le nombre de changements, les boucles vont néanmoins parcourir quelques 98 x 294 = 28 812 cellules et examiner si elles contiennent la condition If...

En soit ce n'est pas forcément grave mais si on doit le multiplier par le nombre de classeur ouvert, ça risque vite de prendre un moment surtout si tu dois modfier un grand nombre de classeurs... Enregistrer...

M'enfin... c'est pas grave : ça fatiguera quand même pas le proc qui en a surement vu d'autre et tu auras le temps d'aller en griller une...

Bon pour le chemin des fichiers, tu modifiera si nécessaire.

Je vais réfléchir à ça.

A+

-- Mar Juil 26, 2011 6:57 pm --

Bon Tu peux essayer ça :

Sub daten_veraenderung()
'On remplit un tableau avec les nouvelles dates du mois
Dim daten(8) As Integer, Fahrtage As String, num_tage As Integer, Wb As Workbook
For i = 0 To 8
  daten(i) = Cells(16 + i, 3)
Next
'Permet de choisir le répertoire de travail
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
Z = .SelectedItems(1)
MsgBox Z
End With
'travail sur le contenu du dossier en cours
Z = Dir(Z & "\*.*")
Do While Z <> ""
  If Not Z = ThisWorkbook.Name Then
  Set Wb = Workbooks.Open(Z)
    With Wb.Sheets(4)
    'Ensuite on parcours la ligne du tableau en remplaçant les anciennes dates par les nouvelles
      For i = 3 To 100
      Fahrtage = .Cells(5, i)
          Select Case Fahrtage
            'Recherche du type de fréquence
            Case Is = "tgl": num_tage = daten(0)
            Case Is = "Mo-Fr": num_tage = daten(1)
            Case Is = "Mo-Sa": num_tage = daten(2)
            Case Is = "Sa": num_tage = daten(3)
            Case Is = "S": num_tage = daten(4)
            Case Is = "Sa+S": num_tage = daten(5)
            Case Is = "Mo-Do": num_tage = daten(6)
            Case Is = "Fr+Sa": num_tage = daten(7)
            Case Is = "Fr": num_tage = daten(8)
            Case Else
            Exit Sub
          End Select
        'On remplace les anciennes données par les nouvelles
        For j = 7 To 300
          If .Cells(j, 2) = "Fahrten /VTR" Or .Cells(j, 2) = "Fahrten /Betrachtungszeitraum" Then
          .Cells(j, i) = num_tage
        End If
        Next
      Next
      Wb.Close True
    End With
  End If
  Z = Dir
Loop
End Sub

Evidemment je ne peux pas tester. Je te rappelle donc la nécessité de sauvegarder tes fichiers... à un autre endroit.

Très important : comme tu ne m'as pas donné le chemin des fichiers, il n'est pas possible d'être certain que la macro travaille dans le bon répertoire.

J'ai donc inséré une ligne qui te permet de choisir le répertoire de travail.

En dernier ressort un MsgBox te confirme le répertoire dans lequel la macro va travailler. A ce stade tu peux encore interrompre le traitement en faisant Ctrl + Pause pendant que le MsgBox est affiché. Sinon, si tu valides ce répertoire de travail par Ok tous les fichiers contenus seront modifiés. (Sauf le ClasseurSource qui est ignoré)

A+

Ok merci beaucoup. Ça fonctionne. Mais tu avais raison ça prend pas mal de temps comme j'avais 70 classeurs à modifier.

Rechercher des sujets similaires à "application macro ensemble classeurs"