Copie classeur ferme vers classeur tampon

Résolu
anais890313 Messages postés 11 Statut Membre -  
anais890313 Messages postés 11 Statut Membre -
Bonjour à tous,

je suis débutante en vba et je tourne en rond depuis quelques jours donc je fais de nouveau appel à votre savoir, en espérant que vous pourrez m'aider.

j'ai 6 classeurs différents pour chaque employé (placés dans le meme repertoire) :
BLONDELCL.xls
CASOLACL.xls
MANSIERCL.xls
MOULINECCL.xls
ROYCL.xls
ROSSETTICL.xls

et un classeur tampon ou toutes les données devront etre regroupées :
RECUP.xls

A l'interieur de chaque classeur employé se trouve un onglet BD (onglet sur lequel je dois récuperer les données)

Dans cet onglet BD :
le premier enregistrement débute en cellule A3
le nombre d'enregistrement est appelé à varier il est donc important que ma macro trouve la derniere ligne non vide

je voudrais :
récuperer les données de l'onglet BD dans chaque fichier (A3 à U"...")
les coller les uns à la suite des autres dans mon classeur tampon dans l'onglet bd
je voudais que les classeurs restent fermés pendant la copie et que la manipulation se fasse à l'aide d'un bouton sur l'onglet BD

voici le code engagé :
Sub COPIE_feuille() 

Dim BLONDELCL_source As Workbooks 
Dim CASOLACL_source As Workbooks 
Dim MANSIERCL_source As Workbooks 
Dim MOULINECCL_source As Workbooks 
Dim ROYCL_source As Workbooks 
Dim ROSSETTICL_source As Workbooks 
Dim RECUP_target As Workbooks 
Dim RECUP_feuille As Worksheets 
Dim cellBLO_source_1er As Range 
Dim cellBLO_source_der As Range 
Dim cellCAS_source_1er As Range 
Dim cellCAS_source_der As Range 
Dim cellMAN_source_1er As Range 
Dim cellMAN_source_der As Range 
Dim cellMOU_source_1er As Range 
Dim cellMOU_source_der As Range 
Dim cellROY_source_1er As Range 
Dim cellROY_source_der As Range 
Dim cellROSS_source_1er As Range 
Dim cellROSS_source_der As Range 
Dim cell_target As Range 

Set BLONDELCL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX BLONDEL HUGUES").Worksheets("BD") 
Set CASOLACL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX CASOLA HAROLD").Worksheets("BD") 
Set MANSIERCL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX VALERIE MANSIER").Worksheets("BD") 
Set MOULINECCL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX MOULINEC DAN").Worksheets("BD") 
Set ROYCL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX ROY KARINE").Worksheets("BD") 
Set ROSSETTICL_source = Workbooks("A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\Nouveau REPORTING MENSUEL COMMERCIAUX ROSSETTI NICOLE").Worksheets("BD") 

Set RECUP_target = Worksheets("BD") 
Set cellBLO_source_1er = BLONDELCL_source("A3").Range 
Set cellBLO_source_der = cellBLO_source_1er.End(xlDown) 
Set cellCAS_source_1er = CASOLACL_source("A3").Range 
Set cellCAS_source_der = cellCAS_source_1er.End(xlDown) 
Set cellMAN_source_1er = MANSIERCL_source("A3").Range 
Set cellMAN_source_der = cellMAN_source_1er.End(xlDown) 
Set cellMOU_source_1er = MOULINECCL_source("A3").Range 
Set cellMOU_source_der = cellMOU_source_1er.End(xlDown) 
Set cellROY_source_1er = ROYCL_source("A3").Range 
Set cellROY_source_der = cellROY_source_1er.End(xlDown) 
Set cellROSS_source_1er = ROSSETTICL_source("A3").Range 
Set cellROSS_source_der = cellROSS_source_1er.End(xlDown) 
Set cell_target = RECUP_feuille.Range("A3").End(xlDown).Row + 1 


BLONDELCL_source.Range(cellBLO_source_1er, cellBLO_source_der).Copy cell_target 
CASOLACL_source.Range(cellCAS_source_1er, cellCAS_source_der).Copy cell_target 
MANSIERCL_source.Range(cellMAN_source_1er, cellMAN_source_der).Copy cell_target 
MOULINECCL_source.Range(cellMOU_source_1er, cellMOU_source_der).Copy cell_target 
ROYCL_source.Range(cellROY_source_1er, cellROY_source_der).Copy cell_target 
ROSSETTICL_source.Range(cellROSS_source_1er, cellROSS_source_der).Copy cell_target 

End Sub 


Désolé pour le code surement grossier ....
Merci par avance pour votre aide

