Macro copie valeur enregistre classeurs ouver

mdbrot -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

je souhaite créer une macro qui fasse les opérations suivantes dans Excel:

copier en valeur toutes les cellules de toutes feuilles de tous les classeurs ouverts sauf le classeur actif
enregistrer tous les classeurs ouvert sauf le classeur actif
fermer tous les classeurs ouvert sauf le classeur actif

aujourd'hui j'ai rassemblé ce code:

CopyValueSaveAll()

For Each Wk In Workbooks
Wk.Activate
If Wk.Name <> ActiveWorkbook.Name Then
For Each cell In ActiveSheet.UsedRange
cell.Value = cell.Value
Next
Wk.Save
Wk.Close savechanges:=False
End If
Next
End Sub


qui marche a moitié car il ne copie en valeur que le première feuille de chaque classeur
et d'autre part est extremement long
donc on peut partir sur un code totalement autre.

si vous pouviez m'aider...

merci
A voir également:

3 réponses

pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Salut,
Oui tu ne boucles pas sur les feuilles, donc pas de risque que cela fonctionne pour toutes les feuilles de chaque classeur ouvert...
Essaye ceci :
Sub Boucle_classeurs_feuilles()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim nom As String
nom = ActiveWorkBook.Name
    For Each Wb In Application.Workbooks 'boucle sur tous les classeurs ouverts
        If Wb.Name <> nom Then 
              For Each Ws In Wb.Worksheets 'boucle sur toutes les feuilles du classeur
                Cells.Copy
                Range("A1").Select
                Selection.PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False 
              Next Ws
        Wb.Save 
        Wb.Close
        End If
    Next Wb
End Sub
0
mdbrot
 
merci bcp, je trouve ton code bien propre.
tout la procèdure de fermeture et d'enregistrement se passe bien,

cela dit la macro ne copie pas en valeur les feuilles des autres classeurs et par contre copie en valeur le classeur actif. l'inverse de ce que j'essaie de faire.

c'est peut etre moi qui m'y prends mal, j'ai testé cela tres sommairement sur 3 classeurs que j'ai ouvert et rempli de formules.

l'as tu testé de ton coté ?
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Salut,
N'ayant pas tout à fait saisi ce que tu voulais, je t'ai juste donné un exemple de boucle.
Voici un autre code à adapter à ta situation :
Sub Boucle_classeurs_feuilles()
Dim Wb As Workbook
Dim Ws As Worksheet
Dim nom As String
nom = ActiveWorkbook.Name
    For Each Wb In Application.Workbooks 'boucle sur tous les classeurs ouverts
        If Wb.Name <> nom Then
        Wb.Activate
              For Each Ws In Wb.Worksheets 'boucle sur toutes les feuilles du classeur
'copie le "usedrange" de toutes les feuilles des autres classeurs
                Ws.UsedRange.Copy
'colle dans la feuille1 du classeur "actif" à la suite dans la colonne A...
                With Workbooks(nom)
                .Sheets(1).Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
                End With
              Next Ws
        Wb.Save
        Wb.Close
        End If
    Next Wb
End Sub
0