For each sheet in worksheets qui ne fonctionne pas

Bonjour,

Ca fait un moment que je parcours le forum à la recherche d'aide pour un problème de macro VBA mais je ne semble pas trouver la solution. J'espère que vous pourrez m'aider, merci d'avance pour votre aide.

A partir de mes toutes petites compétences en VBA Excel, j'ai décider de construire une macro pour pouvoir faire plusieurs choses :

1 - Copier en valeurs les feuilles sur elles-mêmes à l'aide d'un boucle For each

2 - ôter la protection de la feuille active s'il se trouve qu'elle l'est grâce à un mot de passe générique

Ma macro donne ça :

Sub Copie_en_valeurs()

Dim ws As Worksheet

For Each ws In Worksheets

    If ws.Protect = True Then

        ws.Unprotect ("mdp")

    End If

            Cells.Select
            Selection.Copy
            Cells.Select
            Selection.PasteSpecial (xlPasteValues)

Next ws

End Sub

Elle fonctionne ou du moins elle donne cette impression. Malheureusement elle ne fait la copie en valeur que sur la première feuille du classeur.

Est-ce qu'il y a une erreur dand le code ?

Je dois préciser que pour la partie Protect/Unprotect, Excel ne semble pas comprendre ws.Proctect/Unproctect

Merci de votre aide,

bonsoir,

mettre ws. devant cells.select

Bonjour,

Une suggestion...

Sub Copie_en_valeurs()
Dim Ws As Worksheet
For Each Ws In Worksheets
   If Ws.ProtectContents Then
      Ws.Unprotect ("mdp")
   End If
   Cells.Select
   Selection.Copy
   Range("a1").PasteSpecial (xlPasteValues)
   Range("A1").Select
   Application.CutCopyMode = False
Next Ws
End Sub

Gelinotte

Bonjour,

D'abord merci ppour vos réponses.

J'ai essayé de faire un mix des deux :

Sub Copie_en_valeurs()

Dim ws As Worksheet

For Each ws In Worksheets

    If ws.ProtectContents Then

        ws.Unprotect ("mdp")

    End If

            ws.Cells.Select
            Selection.Copy
            ws.Cells.Select
            Selection.PasteSpecial (xlPasteValues)

Next ws

End Sub

Malheureusement, il me dit "Erreur d'éxécution '1004' : La méthode sélect de la classe Range".

Est-ce que vous auriez d'autres idées ? Dans pas mal de forums où je suis allée, ils parlaient du fait que Select n'était pas forcément nécessaire en VBA, est-ce que c'est une piste ?

Merci

PS : J'ai essayé l'autre script proposé par gelinotte et j'ai toujours le même problème : la macro ne s'exécute que sur la première feuille

Bonjour,

j'ai trouvé une autre macro pour résoudre mon problème. Il est tiré de cette page :

https://excel-apps.blogspot.fr/2012/03/copier-coller-en-valeur-un-classeur.html

Sub CopColVal_Classeur()
 Dim Feuille As Worksheet, Mémo As Boolean, FeuilleRef As Worksheet

    Application.ScreenUpdating = False

     ' mémorisation de la feuille active
     Set FeuilleRef = ActiveSheet

    ' parcours des feuilles de travail
     For Each Feuille In ActiveWorkbook.Worksheets
         With Feuille

            ' cas d'une feuille masquée
            If .Visible = False Then

                .Visible = xlSheetVisible  ' affichage

            End If

            If .ProtectContents Then

                .Unprotect ("mdp")

            End If

            ' coeur de la macro
            .Select
            .Cells.Copy
            .Cells.PasteSpecial Paste:=xlPasteValues
            .Range("A1").Select

         End With
     Next Feuille

     ' réactivation de la feuille active initiale
     FeuilleRef.Activate

     Application.CutCopyMode = False
     Application.ScreenUpdating = True

End Sub

Merci de votre aide bonne journée

Bonjour,

L'erreur 1004 provient du fait que tu sélectionnes et prends une copie d'une plage pour la coller sur une autre plage = erreur 1004.

Pour coller, il faut sélectionner seulement la première cellule en haut à gauche du champ cible.

Gelinotte

Rechercher des sujets similaires à "each sheet worksheets qui fonctionne pas"