Bonsoir Jmdetoulouse,
Tu trouveras une proposition en P.J.
Voici ce que j'ai fait :
- Dans l'onglet "Feuil1" du classeur 'Source', j'ai ajouté une cellule nommée en G13 qui contient le nom complet du classeur cible 'AM' et un bouton pour effectuer sa recherche :
- J'ai aménagé le code de la procédure 'Worksheet_Change' pour déclencher le remplissage du classeur cible avec la macro 'CopieVersAM'.
- J'ai ajouté le module 'GVS' contenant la macro 'CopieVerAM' :
Sub CopieVersAM(zRange As Range)
Const cColSource = "A;B;C;D;E;F;G;H;I;J;K;L;M;N"
Const cColCible = "C;D;E;F;G;H;I;J;K;L;M;N;O;P"
Dim oWBCible As Workbook
Dim oSheetCible As Worksheet
Dim oSheetSource As Worksheet
Dim oCell As Range
Dim oFS As Object
Dim aColSource() As String
Dim aColCible() As String
Dim lRowSource As Long, lRowCible As Long
Dim sWBName As String
Dim Name() As String
Dim i As Integer
sWBName = ThisWorkbook.Names("ClasseurAM").RefersToRange.Value
Set oFS = CreateObject("Scripting.FileSystemObject")
If Not oFS.FileExists(sWBName) Then
MsgBox "Le classeur cible '" & sWBName & "' n'existe pas!", vbCritical, "Traitement impossible"
Exit Sub
End If
On Error Resume Next
Set oWBCible = Application.Workbooks(sWBName)
If oWBCible Is Nothing Then
Name = Split(sWBName, "\")
Set oWBCible = Application.Workbooks.Open(sWBName)
Windows(Name(UBound(Name()))).Visible = False
End If
On Error GoTo 0
aColSource = Split(cColSource, ";")
aColCible = Split(cColCible, ";")
Set oSheetCible = oWBCible.Worksheets("Données")
'Recupération de la ligne modifiée dans la source
lRowSource = zRange.Row
'Recherche de la dernière ligne renseignée dans la feuille cible
Set oCell = oSheetCible.Cells(oSheetCible.Rows.Count, 11).End(xlUp)
lRowCible = oCell.Row
lRowCible = lRowCible + 1
'On recopie les cellules une à une
For i = 0 To UBound(aColCible)
oSheetCible.Range(aColCible(i) & CStr(lRowCible)).Value = zRange.Worksheet.Range(aColSource(i) & CStr(lRowSource)).Value
Next
oWBCible.Save
oWBCible.Close True
End Sub
Enfin, j'ai ajouté le code suivant dans le module 'Thisworkbook' du classeur 'AM' :
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Save
ActiveWorkbook.Saved = True
End Sub
Private Sub Workbook_Open()
Dim sWBName As String
Dim Name() As String
sWBName = ThisWorkbook.Name
Name = Split(sWBName, "\")
Windows(Name(UBound(Name()))).Visible = True
End Sub
Pour que tout ça fonctionne, tu dois d'abord remplir toutes les colonnes du classeur 'Source' sauf la colonne "I" que tu dois remplir en dernier. En espérant avoir bien compris ta demande...
Allez le Stade Toulousain !