Amelioré une boucle FOR de recopie de feuille/Range

Bonjour,

j'utilise cette boucle pour aller chercher une plage de valeurs de chaque (onglet ( mois de l'année)), et les recentraliser sur une page :

For onglet = 2 To 13

Sheets(onglet).Range("B4:AF4").Copy Feuil13.Range("B" & onglet + 2)

Next onglet

Avec ce systeme, la MFC se recopie à chaque fois, et le fichier ralenti à la longue.

Comme solution, j'ai ajouté :

Cells.FormatConditions.Delete

dans la partie Private Sub Worksheet_Deactivate()

C'était très concluent jusqu'au moment ou je met ce fichier en mode partager.

J'ai chaque fois une erreur 1004 .

j'aimerais modifié cette programmation :

For onglet = 2 To 13

Sheets(onglet).Range("B4:AF4").Copy Feuil13.Range("B" & onglet + 2)

Next onglet

pour ne faire que la copie des valeurs (et format : pas sur)

j'ai utilisé un " with " que j'avais obtenu sur ce forum en discutant sur un autre sujet, qui ne recopiait que la valeur et le format, mais avec la boucle "for", cela ne fonctionne pas.

Sheets(onglet).Range("B4:AF4").Copy

With Sheets("Feuil13").Range("B" & onglet + 2)

Selection.PasteSpecial Paste:=xlPasteValues

Selection.PasteSpecial Paste:=xlPasteFormats

'Cells.FormatConditions.Delete --> en commentaire car ne fonctionne pas en mode partage

End With

Un coup de main svp

Un coup de main me ferais du bien

Bonjour Mat

la solution c'est PasteSpecial

cf code

Sub Recap()
Dim onglet As Integer
Dim ongletMax As Integer

    ongletMax = 12
    For onglet = 1 To ongletMax
        Sheets(onglet).Range("B4:AF4").Copy
        Feuil13.Range("B" & onglet + 2).PasteSpecial Paste:=xlPasteValues
    Next
    Feuil13.Cells(1, 1).Select
End Sub

voir la démo jointe

Bonjour Andrea73,

Dans mon cas, je n'ai pas placer de bouton sur ma page, j'ai mis ce code dans Private Sub Worksheet_Activate()

C'est ce que j'ai fais avec ton code et cela fonctionne bien sur ton fichier, même en mode partager.

Par contre sur mon fichier, c'est fonctionnel sauf quand je passe en mode partager : erreur 1004.

Conflit avec autre chose peut etre ? je vais verifier

Je vois que les cellules qui ont été copié de l'onglet précédent sont toujours selectionné malgré la copie, est il possible de desactiver cette selection par prudence ?

Si j'ai par exemple, 5 onglets recap ( recap1,recap2...), est ce que je peux simplement copié ce même code dans Private Sub Worksheet_Activate() de chaque feuille ou va t il y avoir conflit avec la variable onglet ?

Merci à toi

(re)

Et avec cette 2ème version ? dans l'onglet RECAP02

J'ai vu mon anomalie,

j'avais laissé : Cells.FormatConditions.Delete dans Private Sub Worksheet_Deactivate()

et cette fonction deconne en mode partager.

Ce qui veut dire que ton code fonctionne bien dans tout les cas.

2eme point que je dois resoudre, c'est le format.

Si je copie avec Paste:=xlPasteFormats, la MFC est copiée aussi et à la longue, les MFC s'accumule et alourdisse le fichier.

D'ou la ligne Cells.FormatConditions.Delete après copie, mais ne fonctionne pas en mode partager.

Une astuce ?

je pense à refaire une MFC en vba dans la page même si pas d'autre solution


Voila que je vois ta version 2,

Concretement qui a t il de different pour le code, car j'ai bien compris que le resultat sera le même.

Un avantage ?

Je constate que la selection de l'onglet precedent n'est plus selectionne apres copie.

(re)

A mon avis la 2çme solution (qui ne colle pas les formats donc pas non plus les MFC) te permet refaire une "nouvelle" série de MFC sur la feuille de récap particulièrement à cette feuille

Oui, mais la premiere solution ne recopiait que value, donc pas de MFC copiées non plus.

En tout cas cela fonctionne bien pour moi.

Encore merci.

Je reviendrai avec d'autre question surement, pour faire les MFC en vba ( couleur, caractere, cellule..)

Je reviens à la charge,

le code fonctionne avec une macro, mais cree probleme dans Private Sub Worksheet_Activate()

Dim onglet As Integer

Dim ongletMax As Integer

Dim tabMois()

Application.ScreenUpdating = False ' pour aller plus vite

ongletMax = 12

For onglet = 1 To ongletMax

Sheets(onglet).Select ++++++++ Cette ligne bloque, se met en jaune par le deboggeur

tabMois = Range("B4:AF4")

Feuil14.Select

Range(Cells(2 + onglet, 2), Cells(2 + onglet, 2 + UBound(tabMois, 2))) = tabMois

Next

Application.ScreenUpdating = True

Feuil14.Cells(1, 1).Select

Ok

si la 1ère version fonctionne utilise celle-là

Rechercher des sujets similaires à "ameliore boucle recopie feuille range"