Copier une plage et la coller via une macro

Résolu/Fermé
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 - 8 oct. 2014 à 17:27
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 9 oct. 2014 à 16:43
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 !

A voir également:

4 réponses

senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
8 oct. 2014 à 20:39
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
8 oct. 2014 à 17:36
Bonjour,

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

eric
-1
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
8 oct. 2014 à 20:33
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
8 oct. 2014 à 22:46
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
senecartour Messages postés 325 Date d'inscription dimanche 12 mai 2013 Statut Membre Dernière intervention 29 octobre 2020 3
9 oct. 2014 à 11:35
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 9/10/2014 à 16:44
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
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