8 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Combien de lignes maximum chez tes commerciaux (ordre de grandeur) ?
    Version Excel ?
    Le classeur "recup" est il dans le m^me répertoire que les classeurs "source" ?

    Mettre un classeur source en pièce jointe( l'onglet BD suffira) , s'il te plait
    pour joindre une pièce
    mettre le classeur sans données confidentielles en pièce jointe sur
    https://www.cjoint.com/
    puis copier l'adresse du lien et la coller dans le message de réponse


    Michel
    0
  2. anais890313 Messages postés 11 Statut Membre
     
    Bonjour,

    Tout d'abord merci pour ta réponse.

    Pour répondre à ta question :

    Il y aura 300 lignes maximum pour chaque commercial.
    Le classeur récup est pour l'instant dans le meme répertoire mais dans l'ideal il ne l'est pas ... (si pas possible je le laisserai dans le meme répertoire ...)

    Je te joins tout de suite le classeur source avec l'onglet bd

    merci par avance pour ton aide.
    0
  3. anais890313 Messages postés 11 Statut Membre
     
    https://www.cjoint.com/?CBii3NoluPo et voici le lien du classeur ou les données doivent etre récupérée

    c'est Excel version 2010 mais ce system doit fonctionner sous 2000 egalement
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour

      En premier, il faut regarder si 2000 et 2010 sont compatibles et je n'ai ni l'un ni l'autre aussi je te mettrai à contribution pour que tu fasses les tests
      sinon, nous serons obligés d'ouvrir chaque source et faire les copies : combien "pèsent" (en Ko ou Mo) environ un fichier "source"

      je regarde ça mais je ne sais pas quand !
      0
    2. anais890313 Messages postés 11 Statut Membre
       
      Ok tu me diras je testerai
      en moyenne un fichier source 15000 ko
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      peux tu me donner les numéros de version sur XL2000 et XL2010 en utilisant cette macro

      15 Mo par commercial ? pas très prudent...
      Sub xxx()
      MsgBox Application.Version
      End Sub
      0
    4. anais890313 Messages postés 11 Statut Membre
       
      14.0 pour 2010
      10.0 pour 2000

      c'est à dire pas tres prudent pour 15 mo ?
      merci pour ton aide
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    re,
    Désolé mais mon ordi avait envie de faire des farces ce matin

    ci dessous, la solution simple mais brutale en ouvrant les fichiers commerciaux. compte tenu du poids, cela risque d'^tre long ! mais si ca te va...
    Autrement, tu dis , alors, l'idéal serait que tu sauvegardes les fichiers commerciaux au format 97-2003
    Le classeur onglet_bd est enregistré sous ce dernier format

    le code:
    Option Explicit 
    
    Sub tester_ouvert() 
    Dim Chemin As String, Fich As String 
    Dim Derlig As Integer, Plage() 
    Dim Lig As Long 
    
    Application.ScreenUpdating = False 
    Chemin = "A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting1\" 
    'Chemin = "d:\documents\ccm\" 'CHEZ MOI ! 
    ChDir Chemin 
    Fich = Dir("*.xls" & "*") 
    While Fich <> "" 
         If Fich <> "onglet_bd.xls" Then 'nom fichier à adapter 
              Workbooks.Open Filename:=Fich 
                   With Sheets("feuil1") 'nom feuille à adapter 
                        Derlig = .Cells(.Rows.Count, "A").End(xlUp).Row 
                        Plage = .Range("A3:U" & Derlig).Value 
                   End With 
                   With Workbooks(Fich) 
                        If Not .Saved Then 
                             .Save 
                        End If 
                         .Close 
                    End With 
                    With ThisWorkbook.Sheets("feuil1") 'nom feuille à adapter 
                        Lig = .Cells(.Rows.Count, "A").End(xlUp).Row 
                        .Cells(Lig, "A").Resize(UBound(Plage), 21) = Plage 
                    End With 
         End If 
         Fich = Dir 
    Wend 
    
    End Sub


    Michel
    0
  6. anais890313 Messages postés 11 Statut Membre
     
    bonjour Michel,

    Merci pour ton aide et désolée pour ma réponse un peu tardive... moi c'est ma connexion qui a décidé de faire des siennes depuis quelques jours

    j'ai donc inséré ton code dans mon fichier en l'adaptant mais rien ne se passe quand j'essaye de l'executer

    puis je abuser et te demander encore un peu de ton temps ?

    voici le code adapté :
    Sub tester_ouvert()
    Dim Chemin As String, Fich As String
    Dim Derlig As Integer, Plage()
    Dim Lig As Long
    
    Application.ScreenUpdating = False
    Chemin = "A:\Commerciaux\reporting mensuel des commerciaux\Nouveau reporting mensuel des commerciaux\"
    'Chemin = "d:\documents\ccm\" 'CHEZ MOI !
    ChDir Chemin
    Fich = Dir("*.xls" & "*")
    While Fich <> ""
         If Fich <> "Nouveau REPORTING MENSUEL COMMERCIAUX MANAGER.xls" Then 'nom fichier à adapter
              Workbooks.Open Filename:=Fich
                   With Sheets("BD") 'nom feuille à adapter
                        Derlig = .Cells(.Rows.Count, "A").End(xlUp).Row
                        Plage = .Range("A3:U" & Derlig).Value
                   End With
                   With Workbooks(Fich)
                        If Not .Saved Then
                             .Save
                        End If
                         .Close
                    End With
                    With ThisWorkbook.Sheets("BD") 'nom feuille à adapter
                        Lig = .Cells(.Rows.Count, "A").End(xlUp).Row
                        .Cells(Lig, "A").Resize(UBound(Plage), 21) = Plage
                    End With
         End If
         Fich = Dir
    Wend
    
    End Sub
    
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    le pb est que j'ai supprimé ma maquette (je supprime si je n'ai pas de réponses dans les 4 jours ) mais je crois me souvenir que ca marchait...maintenant, je suis en monoposte et donc le fichier "recup" n'a pas de pb de partage et je n'ai pas d'accès simultané...
    0
  8. anais890313 Messages postés 11 Statut Membre
     
    c'est bon j'ai modifié quelques petits details et ca fonctionne parfaitement

    Merci beaucoup pour cette aide précieuse qui m'a permis de gagner beaucoup de temps !
    0