XL 2016 Copier une feuille avec une condition de valeur dans une colonne

Dadi147

XLDnaute Occasionnel
Copier une feuille Excel avec une condition de valeur dans une colonne et filtrer les données dans un tableau

1.png
 

Pièces jointes

  • A.png
    A.png
    24.2 KB · Affichages: 19
  • B.png
    B.png
    22.3 KB · Affichages: 18
  • C.png
    C.png
    23.8 KB · Affichages: 18
  • D.png
    D.png
    26.7 KB · Affichages: 18
  • test01.xlsm
    89.6 KB · Affichages: 4

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro :
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
Edit : bonjour JHA.
 

Pièces jointes

  • test01.xlsm
    21.2 KB · Affichages: 5
Dernière édition:

Dadi147

XLDnaute Occasionnel
Voyez le fichier joint et cette macro :
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
Edit : bonjour JHA.
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 cellule

J'avais précédemment essayé de créer un code, mais je n'ai pas réussi à copier les données sur chaque feuille
 

Pièces jointes

  • test2.xlsm
    49 KB · Affichages: 5

job75

XLDnaute Barbatruc
J'espère que vous vous rendez compte que votre fichier est bien différent de celui du post #1.

Les cellules fusionnées du tableau A30:S34 posaient problème mais je m'en suis sorti en copiant les formats de la 1ère ligne vers le bas.

Par ailleurs j'ai ajouté ce code dans ThisWorkbook :
VB:
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
pour que les feuilles se mettent à jour quand on les active.
 

Pièces jointes

  • test2.xlsm
    59.8 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
314 486
Messages
2 110 115
Membres
110 672
dernier inscrit
CHACHALUBAN