Boucle copier coller sans activer les feuilles

joel31

XLDnaute Junior
Bonjour le forum,

Je cherche depuis hier le moyen de copier/coller des plages de plusieurs feuilles, vers une feuille de données, sans activer ces différentes feuilles.
Mon code actuel, qui fonctionne très bien, est le suivant :
Code:
Sub PA()
Dim ws As Worksheet, i As String
Application.ScreenUpdating = False
i = ActiveSheet.Name
For Each ws In worksheets
If ws.Name <> "Plan d'action" And ws.Name <> "Calendrier" Then
worksheets(ws.Name).Activate
Range("a1:j" & Range("B1000").End(xlUp).Row).Copy _
Destination:=Sheets("Plan d'action").Range("B65536").End(xlUp)(1).Offset(1, -1)
End If
Next ws:
Application.ScreenUpdating = True
End Sub
Problème pour moi, c'est que je suis obligé d'activer ces feuilles et que je souhaite lancer une macro quand j'arrive sur ma feuille de données (Plan d'action), avec Activate.
Or, ma macro tourne en boucle, ce qui me semble logique puisque je fais des aller/retour sur ma feuille plan d'action.
Donc, peut on copier coller des plages variables avec une boucle sans activer les feuilles correspondantes ?
Que faudrait-il changer dans mon code ?

Je vous remercie pour vos réponses.
Bien cordialement
 

sousou

XLDnaute Barbatruc
Re : Boucle copier coller sans activer les feuilles

Bonjour
Il n'est jamais nécessaire d'activer une feuille pour y faire quelque-chose.
Ci-dessous j'utilise With end With avec l'objet feuille (ws)
Attention c'est le point devant range qui représente l'objet

Sub PA()
Dim ws As Worksheet, i As String
Application.ScreenUpdating = False
i = ActiveSheet.Name
For Each ws In worksheets
If ws.Name <> "Plan d'action" And ws.Name <> "Calendrier" Then
with ws
.Range("a1:j" & Range("B1000").End(xlUp).Row).Copy _
Destination:=Sheets("Plan d'action").Range("B65536").End(xlUp)(1).Offset(1, -1)
End If
end with
Next ws:
Application.ScreenUpdating = True
End Sub
 

joel31

XLDnaute Junior
Re : Boucle copier coller sans activer les feuilles

Bonjour Sousou, le forum,

Je te remercie pour cette réponse qui fonctionne parfaitement, en intervertissant toutefois le End With et le End If.
Je bloquais sur un point, et c'est le cas de le dire ! car je ne mettais pas de point devant Range dans mes essais.
C'est donc parfait.

Dernier petit point, je ne peux pas lancer cette macro à partir de ma feuille de destination 'Plan d'action', j'ai testé avec un Desactivate sur les autres feuilles, quand je quitte, mais ça ne fonctionne pas non plus.

Comment faire donc pour lancer cette macro de façon automatique, sans pour autant se servir de Private Sub Worksheet_Change(ByVal Target As Range) car je dois renseigner pas mal de données avant de sortir de chaque onglet ?

Merci encore pour ton aide

Bien cordialement
 

joel31

XLDnaute Junior
Re : Boucle copier coller sans activer les feuilles

En fait je voudrais que cette macro se lance quand je quitte un onglet après l'avoir renseigné.
Je pourrais effectivement mettre un bouton, sur chaque onglet, mais je voudrais que cette macro soit lancée automatiquement afin de mettre à jour systématiquement l'onglet 'plan d'action' tout en étant transparent pour un utilisateur, l'évènement importe peu.
Si on ne pense pas à cliquer sur le bouton, le 'Plan d'Action' n'est pas à jour.

Bien cordialement
 

joel31

XLDnaute Junior
Re : Boucle copier coller sans activer les feuilles

Bonjour Sousou, le Forum,

J'ai trouvé pourquoi ma macro ne se lançait pas quand j'allais sur mon onglet 'Plan d'action' :
J'ai placé ma macro PA dans l'évènement activate de cette feuille
J'ai mis un Application.EnableEvents = False / Application.EnableEvents = True dans ma macro PA et hop, c'est nickel

Merci Sousou pour ton aide.

Bien cordialement
 

Statistiques des forums

Discussions
311 709
Messages
2 081 779
Membres
101 816
dernier inscrit
Jfrcs