Copier coller valeurs pour plusieurs feuilles

Résolu
Bonjour,

J'ai trouvé un code qui permet sur le classeur de copier/coller en valeurs toutes les feuilles du classeur.

Sur un fichier il fonctionner parfaitement mais sur un autre me dit que "la sélection de l'objet Worksheet a échoué".
Pouvez-vous éclairer ma lanterne ?

Merci

CODE :
Dim Feuille As Worksheet, mémo As Boolean, feuilleRef As Worksheet

Application.ScreenUpdating = False

Set feuilleRef = ActiveSheet

For Each Feuille In Worksheets
Feuille.Select
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("A1").Select

Next Feuille
feuilleRef.Activate

Application.CutCopyMode = False
Application.ScreenUpdating = True

7 réponses

  1. Bonjour Emy, bonjour le forum,

    Ton code est incomplet. D'abord il te faut retirer l'onglet destination de la boucle. Ensuite, si tu colles toujours en A1, tu effaces les données de la feuille précédente et par conséquent, au final, tu n'auras que le dernier onglet copié... Essaie comme ça :

    Sub Macro1()
    Dim OD As Worksheet
    Dim O As Worksheet
    Dim DEST As Range
    
    Application.ScreenUpdating = False
    Set OD = Worksheets("Feuil1") 'ou Set OD=ActiveSheet (à adapter à ton cas)
    For Each O In Worksheets
        If Not O.Name = OD.Name Then
            Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
            O.UsedRange.Copy DEST
        End If
    Next O
    OD.Select
    Application.ScreenUpdating = True
    End Sub

    0
    1. Bonjour,

      J'ai testé ton code, mais ça laisse les formules (pas de copier/coller valeurs à ce que je vois)
      0
      1. Re,

        Oui désolé. La modif :

        Sub Macro1()
        Dim OD As Worksheet
        Dim O As Worksheet
        Dim DEST As Range
        
        Application.ScreenUpdating = False
        Set OD = Worksheets("Feuil1") 'ou Set OD=ActiveSheet (à adapter à ton cas)
        For Each O In Worksheets
            If Not O.Name = OD.Name Then
                Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0))
                O.UsedRange.Copy
                DEST.PasteSpecial (xlPasteValues)
            End If
        Next O
        OD.Select
        Application.ScreenUpdating = True
        End Sub

        0
        1. Bonjour et merci pour tes réponses, mais cela ne fonctionne toujours pas.
          Pour essayer d'expliquer, je veux créer une copie d'un classeur en écrasant les formules.
          J'ai l'ai fait sur d'autres avec une partie du code mis dans le sujet, les actions sont :
          Open (Le classeur a copier)
          Save as (Copie)
          CODE ci-dessus
          Save
          Close

          Désolé mais étant novice en VBA des fois je me perds !
          0
          1. Bonjour Emy, bonjour le forum,

            "Ne fonctionne pas" ne signifie rien !... mais comme tu sembles peu enclin à donner des explications je ne vais pas me prendre la tête pour toi...
            0
            1. Comme je l'ai indiqué je suis novice, ce qui te semble être de la "mauvaise volonté" et en réalité un manque de connaissance.

              Merci quand-même pour ton temps.
              0
              1. Pour ceux qui auraient la même recherche :
                http://excel-apps.blogspot.fr/2012/03/copier-coller-en-valeur-un-classeur.html?m=1
                0