1 votes

VBA Excel : Erreur lors de la sélection d'une plage pendant l'itération du classeur

J'ai plusieurs fichiers dans un dossier avec la colonne "Numéro de pièce" mais ils ne sont pas tous dans le même numéro de colonne. La liste ne commence pas nécessairement dans la même ligne non plus.

Je cherche donc d'abord la chaîne "Part Number", puis je copie son adresse comme début de la plage que je veux copier.

La colonne "Numéro de pièce" comporte des espaces vides dans certains éléments. Je n'ai donc pas pu utiliser .End(xlDown) pour rechercher la dernière ligne.

J'utilise donc la colonne "Qté" pour trouver la dernière ligne et copier le numéro de ligne.

J'ai la cellule où la plage commence, le numéro de la colonne et le numéro de la ligne où la plage doit se terminer. Cependant, je reçois une erreur "Application defined or object defined error".

La macro n'est pas terminée mais je ne peux pas avancer tant que je n'ai pas résolu ce problème. Voici ce que j'ai obtenu :

Option Explicit

Sub mergeworkbooks()

Dim path As String
Dim filename As String
Dim wbk As Workbook
Dim wks As Worksheet
Dim lastrow As Long
Dim lastcolumn As Long
Dim rangestart As String
Dim lastcol As Long
Dim rangefinish As String
Dim activesht As String

path = "D:\RubenBK\TEST\"
filename = Dir(path)

       Do While filename <> ""

              Set wbk = Workbooks.Open(path & filename)
              For Each wks In Worksheets
                    If Not wks.UsedRange.Find("PART NUMBER", lookat:=xlPart, MatchCase:=False) Is Nothing Then
                    wks.UsedRange.Find("PART NUMBER", lookat:=xlPart, MatchCase:=False).Activate
                    rangestart = wks.UsedRange.Find("PART NUMBER", lookat:=xlPart, MatchCase:=False).Address
                    lastcolumn = wks.UsedRange.Find("PART NUMBER", lookat:=xlPart, MatchCase:=False).Column
                    lastrow = wks.UsedRange.Find("qty", lookat:=xlPart, MatchCase:=False).End(xlDown).row
                    rangefinish = Cells(lastrow, lastcolumn).Address(xlA1)
                    activesht = ActiveSheet.Name

                    'AND HERE IS WHERE I GET THE ERROR, THE Range("rangestart: rangefinish") PART:

                    wbk.Sheets(activesht).Range("rangestart: rangefinish").Copy Destination:=ThisWorkbook.Sheets("Sheet1").Range("A10")
                    End If
                    wbk.Close
              Next
        filename = Dir
        Loop

End Sub

Une suggestion ?

1voto

Sruly Points 918

Votre problème est que vous avez votre départ en rang et finition de la gamme entre les guillemets.

Essayez de les déplacer en dehors des guillemets et cela devrait fonctionner.

wbk.Sheets(activesht).Range(rangestart & ":" & rangefinish).Copy

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X