Selections dans une feuille excel puis création de nouvelles feuilles excel avec les données sélectionnées

Soyez le premier à donner votre avis sur cette source.

Vue 4 743 fois - Téléchargée 543 fois

Description

Bonjour je souhaite faire un tri d'une feuille Excel sur 2 critères ("nom", "id operation"),
puis pour chaque valeur unique d'une case de la colonne "nom",
créer des nouvelles feuilles appelées "[nom_sélectionné].xls" qui reprennent l'ensemble des lignes où un nom unique apparaît
(voir fichier joint)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
12
Date d'inscription
mercredi 4 février 2004
Statut
Membre
Dernière intervention
3 janvier 2011

> dans excel tu ne peu créer plus de 255 feuilles
La limitation du nombre de feuille n'est pas de 255. La limitation dépend de la mémoire disponible: http://office.microsoft.com/fr-ca/excel-help/limites-et-specifications-excel-HP005199291.aspx
Messages postés
5
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
28 novembre 2010

merci pour les précisions.
"attention aux espaces en fin de noms identique, cela est considéré comme des noms différents. Si le besoin s'en fait sentir je pourrais ajouter une petite commande." => pas de pb je ferai attention.
En tout cas joli travail
Messages postés
61
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
26 juin 2017

Bonjour, tout le monde est content 8D

Complément d'informations :

- Dans la première feuille (feuille_depart), j'utilise la dernière colonne pour ranger le résultat de test des lignes traitées. Elle comporte une suite de "1", NE PAS DÉTRUIRE CETTE COLONNE au risque de te trouver avec des doublons dans le contenu des autres feuilles. Ainsi, dans le cas ou tu voudrais supprimer un nom dans ton tableau, supprime la ligne complètement.

- Ne pas créer de ligne vide dans le tableau, car je teste la fin de la liste des noms sur la première ligne vide trouvée. Ce qui par ailleurs pourrait servir pour créer deux tableaux. Un tableau dont les noms sont traités et un autre en cours de saisie.

- Rappel, attention aux espaces en fin de noms identique, cela est considéré comme des noms différents. Si le besoin s'en fait sentir je pourrais ajouter une petite commande.

- Si l'on supprime un nom ou plusieurs occurrences du même nom, dans le tableau principal, les feuilles crées sous ces noms ne sont pas effacées.

Voilà, je crois que j'ai tout dit, à peu de chose près.
Pour le plaisir je essayer de réduire le code.

Bonne journée et Cordialement, JML
Messages postés
5
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
28 novembre 2010

Nom d'un petit bonhomme, tu as assuré, le résultat est parfait !
Très sincèrement MERCI =)
Messages postés
61
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
26 juin 2017

Bonsoir Galaadspirit,

Après deux jours ou je croyais ne pas en finir, j'ai enfin ceci :
(à toi de tester et dit moi si cela est ok)

