• Initiateur de la discussion Initiateur de la discussion franzy51
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

franzy51

Guest
Bonjour j'ai un tableau xl avec des donnés noms prénoms année etc.
je souhaite recopier sur une nouvelle feuille les données année.
J'ai écrit ceci en vba, mais cela ne fonctionne pas
Code:
Private Sub Workbook_SheetActivate(ByVal o As Object)
    If o.Name = "Enfants 1 à 3 ans" Then
        Range("a:t").Clear
        With Sheets("listing")
            .[a:t].AutoFilter Field:=8, Criteria1:="2012"
            .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Sheets("Enfants 1 à 3 ans").[a1]
            .[a:t].AutoFilter
        End With
     Else
        If o.Name = "Enfants 1 à 3 ans" Then
        Range("a:t").Clear
        With Sheets("listing")
            .[a:t].AutoFilter Field:=8, Criteria1:="2013"
            .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Sheets("Enfants 1 à 3 ans").[a1]
            .[a:t].AutoFilter
        End With
        Else
            If o.Name = "Enfants 1 à 3 ans" Then
        Range("a:t").Clear
        With Sheets("listing")
            .[a:t].AutoFilter Field:=8, Criteria1:="2014"
            .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Sheets("Enfants 1 à 3 ans").[a1]
            .[a:t].AutoFilter
        End With
            End If: End If: End If
End Sub

Cela n'affiche que 2012 et pas 2013 et 2014.
Merci pour votre aide
 
Re : Copier des cellules

Bonjour,
Si tu souhaites, exporter des données en fonction de critères, je te suggère l'utilisation de la méthode AdvancedFilter de l'objet Range (Voir les filtres avancés d'excel)
Les filtres avancés d'excel sont basés sur une zone des données, une zone des critères et pour la copie, d'une zone d'exportation.

Exemple d'une formule placée dans la zone des critères
Code:
=ET(E2=""Ventes"",F2>2000)
Elle doit être en anglais pour le VBA

Code de la procédure
Code:
Sub ExportByAdvancedFilter_Exemple_1()
 ' http://philippe.tulliez.be/
 Const myFormula As String = "=AND(E2=""Ventes"",F2>2000)"
 Dim areaSource As Range, areaTarget As Range, areaCriteria As Range
 With ThisWorkbook
  Set areaSource = .Worksheets("Data").Range("A1").CurrentRegion
  Set areaTarget = .Worksheets("Export").Range("A1")
 End With
 ' Zone des critères à 2 colonnes après la zone des données
 With areaSource
  Set areaCriteria = .Offset(columnoffset:=.Columns.Count + 1).Resize(2, 1)
 End With
 ' Ecriture dans la zone des critères
 areaCriteria(1) = "_fn_": areaCriteria(2).Formula = myFormula
 ' Debug.Print "Source = " & areaSource.Address _
 '             & "Export = " & areaTarget.Address _
 '             & " Critère = " & areaCriteria.Address
 ' Suppression des cellules de la feuille cible
 areaTarget.Worksheet.Cells.Clear
 ' Exportation suivant les critères
 areaSource.AdvancedFilter xlFilterCopy, areaCriteria, areaTarget
 ' Suppression de la zone des critères
 areaCriteria.Clear
 ' Suppresion des références aux variables objets
 Set areaSource = Nothing: Set areaTarget = Nothing: Set areaCriteria = Nothing
End Sub

Illustrations des deux feuilles (Source et cible)

ExportByAdvancedFilter.jpg
 

Pièces jointes

  • ExportByAdvancedFilter.jpg
    ExportByAdvancedFilter.jpg
    58.4 KB · Affichages: 44
Re : Copier des cellules

Bonjour,

Une autre piste, avec un tableau de critères mais ne fonctionne qu'à partir d'Excel 2007 :
Code:
Private Sub Workbook_SheetActivate(ByVal Fe As Object)

    Dim Plage As Range
    Dim Tbl(1 To 3)

    If Fe.Name <> "Enfants 1 à 3 ans" Then Exit Sub

    Fe.Range("A:T").Clear

    Set Plage = Sheets("listing").Range("A:T")
    
    'tableau ce critères, fonctionne qu'à partir d'Excel 2007 !
    Tbl(1) = "2012": Tbl(2) = "2013": Tbl(3) = "2014"

    With Plage

        .AutoFilter 8, Tbl, xlFilterValues
        Sheets("listing").AutoFilter.Range.Copy Fe.Range("A1")
        .AutoFilter

    End With

End Sub
 
Re : Copier des cellules

Bonjour,

Comme ceci ?
Code:
Private Sub Workbook_SheetActivate(ByVal Fe As Object)

    Dim Plage As Range
    Dim Tbl(1 To 3)

    If Fe.Name <> "Enfants 1 à 3 ans" Then Exit Sub

    Fe.Range("A:T").Clear

    Set Plage = Sheets("listing").Range("A:T")
    
    'tableau ce critères, fonctionne qu'à partir d'Excel 2007 !
    Tbl(1) = "2012": Tbl(2) = "2013": Tbl(3) = "2014"

    With Plage

        .AutoFilter 8, Tbl, xlFilterValues
        Sheets("listing").AutoFilter.Range.Copy Fe.Range("A1")
        .AutoFilter

    End With
    
    'tri
    Fe.Sort.SortFields.Clear
    
    With Fe.Range("A1").CurrentRegion
    
        Fe.Sort.SortFields.Add .Range(.Columns(8).Cells(2), .Columns(8).Cells(.Rows.Count)), xlSortOnValues, xlAscending, xlSortNormal
        
    End With
    
    With Fe.Sort
    
        .SetRange Fe.Range("A1").CurrentRegion
        .Header = xlYes
        .Apply
        
    End With
    
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
642
Réponses
18
Affichages
987
Réponses
10
Affichages
630
Réponses
8
Affichages
618
Retour