Filtres élaborés + copie de données à la suite [Résolu]

le_sablais

XLDnaute Nouveau
Bonjour à tous,

Me voilà pour ma première question sur ce forum, j'ai beaucoup navigué pour trouver une réponse et je n'ai pas trouvé la réponse attendue.
Voilà mon souci. Je travaille sur une base de données Excel comportant plusieurs onglets selon les clients de l'entreprise. Chaque semaine, je reçois une base de données excel avec diverses informations. J'ai réussi à utiliser les filtres élaborés pour dispacher ces données dans les différents onglets clients.
Cependant je recherche à pouvoir "ajouter" les nouvelles données que je reçois à la suite de celles déjà stockées dans les onglets.

Je me demandais donc si il n'y avait pas un moyen de modifier "CopyToRange:=Range("A4)" pour que ça se colle à la suite de ce qu'il y a déjà.

Sub filtre()
'
' filtre Macro
'
Sheets("Fauil1").Cells.AdvancedFilter Action:=xlFilterCopy, CriteriaRange _
:=Range("Feuil1!Criteria"), CopyToRange:=Range("A4"), Unique:=False
End Sub

Tout ça être peu être un peu vague,.

Merci d'avance à celles et ceux qui se pencheront sur ce fil. Vous trouverez ci-joint un fichier ressemblant à l'original pour mieux comprendre.

Thomas
 

Pièces jointes

  • filtre + copie.xlsm
    122.9 KB · Affichages: 45
Dernière édition:
G

Guest

Guest
Re : Filtres élaborés + copie de données à la suite

Bonjour et bienvenue sur le forum,

Vois dans le fichier ta macro modifiée(dans module 6) qui crée un feuille temporaire pour extraire les données et les recopier dans chaque feuille dont le nom commence par "Client".

La feuille temporaire est supprimée à la fin.

Code VB:
Sub Extraire_avec_filtres()
'
' Extraire_avec_filtres Macro
'
Dim ws As Worksheet, wStemp As Worksheet
Set wStemp = ThisWorkbook.Sheets.Add

Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Sheets

'Ne travailler que sur les feuilles dont le nom commence par "Client"
If ws.Name Like ("Client *") Then

'Préparation de la zone de critère dans la feuille temporaire
wStemp.Range("A1") = "Dossier"
wStemp.Range("A2") = ws.Name

'Entête des colonnes à extraire (laisser ligne 3 vide)
wStemp.Range("A4:L4") = Sheets("Extraction").Range("A1:L1")

'Extraction vers la feuille temporaire
Sheets("Extraction").Cells.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=wStemp.Range("A1:A2"), _
CopyToRange:=wStemp.Range("A4"), _
Unique:=False

'recopie des lignes extraites s'il y en a vers la feuille client
With wStemp.Range("A4").CurrentRegion
If .Rows.Count > 1 Then
.Offset(1).Resize(.Rows.Count - 1).Copy Destination:=ws.Range("A" & Rows.Count).End(xlUp)(2)

'Pour ne copier QUE les valeurs sans les formats ni autre formules commenter la ligne au-dessus
'et décommenter la ligne ci-dessous:
'ws.Range("A" & Rows.Count).End(xlUp)(2).Resize(.Rows.Count - 1, .Columns.Count).Value = .Offset(1).Resize(.Rows.Count - 1).Value


End If
.ClearContents
End With
End If
Next

Application.CutCopyMode = False

'Destruction de la feuille temporaire
Application.DisplayAlerts = False
wStemp.Delete
Application.DisplayAlerts = True

Application.ScreenUpdating = True

MsgBox "Les données ont bien été extraites vers les onglets clients"
End Sub





A+
 
Dernière modification par un modérateur:

le_sablais

XLDnaute Nouveau
Re : Filtres élaborés + copie de données à la suite

Bonjour, j'ai essayé de l'adapter sur mon fichier original, mais je me retrouve face à un souci de noms de feuilles.

En effet :
'Ne travailler que sur les feuilles dont le nom commence par "Client"
If ws.Name Like ("Client *") Then
Fonctionne si les feuilles se nomment "client 1" "client 2" etc.

Mais comment faire si les feuilles ont des noms vraiment différents ? ex : Dupont ; Durand ; Pierre ; Paul ; Jacques.

J'ai essayé de modifier en mettant
If ws.Name Like "Dupond" & "Pierre" & "Jacques" Then

Mais ça ne fonctionne pas...

Idées, commentaires ? :)
 
G

Guest

Guest
Re : Filtres élaborés + copie de données à la suite

Bonjour,

Deux exemples ci-dessous pour traiter ce genre de chose, un par inclusion des noms de feuilles à traiter et l'autre par exclusion des noms de feuille à ne pas traiter. Bien entendu, ne pas faire les deux.

Code:
Sub DirFeuilles()
    Dim ws As Worksheet
    Dim i As Integer
    With ThisWorkbook
        'Inclusion des feuilles qui seront traitées
        For Each ws In .Sheets(Array("Client 1", "Client 2", "Client 3", "Client 4"))
            Debug.Print ws.Name
        Next
        'Exclusion des feuilles qui ne seront pas traitées
        For i = 1 To ThisWorkbook.Sheets.Count
            If IsError(Application.Match(.Sheets(i).Name, Array("Bouton", "Bloquage", "Extraction", "Autres Clients", "Synthèse"), 0)) Then
                Debug.Print .Sheets(i).Name
            End If
        Next i
    End With
End Sub

A+
 

le_sablais

XLDnaute Nouveau
Re : Filtres élaborés + copie de données à la suite [Résolu]

Merci beaucoup Hasco, tout fonctionne !

Content d'être venu sur ce forum. Je vais essayer d'aider à mon tour si je trouve un fil de discussion qui correspond à mes capacités.
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 191
Membres
103 152
dernier inscrit
Karibu