Copier une plage et la coller via une macro

Résolu
Bonjour,

Je vous sollicite car je suis bloqué sur un code de Macro (en même temps, je ne suis pas un expert dans les macros, je suis entrain d'apprendre petit à petit).

J'ai un tableau dans la feuil1 dont la taille varie eu fur et à mesure. Je souhaite créer une macro qui permet de sélectionner toute la plage de données, c'est-à-dire jusqu'à la dernière ligne et dernière colonne renseignée.

Et cette plage sera copier dans la feuil2 au à partir de la cellule B2.
J'ai essayé de définir ma plage en choisissant des bornes, mais la macro est planquée sur une ligne et je n'arrive pas détecter l'origine de l'erreur.

Je vous joins le lien de mon fichier:https://www.cjoint.com/c/DJirEEaX7xn
NB : Je ne souhaite pas utiliser la fonction CurrentRegion pour copier ma plage.

Merci d'avance pour votre aide !

--
Partager son savoir est la meilleure façon d'apprendre!

4 réponses

  1. Maurice,
    Ton code marche bien. Mais j'aimerais avoir le résultat avec ma méthode (cf. sujet).
    Serait-il possible d'utiliser ma méthode pour y arriver?

    En parallèle, c'est quoi la signification des ,,,,, dans vos macros?
    ex.: dans (Nlig = Cells.Find("*", , , , , xlPrevious).Row)
    J'aimerais comprendre la signification des ,,,,,,,,
    En effet, votre méthode est intéressant et ça pourrait me servir dans l'avenir!

    Merci pour votre aide!
    0
    1. Contributeur
      Bonjour,

      Range("B") n'est pas une référence valide.
      Range("B2") oui, columns(2) oui.

      eric
      -1
      1. Bonjour Ecri,
        J'ai corrigé la référence Range("B2").
        En lançant la macro, elle ne planque pas mais c'est une seule cellule est est copiée au lieu toute la plage. Je te joins le code de ma macro:

        ________________________________________________________________________________
        Sub test()

        Dim ilignecourante, icolonnnecourante, lignefin, colonnefin As Long

        ilignecourante = 2
        icolonnecourante = 2
        lignefin = Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
        colonnefin = Sheets("Feuil1").Range("B2").End(xlToRight).Column

        Do While Sheets("Feuil1").Range("B" & ilignecourante) <> ""
        For ilignecourante = 2 To colonnefin
        Sheets("Feuil1").Cells(ilignecourante, icolonnecourante).Select
        Next
        Loop
        Selection.Copy Destination:=Sheets("Feuil2").Range("B2")

        End Sub
        ----------------------------------------------------------------------------------------------------------------------------------------------------
        Merci pour ton aide!
        0
      2. Contributeur
        Tu lui reproches quoi à la proposition de maurice ?
        Les , sont juste là pour ne pas à avoir à nommer le xième paramètre. Il est à sa place et ceux qui ne sont pas utilisés ne sont pas saisis, c'est tout.
        eri
        0
      3. Bonjour Eiiic,
        Je ne reproche rien à la méthode de maurice qui me servira sans doute dans l'avenir.
        Seulement, je souhaiterais appliquer ma méthode que j'avais commencée.
        J'ai essayé de corriger le code mais la macro tourne tourne en boucle et rien n'est copié.
        voir: https://www.cjoint.com/c/DJjlM1tdjh0
        Pourriez-vous, s'il vous plait, m'aider à résoudre le problème?
        Merci d'avance
        0
      4. Contributeur
        Bonjour,

        Si, qq chose est copié, mais toujours au même endroit : Sheets("Feuil2").Range("B2")
        D'ailleurs on se demande pourquoi tu le fais une 2nde fois en sortie du next.

        Pour déboguer faire en pas à pas avec F8.
        A chaque do while regarde la valeur de ilignecourante.
        En approchant le curseur dessus un popup apparait. Ou bien tu double-cliques dessus et tu fais glisser le nom (ou une expression complète si tu veux) dans la fenêtre espion (menu affichage si tu ne l'as pas).
        https://www.commentcamarche.net/contents/1381-debogage

        eric
        0
    2. Bonjour
      pour copier une Plage

      Sub Test()
      Feuil1.Select
      Nlig = Cells.Find("*", , , , , xlPrevious).Row
      Col = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
      Range(Cells(2, 2), Cells(Nlig, Col)).Copy
      Feuil2.Range("B2").PasteSpecial xlPasteValues
      Application.CutCopyMode = False
      End Sub

      A+
      Maurice
      -1