Excel VBA : erreur 1004, définir plage de donnée variable
Bonjour, je cherche a faire une macro qui va lire une plage de données dans un classeurs excel et qui va les recopier dans un autre classeur excel. Mais j'ai l'erreur 1004 sur la ligne 86 . J'ai cherché sur internet et c'est parce que la plage de cellule que je recopie est trop importante. Cela veut donc dire que j'ai un problème dans ma délimitation de ma plage de cellule que je lis et que je recopie dans un autre classeur excel.
En effet, le but de ma macro et de lire les cellules qui sur l'axe X correspond à des colonnes spécifiques et en Y je veux qu'elle lise autant de ligne que la colonne B a de valeurs renseignées. Par exemple si dans cette colonne B j'ai 5 lignes remplies, je veux qu'elle s'arrête à la ligne 5 (je veux que ma macro lise jusqu'à la dernière ligne remplie de la colonne B).
Je pense avoir l'erreur sur les lignes 38 à 42, j'en ai peut être ailleurs aussi
Voici mon code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| Sub TEST1()
'
' TEST1 Macro
'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Décalaration des variables
Dim Wk1 As Workbook 'doc où il y a la macro'
Dim Wk2 As Workbook 'doc fiche de synthèse'
Dim Wk3 As Workbook 'doc qui devra être importer sur TWIMM'
Dim fiche_de_synthèse As String
Dim fichier_à_importer As String
Dim i, j, k As Integer 'i représente la variable du nombre d'élémeent en Y de la colonne CODE_SITE'
Dim dernligneWk2 As Double 'dernière ligne de la colonne code_site, attention si ajout de colonne avant il faut modifier le n° de la colonne ici'
Dim derncolWk2 As Double 'dernière colonne du tableau fiche de synthèse'
Dim nbr_col() As Integer
Dim fin() As String
Dim nom_col(4) As String 'dans le classeur fiche de synthèse'
Dim nom_colonne(4) As String 'dans le classeur IMPORT TWIMM'
Dim place_col(4) As Integer
Dim code_du_site As String
Dim nom_du_site As String
Dim lot_sur_le_site As String
'ici on indique où lire les chemins dans la feuille excel où il y a la macro'
Set Wk1 = ThisWorkbook
fiche_de_synthèse = Wk1.Sheets(1).Range("E3")
fichier_à_importer = Wk1.Sheets(1).Range("E6")
Set Wk2 = Workbooks.Open(fiche_de_synthèse)
'définition des bornes du tableau source'
With Wk2.Sheets("fiche de synthèse")
dernligneWk2 = Cells(Application.Rows.Count, 2).End(xlUp).Row 'prend la valeur de la dernière ligne de la colonne C (CODE_SITE)'
ReDim fin(dernligneWk2 - 1)
derncolWk2 = Cells(7, Application.Columns.Count).End(xlToLeft).Column 'prend la valeur de la dernière colonne de la ligne où il y a les titre (ligne 6)'
End With
For k = 1 To 50
k = k + 1
Next
'lecture des code_site'
For k = 1 To UBound(fin)
fin(k) = Wk2.Sheets("fiche de synthèse").Cells(k + 1, 2)
Next
'création des vecteurs noms colonnes, attention les noms ne doivent pas changer'
'dans le classeur FICHE DE SYNTHESE'
nom_col(1) = "CODE_SITE"
nom_col(2) = "NOM_S"
nom_col(3) = "LOTS"
'on les mettra toutes plus tard'
'création des vecteurs noms colonnes, attention les noms ne doivent pas changer'
'dans le classeur IMPORT TWIMM'
nom_colonne(1) = "CODE_SITE"
nom_colonne(2) = "NOM" 'il y a plusieurs colonnes différentes qui ont ce nom'
nom_colonne(3) = "LOTS"
'ici aussi on les mettra toutes plus tard'
'on commence la lecture dans le classeur fiche de synthèse (Wk2), en localisant les info à traiter par lecture du nom des colonnes'
For j = 1 To UBound(nom_col)
For i = 1 To derncolWk2
If UCase(nom_col(j)) Like "*" & UCase(Wk2.Sheets("fiche de synthèse").Cells(7, i)) & "*" And UCase(Wk2.Sheets("fiche de synthèse").Cells(7, i)) <> "" Then
place_col(j) = i
Exit For
Else
End If
Next
Next
Set Wk3 = Workbooks.Open(fichier_à_importer)
'on récupère les données du classeur fiche de synthèse'
For ligneWk2 = 7 To dernligneWk2
If fin(ligneWk2) = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(3)) Then
'on créer des variables temporaires dans la macro'
code_du_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(1))
nom_du_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(2))
lot_sur_le_site = Wk2.Sheets("fiche de synthèse").Cells(ligneWk2, place_col(3))
'on colle les valeurs qui sont stockées dans les variables temporaires dans le fichier à importer sur TWIMM'
If Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Or Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Or Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne()) = "" Then 'permet de recopier dans la feuille "SITES" dans la colonne "CODE_SITE"'
Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(1)).Value = code_du_site 'CODE_SITE'
Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(2)).Value = nom_du_site 'NOM_S qui correspond au nom du site attribué'
Wk3.Sheets("SITES").Cells(ligneWk3 + 1, nom_colonne(3)).Value = lot_sur_le_site 'LOTS qui correspond au lot sur le site'
End If
End If
Next
Wk2.Close
Wk3.Save
Wk3.Close
Application.ScreenUpdating = True
End Sub |