XL 2010 exporter onglet dans classeur fermé

mix770

XLDnaute Impliqué
re bonjour,

je recommence à zéro.

j'ai la macro suivante qui fonctionne quand les 2 classeurs sont ouverts, cela copie l'onglet.

Sub Copie_feuille_resultats_janvier()
Sheets("resultats_janvier").Select
Sheets("resultats_janvier").Copy After:=Workbooks("collecte_AA").Sheets(1)
End Sub

j'essaie modifier pour qu'il fasse la même chose sans ouvrir le classeur et cela bloque sur:

Workbooks("D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation\collecte_AA.xlsx").Activate

je tourne en rond depuis hier et cela me rend GRRRR


Sub Copie_feuille_resultats_janvier()
Sheets("resultats_janvier").Select
Workbooks("D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation\collecte_AA.xlsx").Activate
Sheets("resultats_janvier").Copy After:=Workbooks("collecte_AA").Sheets(1)
ActiveWindow.Close
ThisWorkbook.Activate: Range("A1").Select
End Sub

si quelqu'un a une idée

merci à vous
 

youky(BJ)

XLDnaute Barbatruc
RE Bonjour à tous,
Cette fois je viens de testé et corrigé ma macro que voici.
Bruno
VB:
Sub Copie_feuille_resultats_janvier()
On Error Resume Next 'gère l'error
Sheets("resultats_janvier").Select
Workbooks("collecte_AA.xlsx").Activate
If Err > 0 Then
Err.Clear
chemfich = "D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation\collecte_AA.xlsx"
Workbooks.Open chemfich
If Err <> 0 Then MsgBox "fichier non trouvé": Exit Sub
End If
ThisWorkbook.Sheets("resultats_janvier").Copy After:=Workbooks("collecte_AA.xlsx").Sheets(1)
Workbooks("collecte_AA.xlsx").Save
Workbooks("collecte_AA.xlsx").Close
ThisWorkbook.Activate: Range("A1").Select
End Sub
 

mix770

XLDnaute Impliqué
bonjour à vous,

je tourne en rond et vois pas pourquoi ça marche pas.

mon fichier de saisie est nommé "Parka_suivi compte exploitation" et est hébergé sur le "D:\Applis\Bordereau présence Exploitation"
mon fichier de destination nommé "collecte-AA" hébergé sur le "D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation"
de mon fichier de saisie doit être envoyé tous les mois l'onglet "resultats exploitation" et chaque mois l'onglet "resultats_janvier; resultats_fevrier; etc..
je bloque déja pour collecter un onglet et m'interroge pour les autres, il faudra une macro par onglets ?
merci à vous
je craint d'être un peu lourd je m'en excuse
 

Lone-wolf

XLDnaute Barbatruc
Bonjour mix :), le Forum :)

de mon fichier de saisie doit être envoyé tous les mois l'onglet "resultats exploitation" et chaque mois l'onglet "resultats_janvier; resultats_fevrier;

Là je ne comprends pas très bien, vu que tous les mois et chaque mois c'est la même chose. :rolleyes:
Tu veux copier "resultats exploitation" et le sauvegarder sous le nom de "resultats_janvier; resultats_fevrier etc??
 

Lone-wolf

XLDnaute Barbatruc
Re

Lone-wolf à dit: Tu veux copier "resultats exploitation" et le sauvegarder sous le nom de "resultats_janvier; resultats_fevrier etc??

Sinon, voici un classeur test avec les feuilles nommées "resultats_janvier; resultats_fevrier" etc. La feuille est sauvegardée sur le bureau.

Code pour ceux qui seraient interéssés

VB:
Option Explicit

Sub test()
Dim Ws As Worksheet, Mois As String, NomMois As String
Dim Chemin As String, NomSortie As String

    Mois = MonthName(Month(Date))
    Chemin = ThisWorkbook.Path & "\"
    Application.ScreenUpdating = False
  
    For Each Ws In ThisWorkbook.Worksheets
        NomMois = Right(Ws.Name, Len(Ws.Name) - 10)
        If NomMois = Mois Then
            Ws.Activate
            ActiveSheet.Copy
            NomSortie = ActiveSheet.Name & ".xlsx"
            Application.DisplayAlerts = False                                                                 'Format .xlsx"
            ActiveSheet.SaveAs Filename:=Chemin & NomSortie, FileFormat:=xlOpenXMLWorkbook
        End If
    Next Ws
    ActiveWorkbook.Close True
    ThisWorkbook.Sheets(1).Activate
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    20.8 KB · Affichages: 22
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Pour lone-wolf
Je tente direct d'activer le fichier qui peut être fermé
si il est fermé cela fait une error (c'est géré par on error resume next)
si error(Err>0) j'efface l'error(Err.clear) et tente d'ouvrir le fichier
si encore error message fichier non trouvé(on quitte)
si pas d'error on copy l'onglet
cela ne fait pas doublon Err>0 ou Err<>0
Il est mieux en effet de mettre chaque fois Err<>0 car le N° de l'error peut varier
Bruno
 

mix770

XLDnaute Impliqué
pour être clair dans ma réflexion, j'ai besoin d'une confirmation.

je n'y arrive pas, je comprends pas.


le classeur de destination est sur le D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation / nommé Collecte_AA
le classeur source (ou sont faites les saisies) est sur le D:\Applis\Bordereau présence Exploitation / nommé Parka_suivi compte exploitation.
avec un onglet qui se met à jour à chaque fin de mois et un onglet par mois (Resultats_Janvier; Resultats_fevrier; etc..)

si je comprends bien il faut une macro par mois ?

merci
 

mix770

XLDnaute Impliqué
Bonjour Lone_Wolf.

pour répondre à ta question
j'ai un onglet qui reprend tous les résultats de l'année (resultats_exploitation) qui est donc à remettre à jouir chaque mois
puis un onglet par mois qui lui affiche les éléments consolidés avec un affichage du budget.
c'est bien 2 onglets par mois à mettre à jour.
espérant être clair ;)
 

Lone-wolf

XLDnaute Barbatruc
Bonjour mix

D'accord, j'ai compris(enfin je crois :rolleyes:). Voici un mix entre la macro de Youky(BJ) et la mienne.

VB:
Sub Copie_feuilles()
Dim Ws As Worksheet, Mois As String
Dim chemfich As String, NomMois As String

    On Error Resume Next    'gère l'error
    'Sheets("resultats exploitation").Select
    Workbooks("collecte_AA.xlsx").Activate
    If Err > 0 Then
        Err.Clear
        chemfich = "D:\Applis\Bordereau présence Exploitation\Collecte_Résultats_Exploitation\collecte_AA.xlsx"
        Workbooks.Open chemfich
        If Err <> 0 Then MsgBox "fichier non trouvé": Exit Sub
    End If
    ThisWorkbook.Sheets("resultats exploitation").Copy ActiveWorkbook.Sheets(1).Range("a1")
    Mois = MonthName(Month(Date))

    Application.Wait(Now + TimeValue("0:00:01"))

    For Each Ws In ThisWorkbook.Worksheets
        NomMois = Right(Ws.Name, Len(Ws.Name) - 10)    'resultats_janvier; resultats_fevrier etc
        If NomMois = Mois Then
            Ws.Activate
            ActiveSheet.Copy After:=ActiveWorkbook.Sheets(1).Range("a1")
        End If
    Next Ws
    ActiveWorkbook.Close True
    ThisWorkbook.Sheets(1).Activate
End Sub
 
Dernière édition:

Discussions similaires