VBA-Résolu: Copie datas d'1Wks "a" vers Open.Wbks (but -> Fermer les Wbks où Wks "a" n'existe pas)

zebanx

XLDnaute Accro
Bonsoir,

Le fichier ci-joint est un Workbook "master" qui contient une WKS "annee" dont je souhaiterais copier les données (car les plus actualisées) vers la même WKS "annee" dans d'autres workbooks qui seraient déjà OUVERTS - et qui sont des Workbook standardisés normalement contenant cette WKS.

--> La macro "BOUCLE" fonctionne bien tant que les fichiers OUVERTS contiennent la WKS "annee"

Mais il est possible, dans la liste de tous les fichiers ouverts, qu'un des fichiers ouverts ne contiennent pas cette WKS "annee" et cela neutralise la macro "BOUCLE".

Je cherche donc à "PASSER" (ou à les fermer avant que la boucle ne s'exécute) tous les fichiers XLS ouverts qui ne contiennent pas le WKS "annee"

>>> Pour des raisons de formules dans d'autres onglets des autres WBKS, les données doivent être copiées mais on ne peut pas faire supprimer chaque WKS "annee" par la plus actualisée venant du fichier master.

J'ai tenté de modifier sur deux codes "BOUCLE 2" et "BOUCLE 3" mais aucune ne fonctionne.

Je vous remercie par avance pour votre aide, cdlt
thierry
 

Pièces jointes

  • wbk test.zip
    67.6 KB · Affichages: 17

pierrejean

XLDnaute Barbatruc
Bonjour zebanx

A tester:
Code:
Sub Boucle()
Dim CT As Workbook 'déclare la variable CT (Classeur de Travail)
Dim OT As Worksheet 'déclare la variable OT (Onglet de Travail)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim C As Workbook 'déclare la variable C (Classeurs)
Dim O As Worksheet 'déclare la variable O (Onglets)

Set CT = Workbooks("wbk test.xls") 'définit le classeur de travail CT
Set OT = CT.Sheets("annee") 'définit l'onglet de travail OT
'On Error GoTo Fin
Application.ScreenUpdating = False
Workbooks("start.xls").Close SaveChanges:=False
For Each C In Application.Workbooks 'boucle 1 : sur tous les classeurs ouverts
  If Not C.Name = CT.Name Then 'condition : si le classeur n'est pas CT
  On Error Resume Next
     OT.Cells.Copy Destination:=C.Sheets("annee").Range("A1")
  On Error GoTo 0
'  CT.Activate
'  Sheets("annee").Select
'  Cells.Select
'  Selection.Copy
'  C.Activate
'  Sheets("annee").Select
'  Cells.Select
'  ActiveSheet.Paste
'  Range("B1").Select
'  ActiveWorkbook.Save
  C.Save
  C.Close
  End If 'fin de la condition 1
Next C 'prochain classeur de la boucle 1
'Fin:
Sheets("annee").Select
Range("B1").Select
End Sub
 

zebanx

XLDnaute Accro
Bonjour Pierre-Jean

Cela fonctionne très bien, donc merci beaucoup.

C'est nettoyé et nettement plus simplifié.

Ne connaissant pas bien ces instructions, pourriez-vous SVP m'apporter deux précisions concernant le fonctionnement des deux lignes "On Error Resume Next" et "On Error GoTo 0" à ces endroits précis ?
.....
If Not C.Name = CT.Name Then 'condition : si le classeur n'est pas CT
On Error Resume Next
OT.Cells.Copy Destination:=C.Sheets("annee").Range("A1")
On Error GoTo 0
....

Merci pour votre réponse et bonne journée !
thierry
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re
on error resume next permet de passer a la ligne suivant en cas d'erreur (ici la non existence de la feuille année
Ce passage a la ligne suivante est conservé jusqu’à On error Goto 0
Ici juste après la ligne susceptible de provoquer une erreur
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou