J'essaie de définir une plage dynamique sur une variable pour copier la plage sur une autre feuille.
Sur la dernière ligne, j'obtiens
"Erreur d'exécution '91', variable objet ou avec variable de bloc non définie"
Tout le reste fonctionne. Les lignes et colonnes de fin sont trouvées.
Sub AutoFilter()
Dim shWorkBook As Worksheet
Dim shPivotTable As Worksheet
Dim shCarrierRates As Worksheet
Dim shWholesaleLocation As Worksheet
Dim shPWLocation As Worksheet
Dim wkb As Workbook
Dim shSegmentation As Worksheet
Dim MilageMatrix As Worksheet
Dim FullYearData As Worksheet
Dim StartForm As Worksheet
Set wkb = ThisWorkbook
With wkb
Set shPivotTable = .Sheets("PivotTable")
Set shCarrierRates = .Sheets("CarrierRates")
Set shWholesaleLocation = .Sheets("WholesalerLocation")
Set shPWLocation = .Sheets("PWLocation")
Set shSegmentation = .Sheets("Segmentation")
Set shMilageMatrix = .Sheets("MilageMatrix")
Set shFullYearData = .Sheets("FullYearData")
Set shStartForm = .Sheets("StartForm")
set shWorkBook = .sheets("WorkBook")
End With
Dim DataRange As Range
Dim PWSelection As Integer
Dim LastRow As Long
Dim LastColumn As Long
Set StartCell = shFullYearData.Range("A1")
'Find Last Row and Column
LastRow = shFullYearData.Cells(shFullYearData.Rows.Count, StartCell.Column).End(xlUp).Row
LastColumn = shFullYearData.Cells(StartCell.Row, shFullYearData.Columns.Count).End(xlToLeft).Column
'Select Range
shFullYearData.Range(StartCell, shFullYearData.Cells(LastRow, LastColumn)).Select
Set DataRange = Selection
PWSelection = shStartForm.Cells(1, 1).Value
shFullYearData.Range(DataRange).Copy Destination:=shWorkBook.Range("A1")
End Sub
3 Réponses :
Il n'y a aucune raison de trouver la dernière ligne et colonne. Utilisez simplement Range().CurrentRegion.
ThisWorkbook.Sheets("FullYearData").Range("A1").CurrentRegion.Copy ThisWorkbook.Sheets("WorkBook").Range("A1")
Je recommande fortement d'utiliser les noms de code de feuille de calcul, lire: Explication des noms de code VBA .
Essayez ceci. Cependant, j'ai remarqué que vous utilisez xlup et que vous êtes parti lorsque votre point de départ est la cellule a1. J'étais un peu confus par cela. Mais j'ai pu faire passer les erreurs qui apparaissent lorsque vous exécutez votre code.
Sub AutoFilter()
Dim shWorkBook As Worksheet
Dim shPivotTable As Worksheet
Dim shCarrierRates As Worksheet
Dim shWholesaleLocation As Worksheet
Dim shPWLocation As Worksheet
Dim wkb As Workbook
Dim shSegmentation As Worksheet
Dim MilageMatrix As Worksheet
Dim FullYearData As Worksheet
Dim StartForm As Worksheet
Set wkb = ThisWorkbook
With wkb
Set shPivotTable = .Sheets("PivotTable")
Set shCarrierRates = .Sheets("CarrierRates")
Set shWholesaleLocation = .Sheets("WholesalerLocation")
Set shPWLocation = .Sheets("PWLocation")
Set shSegmentation = .Sheets("Segmentation")
Set shMilageMatrix = .Sheets("MilageMatrix")
Set shFullYearData = .Sheets("FullYearData")
Set shStartForm = .Sheets("StartForm")
Set shWorkBook = .Sheets("WorkBook")
End With
Dim DataRange As Range
Dim PWSelection As Integer
Dim LastRow As Long
Dim LastColumn As Long
Set StartCell = shFullYearData.Range("A1")
'Find Last Row and Column
''I cant figure out why you want to start at a1 and then do xlup and xlleft. that only
''gets you to a1.
LastRow = shFullYearData.Cells(shFullYearData.Rows.Count,
StartCell.Column).End(xlUp).Row
LastColumn = shFullYearData.Cells(StartCell.Row,
shFullYearData.Columns.Count).End(xlToLeft).Column
'Select Range
''**here is where i made a change**
shFullYearData.Select
Range(StartCell, shFullYearData.Cells(LastRow, LastColumn)).Select
Set DataRange = Selection
PWSelection = shStartForm.Cells(1, 1).Value
''**I also made a change here**
shFullYearData.Select
DataRange.Copy Destination:=shWorkBook.Range("A1")
End Sub
Je soupçonne maintenant que vous n'avez pas Option Explicit en haut de votre module de code. En conséquence, vous n'êtes pas alerté de la déclaration manquante de StartCell . En fait, StartCell est une plage plutôt inutile, mais si elle n'est pas définie, votre sélection échoue et cela ferait en sorte que DataRange soit Nothing, bien que cette erreur se produise avant le dernière rangée. Bien sûr, la sélection est également tout à fait inutile et peut causer des problèmes en elle-même car vous ne contrôlez pas ActiveSheet et il ne peut pas y avoir de Selection sur une feuille qui n'est pas active. Pour couper court, je vous recommande de réécrire toute la fin de votre code. Ce code devrait fonctionner.
Dim DataRange As Range
Dim PWSelection As Integer
Dim LastRow As Long
Dim LastColumn As Long
With shFullYearData
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
Set DataRange = .Range(.Cells(1, 1), .Cells(.Cells(LastRow, LastColumn)))
End With
Range(DataRange).Copy Destination:=shWorkBook.Cells(1, 1)
shFullYearData.Range (DataRange)c'est le coupable. shFullYearData n'est pas une feuille de calcul. C'est une variable.DataRangeidentifie complètement l'emplacement (feuille de calcul). Il n'est pas nécessaire de préciser où il se trouve. C'est donc tout ce dont vous avez besoin:Range (DataRange)J'ai apporté les modifications recommandées et je rencontre toujours l'erreur. La raison pour laquelle j'avais le shFullYearData avant la plage était parce que je voulais spécifier où dans le classeur vba devait regarder. Des idées sur d'autres raisons de l'erreur?
sWorkbooksemble non seulement mal nommé, car ce n'est pas un livre mais une feuille, mais également non spécifié nulle part.Désolé, je n'ai pas semblé recopier lors de la rédaction de cette question, mais je l'ai définie et il s'agit d'une feuille de calcul appelée "Workbook" (probablement pas le meilleur nom pour plus de clarté lol) dans mon classeur
L'instruction Dim est supprimée.
Regardez-vous la version modifiée où cela a déjà été corrigé?