XL 2010 Créer des onglets selon les infos filtrées d'une colonne

deps

XLDnaute Junior
Bonjour

Dans le fichier joint, j ai une feuille "Recap" avec en colonne L une listes d"infos

Je souhaiterais qu'une macro crée autant d'onglets (similaires à la feuille "masque" ) qu'il y a d'infos différentes en colonne L de la feuille récap.
Le nom de l'onglet étant celui de l'info de la colonne L

dans l'exemple 5 onglets à créer car 5 infos différentes
BENJAMINS FILLE ETABLISSEMENT
BENJAMINS GARCON ETABLISSEMENT
CADETS GARCON ETABLISSEMENT
LYCEES FILLE ANIMATION
LYCEES GARCON ANIMATION


puis copier -coller les lignes de la feuille "Recap" dans la feuille correspondante

Un colistier aurait-il une solution vba?
merci
Deps
 

Pièces jointes

  • EXPORT-CATEGORIE.xlsm
    20.5 KB · Affichages: 35

deps

XLDnaute Junior
Bonjour belkacem_64, chris401, forum

merci pour vos solutions.

Celle de chris401 est plus complète car elle transfère les données de recap vers les feuilles créées
Cependant si je clic une 2e fois sur le bouton création, il y a une erreur 1004.
Je suppose que le vidage des feuilles doit certainement pas se faire et il y a un conflit de nom.
La macro pourrait elle vider avant de tourner ?

Dans les feuilles créées :
en D2 , serait il possible d'y coller B3 de la feuille récap ?
en D4, serait il possible d'y coller le nom de l'onglet ?

merci pour votre aide.
Cordialement
Deps
 

deps

XLDnaute Junior
Rebonjour

j'ai voulu numéroter les lignes des feuilles créées.
j'ai ajouté cette partie de code (Call numerote_ligne) ci dessous
ainsi que la macro numerote_ligne
mais la numérotation ne se fait pas
Qu'ai je oublié ?

merci
Deps


Code:
'Copie données
For i = 5 To recap.Range("B65000").End(xlUp).Row
With Worksheets(recap.Cells(i, 12).Value)
.Range("D2") = recap.Cells(i, 2).Value
.Range("B65000").End(xlUp).Offset(1) = recap.Cells(i, 7).Value
.Range("C65000").End(xlUp).Offset(1) = recap.Cells(i, 3).Value
.Range("D65000").End(xlUp).Offset(1) = recap.Cells(i, 14).Value

Call numerote_ligne

End With
Next i
' Mettre la date et l'heure de création
      'Range(" B1") = Now
    
recap.Activate

Application.ScreenUpdating = True
End Sub

Sub numerote_ligne()
'Numérote les lignes non vides en colonne A

'on commence l'incrémentation au numéro 1
num = 1

'a partir de la ligne n°7 jusque la dernière non vide
   For N = 7 To Range("B" & Rows.Count).End(xlUp).Row
     'si la cellule de la colonne B est vide
     If Range("B" & N) <> "" Then 'alors
        Range("A" & N) = num   'on numérote la colonne A
        num = num + 1 'on ajoute 1 à chaque n°
     End If
  If Range("B" & N) = "" Then Range("A" & N) = "" 'si c'est vide, alors vide
Next
End Sub
 

Chris401

XLDnaute Accro
Par rapport à ta dernière demande, j'ai préparé une MFC dans la feuille Modèle
Sur la colonne A (jusqu'à la ligne 50) les chiffres sont en place en police blanche. Ils seront affichés dans les feuilles crées s'il y a une valeur en Bx
 

Pièces jointes

  • EXPORT-CATEGORIE-1.xlsm
    36.8 KB · Affichages: 30

deps

XLDnaute Junior
Salut

Si j'ai bien compris tu as utilisé ce code
Code:
.Range("A65000").End(xlUp).Offset(1) = .Range("A65000").End(xlUp).Offset(1).Row - 6

c'est à dire que tu cherches le n° de la ligne et comme la 1e ligne commence en 7e ligne, 7-1=6
tu enlèves 6 au n° de ligne

ai-je bien compris ?

mais que veut dire offset?

merci
Deps
 

Chris401

XLDnaute Accro
Re

Offset = décaler
Offset(ligne,colonne)
Offset(1) équivaut à écrire Offset(1,0) ==> décaler la cellule d'1 ligne et de 0 colonne

.Range("A65000").End(xlUp).Row donne le numéro de la dernière ligne non vide.
.Range("A65000").End(xlUp).Offset(1).Row décale d'1 ligne afin d'avoir la 1ère cellule vide

Pour la 1ère cellule vide il s'agira de la ligne 7 ; comme on veut obtenir le chiffre 1, on enlève 6
Quand la cellule 7 sera remplie, la 1ère cellule vide sera la 8; comme on veut obtenir le chiffre 2, on enlève 6
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 691
Membres
103 641
dernier inscrit
anouarkecita2