Collage matrice dans autre fichier à la suite d'une autre matrice

Laurentl

XLDnaute Nouveau
Bonjour à tous!

J'ai un fichier que je mets à jour à l'aide de deux autres fichiers.
Dans mon premier fichier (Test1), j'ai une macro qui ouvre Test2 et Test3, qui sélectionne la matrice de Test3, la copie et l'insère à la suite de la matrice de Test2.
Jusqu'à présent, je le faisais manuellement à partir de l'insertion car la matrice de Test2 est de longueur variable et une macro "enregistrée" insère forcément toujours à la même ligne.

Je ne sais pas comment programmer la variable dans la macro, si quelqu'un peut m'aider?

Merci beaucoup en tout cas!
 

Pièces jointes

  • Test1.xlsm
    13.3 KB · Affichages: 37
  • Test1.xlsm
    13.3 KB · Affichages: 36
  • Test1.xlsm
    13.3 KB · Affichages: 39
  • Test2.xlsx
    9.1 KB · Affichages: 36
  • Test3.xlsx
    9.2 KB · Affichages: 34
  • Test2.xlsx
    9.1 KB · Affichages: 38
  • Test3.xlsx
    9.2 KB · Affichages: 40
  • Test2.xlsx
    9.1 KB · Affichages: 39
  • Test3.xlsx
    9.2 KB · Affichages: 43

Robert

XLDnaute Barbatruc
Repose en paix
Re : Collage matrice dans autre fichier à la suite d'une autre matrice

Bonjour Laurent, bonjour le forum,

Peut-être comme ça :
Code:
Sub Collage()
Dim cd As Workbook 'déclare la variable cd (Classeur Destination)
Dim od As Object 'déclare la variable od (Onglt Destination)
Dim ch As String 'déclare la variable ch (CHemin d'accès)
Dim cs As Workbook 'déclare la variable cs (Classeur Source)
Dim os As Object 'déclare la variable os (Onglet Source)
Dim cl As Byte 'déclare la variable cl (Classeurs)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

Set cd = ThisWorkbook 'définit le classeur de distination cd
Set od = cd.Sheets("Feuil1") 'définit l'onglet de destination od
ch = cd.Path & "\" 'définit le chemin d'accès ch
od.UsedRange.Clear 'supprime d'éventuelles anciennes données (ligne à garder ou à supprimer selon ton cas...)
For cl = 2 To 3 'boucle sur les deux classeurs
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Workbooks("Test" & cl & ".xlsx").Activate 'active le classeur (génère une erreur si le classeur n'est pas ouvert)
    If Err <> 0 Then 'condition si une erreur a été générée
        Err = 0 'annule l'erreur
        Workbooks.Open (ch & "Test" & cl & ".xlsx") 'ouvre le classeur
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Set cs = ActiveWorkbook 'définit le classeur source
    Set os = cs.Sheets("Feuil1") 'définit l'onglet source
    'définit la cellule de destination (A1 si A1 est vide, sinon la première cellule vide de la colonne A de l'onglet od du classeur od)
    Set dest = IIf(od.Range("A1").Value = "", od.Range("A1"), od.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
    os.UsedRange.Copy dest 'copie la plage des cellules utilisée de l'onget source et la colle dans dest
    cs.Close Savechanges:=False 'ferme l'onglet source sans enregister
Next cl 'prochain classeur de la boucle
End Sub
 

Laurentl

XLDnaute Nouveau
Re : Collage matrice dans autre fichier à la suite d'une autre matrice

Bonjour et merci beaucoup!

La macro me renvoit un message d'erreur "Objet requis".
Je pense que c'est la ligne Set cd= qui définit le classeur de destination qui devrait être Test2, je n'ai pas compris pourquoi vous avez mis ThisWorkbook?
D'autre part, vous mettez le chemin d'accès pour le classeur de destination mais malheureusement ma macro créé ce fichier qu'elle n'enregistre qu'à la fin, il n'y a donc pas de chemin d'accès existant à l'instant t d'exécution de ce bout de macro, il me semble?

Merci!
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Collage matrice dans autre fichier à la suite d'une autre matrice

Bonjour et merci beaucoup!

vous mettez le chemin d'accès pour le classeur de destination mais malheureusement ma macro créé ce fichier qu'elle n'enregistre qu'à la fin, il n'y a donc pas de chemin d'accès existant à l'instant t d'exécution de ce bout de macro, il me semble.

Ce n'est pas du tout ce que dit le code qu'il y avait dans le classeur Test1.xlsm en exemple... Si tu ne mets pas tout le code on ne peut pas le deviner !!!
Code:
Sub Collage()
'
' Collage Macro
'

'
    Range("A1:D1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("Test2.xlsx").Activate
    Range("A28").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
End Sub
Pour fonctionner, la macro que j'ai proposée doit être placée dans le classeur Test1.xlsm qui lui même doit se trouver dans le même dossier que les deux autres fichiers :Test2.xlsx et Test3.xlsx
 

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 013
Membres
104 004
dernier inscrit
mista