Sélectionner plage d'une base de données et éviter : Range("O39:AD40")
Bonjour à tous,
Débutante en macro, pourriez-vous m'aider à sélectionner une plage de données m'évitant d'utiliser Range("O39:AD40").Select car des lignes peuvent s'ajouter. Cette plage de données contient un TCD+ Formules excel ensuite (je ne récupère pas les deux premières colonnes du TCD)
J'ai essayé avec ce genre de code mais ayant plusieurs tableau dans les colonnes O:AD cela n'a pas fonctionné et a sélectionné l'ensemble des tableaux+lignes vides
DerniereLigne = ws.Cells(ws.Rows.Count, "O").End(xlUp).Row - 1
DerniereColonne = ws.Cells(39, ws.Columns.Count).End(xlToLeft).Column
Voici un extrait de mon code:
Dim ws As Worksheet
Dim DerniereLigne As Long
Dim DerniereColonne As Long
Dim Destination As Worksheet
Dim PlageDestination As Range
'TCD1
Set ws = ThisWorkbook.Worksheets("Majorations")
Range("O39:AD40").Select
Selection.Copy
Set Destination = ThisWorkbook.Sheets("Masse salariale B26")
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
PlageDestination.PasteSpecial Paste:=xlPasteValues
'TCD2
Set ws = ThisWorkbook.Worksheets("Majorations")
Range("O59:AD62").Select
Selection.Copy
Set Destination = ThisWorkbook.Sheets("Masse salariale B26")
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
PlageDestination.PasteSpecial Paste:=xlPasteValues
Je vous remercie par avance pour votre aide et vous souhaite une agréable journée,
Code a tester
Dim ws As Worksheet
Dim Destination As Worksheet
Dim PlageDestination As Range
Set ws = ThisWorkbook.Worksheets("Majorations")
Set Destination = ThisWorkbook.Sheets("Masse salariale B26")
' TCD1
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
ws.Range("O39:AD40").Copy
PlageDestination.PasteSpecial Paste:=xlPasteValues
' TCD2
Set PlageDestination = Destination.Range("A130").End(xlUp).Offset(1, 0)
ws.Range("O59:AD62").Copy
PlageDestination.PasteSpecial Paste:=xlPasteValues
' Optionnel : Vous pouvez également supprimer le presse-papiers pour libérer la mémoire
Application.CutCopyMode = Falsebonjour ninabodo, salut Joco7915,
il suffit de savoir le nom du TCD et son mise en page pour copier tout, donc si vous pouvez télécharger un fichier pour mieux vous montrer cette macro ...
Sub test()
ThisWorkbook.Worksheets("Majorations").PivotTables(1).TableRange1.Resize(, 2).Copy 'les 2 premières colonnes du TCD
ThisWorkbook.Sheets("Masse salariale B26").Range("A130").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
End Subre,
c'est un forum "excel" et ne pas photoshop ..., un essai, les TCDs, ils sont filtrés ? Sinon, doit-on utiliser "specialcells(xlvisible)" ???
Sub Test1()
Dim i, c
For i = 1 To 5
With ThisWorkbook.Worksheets("Majorations").PivotTables(i).DataBodyRange 'la partie "databodyrange du TCD i
Set c = .Offset(, -2).Resize(, .Columns.Count + 2) 'y ajouter les 2 colonne à gauche
MsgBox c.Address 'l'adresse de cette plage
c.Copy
ThisWorkbook.Sheets("Masse salariale B26").Range("A130").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
End With
Next
End Sub
Sub Test2()
Dim Arr, pvt, c
Arr = Array("PVT1", "PVT5", "PVT3", "pvt2", "PVT4") 'matrice avec les noms des 5 TCDs dans la séquence voulue
For Each pvt In Arr
With ThisWorkbook.Worksheets("Majorations").PivotTables(pvt).DataBodyRange 'la partie "databodyrange du TCD i
Set c = .Offset(, -2).Resize(, .Columns.Count + 2) 'y ajouter les 2 colonne à gauche
MsgBox c.Address 'l'adresse de cette plage
c.Copy
ThisWorkbook.Sheets("Masse salariale B26").Range("A130").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
End With
Next
End Sub