Bonjour tls25, le fil, le forum
Ma proposition ne faisait qu'étendre la formule ou la valeur de la cellule A1 sur la plage.
Pour copier réellement :
Sub copier_2()
With Sheets("Feuil1")
.Cells(1, 1).Copy .Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(3)(1, 0))
End With
End Sub
Pour les explications:
.Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(3)(1, 0))
Le . rattache ce qui le suis au With
Regardons la plage:
.Range((cellule de début), (Cellule de fin))
Cellule de début :
.Cells(1,1)
La syntaxe .Cells(Ligne, colonne) donc .Cells(1,1) renvois la cellule ligne 1 colonne 1 de la feuille 1 (With Sheets("Feuil1")) soit :
Feuil1!$A$1
Cellule de fin :
.Cells(.Rows.Count, 2).End(3)
Cellule(nombre de lignes de la feuille, colonne 2).En remontant vers le haut (3 = Xlup)
Ceci nous donnes la dernière cellule remplie en colonne B soit dans le dernier exemple Feuil1!$B$16
Ensuite la plage doit finir en colonne A et pas en colonne B donc on décale la cellule trouvée vers la gauche
On peux utiliser .offset(0,-1) ou utiliser directement (1,0)
.Cells(.Rows.Count, 2).End(3)(1,0)
ou, si l'on préfère:
.Cells(.Rows.Count, 2).End(3).Offset(0, -1)
On arrive donc à Feuil1!$A$16
Si on reprend la formule .Range((cellule de début), (Cellule de fin)) on arrive à trouver la plage cherchée
.Range(Feuil1!$A$1, Feuil1!$A$16) <== Syntaxe simplifiée pour le besoin des explications
Cordialement