Pour passer d'une action automatique à une action sur un bouton, il faut virer
Citation :
Private Sub Worksheet_Change(ByVal Target As Range)
|
et le remplacer par une procédure que tu nommes comme tu veux
Citation :
Sub RecopieAutomatique()
|
Ensuite, la variable "Target" n'est plus utilisable, puisqu'elle était activée par modification de la cellule et n'avait d'effet que sur la ligne en cours. Il faut maintenant boucler sur toutes les lignes, d'où la boucle "for" et l'utilisation de la variable "i" pour passer d'une ligne à l'autre.
Il y a d'autres soucis à régler dans l'exécution du code par la suite, n'hésite pas à demander si y'a un truc que tu ne comprends pas.
Ca donne ça:
Citation :
Option Explicit
Sub RecopieAutomatique()
Dim f As Worksheet, fd As Worksheet
Dim NomFeuille As String
Dim i As Integer
For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
Set fd = ActiveSheet
If Not Intersect(Range("D" & i), Range("D2:D" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
On Error GoTo NlleF
Set f = Sheets(Range("D" & i).Value)
On Error GoTo 0
fd.Range(fd.Cells(Range("D" & i).Row, "A" ), fd.Cells(Range("D" & i).Row, "C" )).Copy f.Range("A" & Rows.Count).End(xlUp)(2)
GoTo fin
End If
NlleF:
NomFeuille = Range("D" & i)
If Range("D" & i).Value = "" Then GoTo fin
Sheets.Add.Move After:=Sheets(Sheets.Count)
ActiveSheet.Name = NomFeuille
fd.Range("A1:C1" ).Copy ActiveSheet.Range("A1" )
fd.Activate
Resume
fin:
Next i
End Sub
|
Tu peux soit appeler la macro classiquement avec l'onglet développeur, soit créer un bouton sur ta page (onglet développeur/insérer/bouton) et lui affecter la macro.
Bonne journée.
Message édité par milfeuilles le 09-10-2017 à 09:26:49