Compatibilité Macro et Macro Répertoire
Bonjour à tous,
Je dispose d’une macro qui permet de copier des lignes sélectionnées de la première feuille dans toutes les autres feuilles existantes d’un même classeur. Or celle-ci ne fonctionne que si je copie le code dans le fichier à traiter alors qu’avec toutes les autres macros dont je dispose, celles-ci peuvent être appelées à partir d’un fichier à traiter.
De la même manière, si j’intègre cette macro dans un ensemble de macros à traiter via une macro générale, toutes les autres s’exécutent sauf elle !
Quelles sont donc les modifications à apporter ? :
Sub CopieLignesSélectionnées()
Dim wsh As Worksheet, derLig0&, xarea As Range
Dim Source As Range, laBas As Range, n&
Application.ScreenUpdating = False
With Worksheets("Base")
.Activate
Set Source = Intersect(Selection.EntireRow, .Range("a:h").EntireColumn)
End With
For Each wsh In ThisWorkbook.Worksheets
If wsh.Index > Worksheets("Base").Index Then
With wsh
On Error Resume Next: derLig0 = 0
derLig0 = Application.WorksheetFunction.Match(999, .Range("h:h"), 1)
On Error GoTo 0
For Each xarea In Source.Areas
n = .Cells(.Rows.Count, "a").End(xlUp).Row
If n = 1 And .Cells(1, "a") = "" Then n = n - 1
n = n + 1
xarea.Copy .Cells(n, "a")
.Columns(1).NumberFormat = "dd/mm/yyyy"
Next xarea
Application.Goto .Range("a1"), True
End With
End If
Next wsh
End Sub
Par ailleurs, je dispose d’une autre macro qui permet d’exécuter un code sur tous les fichiers d’un répertoire actif. Elle fonctionne parfaitement sauf qu’à la fin du traitement de chaque fichier elle me demande si je veux ou non enregistrer les modifications apportées.
Est-il possible de rectifier le code pour que les enregistrements des modifications se fassent de manière automatique à la fin de chaque traitement de fichier ?
Sub parcourirFichiers()
Dim chemin As String, Fichier As String
Dim wb As Workbook
Set wb = ThisWorkbook
chemin = wb.Path + "\"
Fichier = Dir(chemin & "*.xl*") ' 1er fichier
Do While (Len(Fichier) > 0)
If Fichier <> ThisWorkbook.Name Then
Workbooks.Open chemin & Fichier
' traitement
(NOM DE LA MACRO A EXECUTER)
ActiveWorkbook.Close
End If
Fichier = Dir() ' fichier suivant
Loop
End Sub
Merci par avance de vos réponses.
Bonjour,
Pour mette la macro dans tous les classeur il faut l'enregistrer dans le module mais de la partie VBAProject (PERSONAL.XLSB) en haut à gauche de VBA.
Pour la sauvegarde auto :
Sub parcourirFichiers()
Dim chemin As String, Fichier As String
Dim wb As Workbook
Set wb = ThisWorkbook
chemin = wb.Path + "\"
Fichier = Dir(chemin & "*.xl*") ' 1er fichier
Do While (Len(Fichier) > 0)
If Fichier <> ThisWorkbook.Name Then
Workbooks.Open chemin & Fichier
' traitement
(NOM DE LA MACRO A EXECUTER)
ActiveWorkbook.Close savechanges = true
End If
Fichier = Dir() ' fichier suivant
Loop
End Sub
Merci pour ta réponse Valc,
mais je ne vois pas de quelle manip il s'agit.
Mon objectif ici n'est pas de faire en sorte de copier la macro dans tous les classeurs du répertoire mais, dans un premier temps, de la modifier de telle sorte que lorsqu'elle est déjà copiée dans un seul classeur ouvert je puisse la lancer d'un autre classeur à traiter et cela n'est pas possible.
Pour faire court, cette macro a pour objectif de copier les lignes sélectionnées dans la première feuille d'un classeur (nommée "Base") dans toutes les autres feuilles (quelque soit leur nom) et ce à la suite de la première ligne rencontrée en partant du bas de toutes ces autres feuilles.
Lorsque j'ouvre le classeur contenant la macro, je dois pouvoir lancer cette macro à partir de n'importe quel autre classeur à traiter, comme il est possible de le faire avec n'importe quelle autre macro.
Elle me renvoie alors le message suivant :
Erreur d'exécution '9' :
L'indice n'appartient pas à la sélection
Et il me surligne en jaune la ligne de commande :
If wsh.Index > Worksheets("Base").Index Then
Or, si je copie cette même macro dans le même emplacement du classeur à traiter, tout marche !!!
Autrement dit, après avoir ouvert le classeur contenant ladite macro, je souhaiterais qu'elle s'applique sans bug en l'appelant de n'importe quel autre classeur à traiter sans avoir besoin de la copier.
C'est ce hic que je n'arrive pas à corriger.
Cordialement.