Copier/Coller plusieurs classeurs via VBA

Résolu
Bonjour,

Une question un peu compliquée. J'ai 4 classeurs parfaitement identiques nommés classeur1, classeur2, classeur3, classeur4. Dans mon 5ème classeur, dans ma feuille "Synthèse Globale", j'aimerais pouvoir développer une macro qui permettrai de copier/Coller les colonnes de C à E contenu dans l'onglet "Saisie" de chaque classeur. J'aimerais que les copier/Coller se fassent les uns à la suite des autres, par exemple la macro commence à copier/coller les colonnes de C à E de l'onglet "Saisie" du classeur1, puis quand on arrive à la ligne où les valeurs contenues dans ces colonnes sont nulles (ou plutôt cellule vide), la macro lance le copier/coller des colonnes C à E de l'onglet "Saisie" du classeur2... et ainsi de suite jusqu'au classeur4.
J'espère avoir été assez claire dans mes explications. Je ne sais pas du tout si une telle macro peut être développée.

Merci beaucoup pour votre aide,

5 réponses

  1. Contributeur
    Bonjour,
    Où se trouvent les 4 classeurs et le 5°: dans le m^me dossier ?
    et sont les seuls dans le ou les dossiers concernés?

    Edit 14:03h
    suffixes: xls, xlsx, xlm, xlsm des 4 ?
    Michel
    0
    1. RE,
      Les 5 classeurs se trouvent dans le même dossier nommé "Suivi des temps CIR" ils sont tous au format xlsm.

      Merci
      0
  2. RE,
    Les 5 classeurs se trouvent dans le même dossier nommé "Suivi des temps CIR" ils sont tous au format xlsm.

    Merci
    0
    1. Contributeur
      Re
      ci dessous un code non testé, donc...
      Option Explicit
      '------
      Sub compiler_CaE()
      Dim Chemin As String, Fich As String
      Dim Derlig As Integer, Ligvide As Long, Tampon

      'fige le défilement de l'écran
      Application.ScreenUpdating = False

      Chemin = ThisWorkbook.Path
      ChDir Chemin
      Fich = Dir("*.xlsm")
      While Fich <> "" And Fich <> "classeur5.xlsm"
      Workbooks.Open Filename:=Fich 'ouvre le classeur
      With Sheets("saisie")
      Derlig = .Columns("C:E").Find(what:="*", searchdirection:=xlPrevious).Row
      Tampon = .Range("C1:E" & Derlig) 'mémorise les données à compiler dans classeur5
      End With
      Workbooks(Fich).Close

      With ThisWorkbook.Sheets("Synthèse Globale")
      Ligvide = .Columns("C:E").Find(what:="", after:=Range("C:" & .Cells.Rows.Count)).Row
      Cells(Ligvid, "C").Resize(UBound(Tampon), 3) = Tampon
      End With

      'affecte le fichier suivant (utilisation du joker " * " utilisé pour la def du 1° fichier)
      Fich = Dir
      Wend

      Sheets("Synthèse Globale").Activate
      MsgBox "compilation terminée"
      End Sub


      pour bien faire pourrais tu mettre en pièce jointe un des classeurs source et me donner les nom exact du classeur5 et des classeurs source
      je restitue actuellement dans les colonnes C-E du classeur 5
      dans l'attente, d'avance merci; Je repasse dans 1h - 1h30

      pour mettre en Pj
      Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
      et coller le lien proposé dans le message de réponse
      Dans l'attente

      Michel
      0
      1. Voici le lien demandé https://www.cjoint.com/?0EDpgKcHZbD
        Mes classeurs sources s'appellent respectivement: classeur1.xlsm, classeur2.xlsm, classeur3.xlsm, et classeur4.xlsm. Mon classeur destinataire s'appelle "Base de données.xlsm"
        Merci
        0
    2. Contributeur
      0
      1. je pense que je m'y prend mal, lorsque j'ouvre les fichiers et que je vais dans l'onglet Développeur puis VBA je ne trouve aucune macro de créée ...?
        0
      2. @michel_mMerci beaucoup Michel, mais je vais encore vous embêter un petit peu. Votre code marche très bien, je l'ai copier dans mon classeur Base de données et tout fonctionne, par contre j'ai essayé de modifier le code pour qu'il me recopie les colonnes de B à I et pas seulement de C à E. Mais là ça ne marche plus, il me recopie uniquement les colonnes de B à I du classeur1 puis plus rien. Par contre message d'erreur ne s'affiche.
        0
      3. Contributeur
        bonjour,
        Suis absent toute la journée (météo splendide ici sans mistral...)
        met ton classeur base de données en PJ
        0
    3. Tu dois pouvoir t'en sortir avec ce type d'instruction.
      pour l'ouverture du classeur :
      Workbooks.Open Filename:=ThisWorkbook.Path & "\nom_du_classeur"
      la fermeture avec l'instruction workbooks("nom_du_classeur").close False

      et ensuite pour les copier coller workbook("nom_du_classeur").sheets("nom_de_l'onglet").range(column(3), column(5)).copy

      et un .paste derrière à l'endroit ou tu le veux.
      -2
      1. D'accord merci, mais j'ai oublié de préciser que je suis vraiment très débutante... Est ce que vous pourriez me détailler un peu plus tout ca ? j'ai du mal à comprendre comment faire pour que les copier/coller se fassent les uns à la suite des autres.
        Merci
        0