Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copie lignes sous condition

  • Initiateur de la discussion Initiateur de la discussion patoq
  • 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 !

patoq

XLDnaute Occasionnel
Bonjour tout le monde

Je dois copier des lignes dans des onglets crées justement avec des conditions.

Je m'explique :

J'ai une feuille data et je dois créer des onglets avec un filtre sur une colonne (M).
Exemple créer un onglet STJ qui regroupera toutes les lignes STJ de cette colonne ,de meme avec STR.

En un mot, copier toutes les lignes dans des onglets crées garace à ce filtre.
J'ai une macro qui ne marche pas;peut être est ce du au format de cellules, je ne sais pas.

Si je ne suis pas clair ,dites le et j'éclaircirait

Merci d'avance ,je pense que les experts vont trouver.

Cordialement
 

Pièces jointes

Re : Copie lignes sous condition

Bonjour patoq, le forum,

pour réaliser cela j'utilise la fonction filtre élaboré, qui est très puissante.
Voilà comment je procède pour réaliser ma macro:
1/ filtre élaboré sans critère et sans doublon qui crée tous les filtres possibles
2/ boucle 1 pour créer les onglets par filtre
3/ application du filtre sur l'onglet avec critères

Le filtre élaboré sans critère et sans doublon s'écrit pour une base de données de A1 à S1000:
VB:
Range("a1:s1000").AdvancedFilter xlFilterCopy, , Range("q1"), True

le critère viendra s'insérer entre les 2 virgules consécutives!

En espérant t'avoir aidé!

Bon courage

Edit:

Voici le code complet, testé et qui marche chez moi (il faut juste que tu mettes un titre en AC1 sinon ça ne marchera pas!):
VB:
Sub titiborregan()
With Sheets(1)
.Range("af1") = .Range("ac1")
.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, , .Range("af1"), True

For i = 2 To .Range("af1").End(xlDown).Row
filtre = .Cells(i, 32)
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = filtre
.Rows(1).Copy Sheets(filtre).Range("a1")
Sheets(filtre).Range("af2") = filtre
.Range("a1").CurrentRegion.AdvancedFilter xlFilterCopy, Sheets(filtre).Range("af1:af2"), Sheets(filtre).Range("a1:ac1"), False

Next

End With
End Sub

Cela à l'avantage d'être dynamique si tu venais à créer de nouveaux filtres qui deviendraient de nouveaux onglets...
Par contre, si tu le fais plusieurs fois de suite, ça bug car les feuilles auront le même nom...
Insère en début de macro de quoi supprimer les feuilles après la feuille 1
VB:
for n= sheets.count to 2 step-1
application.displayalerts=false
sheets(n).delete
application.displayalerts=true
next
 
Dernière édition:
- 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

Discussions similaires

Réponses
5
Affichages
701
Réponses
7
Affichages
281
Réponses
2
Affichages
285
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…