Bonjour
J'ai fais 2 types de copie de plage en exemple court
Celle avec les ref en 'cells' ne fonctionne pas ?
l'autre ok
Que faut il ajouter pour avoir aussi le format de cellule identique ?
Avant de parler Cells, les noms de macro ne doivent pas être des mots clefs vba ou des adresses de cellule et "Cop1" est une adresse de cellule. Chez moi votre macro refuse de se lancer à partir de la liste des macros.
Ensuite, si votre macro est dans un module, il faut dire à Cells à qu'elle feuille il appartient, comme vous le faites pour Range. Sinon il prend la feuille active par défaut.
Ce qui peut faire conflit, dans un Range qui lui connaît sa feuille et que la feuille active soit une autre comme dans votre ligne ci-dessous.
Sub copier_Plage()
Dim i As Long
i = 5
With Sheets("Feuil1")
.Range(.Cells(i, 2), .Cells(i, 4)).Copy Destination:=Sheets("Feuil2").Range("G11")
End With
End Sub
Notez les . devant Cells ".Cells" qui fontréférence à la variable du bloc With...End With
Ok merci , mais chez moi avec F5 ça fonctionne !
Pas vu que c'était pas un fichier réel ?? j'ai fait bidon pour le test
Je suis loin d'être expert mais pas débutant non plus les bases je connais sauf que pour moi les colonnes s'arrêtaient à IV !!
les .cells ou .range : je connais
si je déclare je ferais DIM i as integer ( entier naturel)
Sinon ou je bloque c'est pour ajouter le format dimensions des cellules
Sauf que le moteur VBA les convertira en long, puisqu'il travaille (depuis ces versions) avec des long pour les objets range et cell parce que Rows.Count = 1 048 576 est plus large qu'un entier.
@dev_co
Sur la base de ton code je te propose ceci :
VB:
Sub cop1()
i = 5
Sheets("Feuil1").Range("B" & i & ":D" & i).Copy Destination:=Sheets("Feuil2").Range("G11")
Sheets(2).Columns(7).ColumnWidth = Sheets(1).Columns(2).ColumnWidth
Sheets(2).Columns(9).ColumnWidth = Sheets(1).Columns(4).ColumnWidth
Sheets(2).Rows(11).RowHeight = Sheets(1).Rows(i).RowHeight
End Sub
@Phil69970 : merci c'est bien ça
en fait la finalité maintenant serait d'avoir les 2 cel. de feuil1 juste en G11 de feuil2 mais là je pense qu'il ne faut plus copier mais concaténer ? et comme ici garder les mêmes dimensions et format !
Il y a deux format dans la Feuil1 donc au choix
r.Areas.Item(1) ou
r.Areas.Item(2)
VB:
Sub cop1()
i = 5
Dim r As Range
Set r = Application.Union(Sheets("Feuil1").Range("B" & i), Sheets("Feuil1").Range("D" & i))
'MsgBox r.Areas.Item(1).Address '/ = Sheets("Feuil1").Range("B" & i)
'MsgBox r.Areas.Item(2).Address '/ = Sheets("Feuil1").Range("B" & i)
With r.Areas.Item(1)
.Copy
Sheets("Feuil2").Range("G11").PasteSpecial Paste:=xlPasteFormats
For i = 1 To r.Areas.Count: Txt = Txt & r.Areas.Item(i).Value2 & " ": Next i
Sheets("Feuil2").Range("G11") = Trim(Txt)
Sheets("Feuil2").Range("G11").Columns.AutoFit
Sheets("Feuil2").Range("G11").RowHeight = .RowHeight
.Application.CutCopyMode = False
End With
End Sub
Bonsoir
Merci bien , avec tout ça cela devrait coller !!!!
Pour moi ça va , comme c'est pour une boucle faut pas trop surcharger
Je connaissais pas le UNION !!