Ps: j'ai remarqué, accidentellement, que 2 feuilles peuvent porter le même nom. Il suffit pour cela
d'avoir un espace à la fin d'un des deux noms lors de la saisie -:(

Cordialement, JML
'===============================================================
Option Explicit
Dim NbF As Long 'Nombre de Feuille dans le classeur
Dim NL As Long 'Numéros de Ligne dans la feuille depart
Dim FT As Long 'Feuille Trouvée
Dim i As Long 'Indice de boucle
Dim j As Long 'Indice de boucle
Dim k As Long 'Indice de boucle
Dim NF As String 'Nom d'une feuille
Dim Nom As String 'Contenu de la cellule Nom
'=================================================================
Private Sub CmdTraitement_Click()
NL = 1 'Calcul le nombre total de ligne renseignée.
Do
Nom = Worksheets(1).Range("A" & NL + 1).Value
If Nom <> "" Then NL = NL + 1
Loop Until Nom = "" 'Arrête la boucle jusqu'à ce que la cellule soit vide
NbF = Worksheets.Count 'Retourne le nombre de feuuille du classeur
If Worksheets.Count = 1 Then Creation_première_feuille 'Si uniquement la feuille_depart au démarrage
Call Creation
Worksheets(1).Activate 'Revient à la feuille de départ
End Sub
'=================================================================
Private Sub Creation()
For i = 2 To NbF 'Indice de la feuille
NF = Worksheets(i).Name 'Nom de la feuille
For j = 2 To NL 'numéros de ligne
Nom = Worksheets(1).Range("A" & j).Value If NF Nom And Worksheets(1).Range("IV" & j).Value "" Then
Call Complete_feuille(i, j)
ElseIf NF <> Nom And Worksheets(1).Range("IV" & j).Value = "" Then
FT = 0
For k = 2 To Worksheets.Count
If Nom = Worksheets(k).Name Then
Call Complete_feuille(k, j)
FT = 1
End If
Next k
If FT = 0 Then
Worksheets(1).Range("IV" & j).Value = 1 'valeurs de contrôles
Call Nouvelle_Feuille(Nom)
Call Premiere_ligne_d_ecriture(j)
End If
End If
Next j
Next i
End Sub
'=================================================================
Private Sub Nouvelle_Feuille(Nm As String)
Sheets.Add after:=Worksheets(Worksheets.Count) 'Création de la feuille
Worksheets(Worksheets.Count).Name = Nm '(nom)Renomme la feuille
End Sub
'=================================================================
Private Sub Premiere_ligne_d_ecriture(IDL As Long)
With Worksheets(Worksheets.Count)
'création de l'entête des colonnes de la nouvelle feuille
.Range("A1").Value = Worksheets(1).Range("A1").Value
.Range("B1").Value = Worksheets(1).Range("B1").Value
.Range("C1").Value = Worksheets(1).Range("C1").Value
'Renseigne la nouvelle feuille de (Nom, Id, Type)
.Range("A2").Value = Worksheets(1).Range("A" & IDL).Value
.Range("B2").Value = Worksheets(1).Range("B" & IDL).Value
.Range("C2").Value = Worksheets(1).Range("C" & IDL).Value
End With
End Sub
'=================================================================
Sub Complete_feuille(IdF As Long, N°Ligne As Long)
'Ajout d'informations sur une feuille existante
Dim NLFA As Long 'Numéros de Ligne de la Feuille Actuelle
Dim NLA As String 'Nom de la Ligne Actuelle
NLFA = 1
Do 'Calcul le nombre de ligne existante dans la feuille déjà crée
NLA = Worksheets(IdF).Range("A" & NLFA + 1).Value
If NLA <> "" Then NLFA = NLFA + 1
Loop Until NLA = "" 'Arrête la boucle jusqu'à ce que la cellule soit vide
NLFA = NLFA + 1
With Worksheets(IdF) 'i
'Renseigne la feuille (Nom, Id, Type)
.Range("A" & NLFA).Value = Worksheets(1).Range("A" & N°Ligne).Value
.Range("B" & NLFA).Value = Worksheets(1).Range("B" & N°Ligne).Value
.Range("C" & NLFA).Value = Worksheets(1).Range("C" & N°Ligne).Value
End With
Worksheets(1).Range("IV" & N°Ligne).Value = 1 'valeurs de contrôles
End Sub
'=================================================================
Private Sub Creation_première_feuille()
Worksheets(1).Range("IV" & 1).Value = 1
Worksheets(1).Range("IV" & 2).Value = 1
'Création d'une feuille au démarrage
Sheets.Add after:=Worksheets(1) 'Création de la feuille
Worksheets(2).Name = Worksheets(1).Range("A2").Value
With Worksheets(2)
'création de l'entête des colonnes de la nouvelle feuille
.Range("A1").Value = Worksheets(1).Range("A1").Value
.Range("B1").Value = Worksheets(1).Range("B1").Value
.Range("C1").Value = Worksheets(1).Range("C1").Value
'Renseigne la feuille (Nom, Id, Type)
.Range("A2").Value = Worksheets(1).Range("A2").Value
.Range("B2").Value = Worksheets(1).Range("B2").Value
.Range("C2").Value = Worksheets(1).Range("C2").Value
End With
Worksheets(1).Activate 'Revient à la feuille de départ
NbF = Worksheets.Count 'Retourne le nombre de feuuille dans le classeur
End Sub
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.