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

  • Initiateur de la discussion Initiateur de la discussion Laurentl
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

Laurentl

Guest
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

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
 
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!
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour