Bonjour,
Fonction "clé sur porte" avec la méthode AdvancedFilter qui permet d'exporter les données suivant critères avec l'option d'ajouter les données à la suite de celles déjà exportées
Pour comprendre cette méthode, la lecture de ce tutoriel Les filtres avancés ou élaborés dans Excel est indispensable
Code de la fonction nommée CopyDataByAdvancedFilter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| Function CopyDataByAdvancedFilter(RngSource As Range, _
RngTarget As Range, _
RngCriteria As Range, _
Optional Append As Boolean) As Range
' Auteur : http://philippe.tulliez.be
' Exporte les données suivant les critères et renvoie un objet Range de la zone cible
' Arguments
' Rngsource ' Zone des données
' RngTarget ' Zone cible (là où les données doivent être exportées
' RngCriteria ' Zone des critères
' [Append] ' Si True ajoute les données à la suite des données de la zone RngTarget
Dim rngTargetInitial As Range
Set rngTargetInitial = RngTarget
If Append Then
' * Recalcule la zone cible déjà remplie
Set RngTarget = RngTarget.CurrentRegion
' ** Se positionne sur la ligne suivante
With RngTarget
Set RngTarget = .CurrentRegion.Offset(.Rows.Count).Resize(1)
End With
Else
RngTarget.Worksheet.Cells.Clear ' Efface les lignes éventuelles déjà présentes
End If
RngSource.AdvancedFilter xlFilterCopy, RngCriteria, RngTarget
' Efface la ligne de titre exportée
If Append Then RngTarget.Delete xlShiftUp
' Redéfini la zone cible
Set CopyDataByAdvancedFilter = rngTargetInitial.CurrentRegion
' Fin de programme
Set rngTargetInitial = Nothing
End Function |
Dans les exemples qui suivent les zones source, cible et critères sont nommées (Gestionnaire des noms)
Exemple de son utilisation (comme un Sub)
Exemple avec nouvelle copie (Efface les données précédentes)
CopyDataByAdvancedFilter Range("areaData"), Range("areaTarget"), Range("areaCriteria")
Exemple avec copie à la suite des données déjà présentes
CopyDataByAdvancedFilter Range("areaData"), Range("areaTarget"), Range("areaCriteria"), True
Exemple de son utilisation (comme un Function)
MsgBox CopyDataByAdvancedFilter(Range("areaData"), Range("areaTarget"), Range("areaCriteria"), True).Address
[EDIT]
Extrait de la liste des cellules nommées
areaCriteria =BD!$J$1:$J$2
areaData =BD!$A$1:$H$31
areaTarget =Cible!$A$1
Partager