Macro VBA & création synthèse de plusieurs feuilles Excel
Bonjour à tous !
Je suis toute nouvelle sur ce forum (j'ai même fait une petite présentation dans la partie appropriée) et dans le monde du langage VBA également.
Alors, je vous expose ma problématique : j'ai un classeur Excel constitué de plusieurs feuilles. Toutes ces feuilles ont la même trame, il s'agit d'une analyse de risques par domaines, chaque feuille concerne un domaine particulier. Je souhaite faire une feuille de synthèse (appelée "Synthèse" forcément) qui reprendrait les lignes "prioritaires".
J'ai donc écrit un petit bout de macro qui fonctionne jusqu'à une certain point. En fait, c'est le processus du "Copier-Coller" les lignes intéressantes que je ne maîtrise pas. Je ne récupère que la toute dernière ligne souhaitée (au lieu d'avoir toutes les lignes les unes en dessous des autres) et j'ai l'impression que je copie-colle à chaque fois sur la même ligne. J'ai pourtant essayer de déclarer une variable définie comme la première ligne vide sur laquelle écrire.
J'ai vérifié que ma macro allait bien lire toutes les lignes de toutes les feuilles et ça semble bien fonctionner. Donc c'est vraiment dans cette dernière partie que j'ai une erreur.
Auriez-vous un petit conseil à me donner s'il-vous-plaît ? Si besoin, je peux vous fournir les approximativement 5 lignes de code qui composent ma macro ^^
Merci d'avance.
Praline.
AdvancedFilter - Exportation des données suivant critères avec possibilité d'ajouter les lignes exportées
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
Code:
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)
Code:
CopyDataByAdvancedFilter Range("areaData"), Range("areaTarget"), Range("areaCriteria")
Exemple avec copie à la suite des données déjà présentes
Code:
CopyDataByAdvancedFilter Range("areaData"), Range("areaTarget"), Range("areaCriteria"), True
Exemple de son utilisation (comme un Function)
Code:
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