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 = False

bonjour 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 Sub

Bonjour,

Comme demandé, voici une capture d'écran des données (TCD de M à Q et formules Excel de R à AD)

J'ai besoin de récupérer les données de O à AD pour chacun des tableaux (il y en a 5) et des lignes peuvent s'ajouter dans chacun des tableaux

image

re,

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
Rechercher des sujets similaires à "selectionner plage base donnees eviter range o39 ad40"