Private Sub Worksheet_Change(ByVal Target As Range)
Dim choix As Range, deb As Range, nom$, w As Worksheet, i&, x$, j&
Set choix = [C5] 'à adapter éventuellement
Set deb = [A18] 'à adapter éventuellement
nom = CStr(choix)
If Intersect(Target, choix) Is Nothing Or nom = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
Set w = Sheets(nom)
On Error GoTo 0
'---création de la feuille---
If w Is Nothing Then
Me.Move Before:=Sheets(1)
Set w = Sheets.Add(After:=Me)
w.Name = nom
For i = 2 To Sheets.Count - 1
x = Sheets(i).Name
For j = i + 1 To Sheets.Count
If Sheets(j).Name < x Then Sheets(j).Move Before:=Sheets(i) 'classement
Next j, i
End If
'---copies---
Cells.Copy w.[A1] 'copier-coller
w.Range(choix(1, 0).Address).Resize(, 2).Clear
w.Range(deb.Address).CurrentRegion.Clear
choix(0) = "NAME"
deb.CurrentRegion.AdvancedFilter xlFilterCopy, choix(0).Resize(2), w.Range(deb.Address) 'copie le filtre avancé
choix(0) = ""
With w.UsedRange: End With 'actualise la barre de défilement verticale
w.Activate
End Sub
Merci pour votre aide. Le problème est que lorsque je copie le code dans le fichier d'origine, j'obtiens un message d'erreur malgré le changement de numéro de celluleVoyez le fichier joint et cette macro :
Edit : bonjour JHA.VB:Private Sub Worksheet_Change(ByVal Target As Range) Dim choix As Range, deb As Range, nom$, w As Worksheet, i&, x$, j& Set choix = [C5] 'à adapter éventuellement Set deb = [A18] 'à adapter éventuellement nom = CStr(choix) If Intersect(Target, choix) Is Nothing Or nom = "" Then Exit Sub Application.ScreenUpdating = False On Error Resume Next Set w = Sheets(nom) On Error GoTo 0 '---création de la feuille--- If w Is Nothing Then Me.Move Before:=Sheets(1) Set w = Sheets.Add(After:=Me) w.Name = nom For i = 2 To Sheets.Count - 1 x = Sheets(i).Name For j = i + 1 To Sheets.Count If Sheets(j).Name < x Then Sheets(j).Move Before:=Sheets(i) 'classement Next j, i End If '---copies--- Cells.Copy w.[A1] 'copier-coller w.Range(choix(1, 0).Address).Resize(, 2).Clear w.Range(deb.Address).CurrentRegion.Clear choix(0) = "NAME" deb.CurrentRegion.AdvancedFilter xlFilterCopy, choix(0).Resize(2), w.Range(deb.Address) 'copie le filtre avancé choix(0) = "" With w.UsedRange: End With 'actualise la barre de défilement verticale w.Activate End Sub
C'est à vous d'adapter, j'en ai assez fait.Le problème est que lorsque je copie le code dans le fichier d'origine, j'obtiens un message d'erreur
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim feuille
feuille = Array("AA", "AB", "C", "D") 'liste des feuilles à traiter
If IsNumeric(Application.Match(Sh.Name, feuille, 0)) Then Sheets("main").[B27] = Sh.Name 'lance la macro Worksheet_Change
End Sub