Copie de feuilles dans une autre lors de la désactivation

Bonjour, je cherche à copier les plages des feuil1 et feuil2 dans feuil3 quand je sort de la feuil1 et quand je sors de la feuil2

J'ai tenté cette macro en me basant sur une que Banzai64 m'avait corrigé

Dans un module :

Sub Cumul_feuilles()
  With Sheets("Feuil3")
    Sheets("Feuil1").Range("A4:AH50").Copy
    .Range("A29").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                             SkipBlanks:=False, Transpose:=False
    Sheets("Feuil2").Range("A4:AH50").Copy
    .Range("A80").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                             SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
  End With
End Sub

Dans Feuil1 et Feuil2 j'ai mis

Private Sub Worksheet_Deactivate()
    Cumul_feuilles
End Sub

Je suppose que je dois mettre "Application.ScreenUpdating = False" quelque part mais déjà que ça ne fonctionne pas

Enfin, a copie se fait bien mais excel plante, comme si la copie tournait en boucle.

Si quelqu'un pouvait m'expliquer...

Avec le fichier d'exemple que j'avais zappé ...

23fred-35-copy1.zip (3.93 Ko)

Petite précision, la feuille Compile est masquée dans le fichier original

Bonjour

Dur à expliquer mais c'est la copie PasteSpecial qui provoque cette boucle sans fin

Dans le cas ou de Feuil1 tu vas vers Feuil2 (ou de Feuil2 tu vas vers Feuil1) la copie provoque un changement de page (flash) mais l'évènement Deactivate est appelé qui lui demande la recopie, laquelle copie mais avec PasteSpecial (activation de la destination ) provoque l'événement Deactivate qui lui...... etc

Grosso modo (je sais mal expliquer)

Mais pour bien le voir fais du pas-à-pas

Solution

Dans le module standard

Public Encours As Boolean

Sub Cumul_feuilles()
  Application.ScreenUpdating = False
  With Sheets("Compile")
    .Range("A29:AH" & Rows.Count).ClearContents
    Sheets("Feuil1").Range("A5:AH" & Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row).Copy
    .Range("A29").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                             SkipBlanks:=False, Transpose:=False
    Sheets("Feuil2").Range("A5:AH" & Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row).Copy
    .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                             SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
  End With
End Sub

Et dans chaque module de feuille (Feuil1 et Feuil2)

Private Sub Worksheet_Deactivate()
  If Encours = True Then Exit Sub
  Encours = True
  Cumul_feuilles
  Encours = False
End Sub

Merci Banzai64,

J'aurais jamais trouvé tout seul et pourtant j'en ai passé des heures de lecture, de parcours des forums et de tests...

Une fois de plus tu m'ôtes une belle épine du pied

Je viens de m'apercevoir que quand on utilise le filtre automatique et qu'on quitte la feuille, seul la partie filtrée est copiée.

Comment faire, en laissant le filtre (pour ne pas gêner l'utilisateur), pour effectuer la copie.

Si je rajoute dans la macro encours le filtre est bien désactivé mais si on doit retravaillé dessus il faut le remettre à nouveau filtré.

Sheets("Feuil1").ShowAllData
Sheets("Feuil1").ShowAllData

Bonsoir

En quittant la feuille il faut enlever le filtre

Mais pour remettre le filtre c'est une autre paire de manche

Il faut récupérer l'état des filtres, tout afficher, copier et filtrer de nouveau

A mon avis trop contraignant

ShowAllData n'enlève pas les filtres( les flèches des filtres sont toujours présentes) affiche juste toutes les lignes

Il faudra filtrer de nouveau au retour

C'est moi qui me suis mal exprimé, on laisse les filtres, mais c'est le filtrage en cours que j'aurais voulu garder.

Si c'est trop contraignant je vais rester avec

Sheets("Feuil1").ShowAllData

Bonsoir

Si on veut copier toutes les lignes on est obligé d'enlever le filtrage

Pas d'autre solution

Rechercher des sujets similaires à "copie feuilles lors desactivation"