Synchroniser 2 Feuilles dans fichiers différents - VB/VBA/VBS - Programmation
MarshPosté le 15-02-2019 à 12:44:18
Bonjour
Ne découvrant VBA que récemment, je sèche un peu sur le code ci-dessous que j'ai emprunté et légèrement transformé pour répondre à mon besoin. Le pb c'est que lorsque je lance cette macro, il me sort une erreur 91 sur la ligne en gras et soulignée. Je bloque vraiment sur le sujet, même en faisant une analyse ligne après ligne... Si une âme charitable traine dans les parages
Note: J'ai bien nommé "POINTEUR" la colonne qui m'intéresse.
Sub Macro1() Dim Cellule As Range Dim Acceptance As Workbook Dim LastLine As Integer Dim Tableau1() As Variant Dim Tableau2() As Variant Dim I As Integer Dim wbMyWb As Workbook Dim Nom_Fichier As Variant
' On cherche le numéro de la dernière ligne utilisée dans la colonne A LastLine = Cells(Rows.Count, "A" ).End(xlUp).Row
' On redimensionne les 2 tableaux de façon dynamique ReDim Tableau1(LastLine) ' On a besoin de stocker les valeurs de 10 colonnes ReDim Tableau2(LastLine, 10)
' On charge le tableau avec les valeurs de la colonne A For I = 2 To LastLine Tableau1(I) = Range("A" & Trim(Str(I))) Next I
' On ouvre le fichier excel2.xls et on lui donne le focus Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx" ) If Nom_Fichier <> False Then Workbooks.Open Filename:=Nom_Fichier End If 'Workbooks.Open Filename:="xxx.xlsx" Set Acceptance = ActiveWorkbook Acceptance.Activate
' On scanne la colonne B avec les valeurs contenues dans le tableau For I = 2 To LastLine Set Cellule = ActiveSheet.Range("POINTEUR" ).Find(Tableau1(I), lookat:=xlWhole) Tableau2(I, 1) = Cellule.Offset(0, 1).Value Tableau2(I, 2) = Cellule.Offset(0, 2).Value Tableau2(I, 3) = Cellule.Offset(0, 3).Value Tableau2(I, 4) = Cellule.Offset(0, 4).Value Tableau2(I, 5) = Cellule.Offset(0, 5).Value Tableau2(I, 6) = Cellule.Offset(0, 6).Value Tableau2(I, 7) = Cellule.Offset(0, 7).Value Tableau2(I, 8) = Cellule.Offset(0, 8).Value Tableau2(I, 9) = Cellule.Offset(0, 10).Value Tableau2(I, 10) = Cellule.Offset(0, 11).Value
Next I
'On referme le classeur Acceptance.xls dont on n'a plus besoin Acceptance.Close
' On recopie le contenu du tableau dans les colonnes Y, AA, AC, AD For I = 1 To LastLine Range("C" & Trim(Str(I))) = Tableau2(I, 1) Range("Z" & Trim(Str(I))) = Tableau2(I, 2) Range("AA" & Trim(Str(I))) = Tableau2(I, 3) Range("AB" & Trim(Str(I))) = Tableau2(I, 4) Range("AC" & Trim(Str(I))) = Tableau2(I, 5) Range("AD" & Trim(Str(I))) = Tableau2(I, 6) Range("AE" & Trim(Str(I))) = Tableau2(I, 7) Range("AF" & Trim(Str(I))) = Tableau2(I, 8) Range("AG" & Trim(Str(I))) = Tableau2(I, 9) Range("AH" & Trim(Str(I))) = Tableau2(I, 10)
Marsh Posté le 15-02-2019 à 12:44:18
Bonjour
Ne découvrant VBA que récemment, je sèche un peu sur le code ci-dessous que j'ai emprunté et légèrement transformé pour répondre à mon besoin.
Le pb c'est que lorsque je lance cette macro, il me sort une erreur 91 sur la ligne en gras et soulignée.
Je bloque vraiment sur le sujet, même en faisant une analyse ligne après ligne...
Si une âme charitable traine dans les parages
Note: J'ai bien nommé "POINTEUR" la colonne qui m'intéresse.
Sub Macro1()
Dim Cellule As Range
Dim Acceptance As Workbook
Dim LastLine As Integer
Dim Tableau1() As Variant
Dim Tableau2() As Variant
Dim I As Integer
Dim wbMyWb As Workbook
Dim Nom_Fichier As Variant
' On cherche le numéro de la dernière ligne utilisée dans la colonne A
LastLine = Cells(Rows.Count, "A" ).End(xlUp).Row
' On redimensionne les 2 tableaux de façon dynamique
ReDim Tableau1(LastLine)
' On a besoin de stocker les valeurs de 10 colonnes
ReDim Tableau2(LastLine, 10)
' On charge le tableau avec les valeurs de la colonne A
For I = 2 To LastLine
Tableau1(I) = Range("A" & Trim(Str(I)))
Next I
' On ouvre le fichier excel2.xls et on lui donne le focus
Nom_Fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx" )
If Nom_Fichier <> False Then
Workbooks.Open Filename:=Nom_Fichier
End If
'Workbooks.Open Filename:="xxx.xlsx"
Set Acceptance = ActiveWorkbook
Acceptance.Activate
' On scanne la colonne B avec les valeurs contenues dans le tableau
For I = 2 To LastLine
Set Cellule = ActiveSheet.Range("POINTEUR" ).Find(Tableau1(I), lookat:=xlWhole)
Tableau2(I, 1) = Cellule.Offset(0, 1).Value
Tableau2(I, 2) = Cellule.Offset(0, 2).Value
Tableau2(I, 3) = Cellule.Offset(0, 3).Value
Tableau2(I, 4) = Cellule.Offset(0, 4).Value
Tableau2(I, 5) = Cellule.Offset(0, 5).Value
Tableau2(I, 6) = Cellule.Offset(0, 6).Value
Tableau2(I, 7) = Cellule.Offset(0, 7).Value
Tableau2(I, 8) = Cellule.Offset(0, 8).Value
Tableau2(I, 9) = Cellule.Offset(0, 10).Value
Tableau2(I, 10) = Cellule.Offset(0, 11).Value
Next I
'On referme le classeur Acceptance.xls dont on n'a plus besoin
Acceptance.Close
' On recopie le contenu du tableau dans les colonnes Y, AA, AC, AD
For I = 1 To LastLine
Range("C" & Trim(Str(I))) = Tableau2(I, 1)
Range("Z" & Trim(Str(I))) = Tableau2(I, 2)
Range("AA" & Trim(Str(I))) = Tableau2(I, 3)
Range("AB" & Trim(Str(I))) = Tableau2(I, 4)
Range("AC" & Trim(Str(I))) = Tableau2(I, 5)
Range("AD" & Trim(Str(I))) = Tableau2(I, 6)
Range("AE" & Trim(Str(I))) = Tableau2(I, 7)
Range("AF" & Trim(Str(I))) = Tableau2(I, 8)
Range("AG" & Trim(Str(I))) = Tableau2(I, 9)
Range("AH" & Trim(Str(I))) = Tableau2(I, 10)
Next I
End Sub