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 645 fois - Téléchargée 536 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

artgile
Messages postés
61
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
26 juin 2017
-
Bonjour galaadspirit,

J'ai regardé hier soir ta question et j'ai eu envie d'essayer.
Donc voici mes commentaires:
- Concernant le tri tu le réalise déjà avec l'option liste.
- Concernant la création de feuille j'ai réalisé se code, et j'attire ton
attention, dans excel tu ne peu créer plus de 255 feuilles. Alors combien de nouveau nom????

Bon bref le code quoi: (ne pas oublier de créer un bouton de commande dans ta feuille générale)
Je l'ai crée sur office 2003 et testé avec office 2010 tous est OK.

Bon courage,JML

Option Explicit

Dim NomFeuille As String 'Nom d'une feuille
Dim NbFeuille As Integer 'Nombre totale de feuille dans le classeur
Dim NbNom As Long 'Nombre de Nom
Dim i As Long 'Indice de boucle
Dim j As Long 'Indice de boucle
Dim Nom As String 'Cellule contenant un Nom
Dim ArrTabNom() As String 'Tableau dynamique des noms. Le tableau serat à 2 dimensions
Private Sub CmdNouveauNom_Click()
'Calcul le nombre total de noms dans la colonne Nom.
i = 1 'Saute la ligne 1
Do
Nom = Worksheets(1).Range("A" & i + 1).Value
If Nom <> "" Then i = i + 1
Loop Until Nom = "" 'Arrête la boucle jusqu'à ce que la cellule soit vide

ReDim ArrTabNom(2, i) 'Création du tableau dynamique
NbNom = i - 1 'Retranche l'intitulé des colonnes, soit la ligne 1
NbFeuille = ActiveWorkbook.Worksheets.Count 'Retourne le nombre de feuuille dans le classeur

'Place tous les noms dans le tableau, puis met une chaine vide en face de chaque nom.
i = 0
Do
ArrTabNom(1, i) = Worksheets("feuille_depart").Range("A" & i + 2).Value
ArrTabNom(2, i) = ""
Nom = Worksheets(1).Range("A" & i + 2).Value
If Nom <> "" Then i = i + 1
Loop Until Nom = ""

'Compare le nom des feuilles avec la liste de Noms et place la valeur 1
' dans le tableau en face de chaque nom si existant.
For i = 2 To NbFeuille
NomFeuille = ActiveWorkbook.Worksheets(i).Name
For j = 0 To NbNom If ArrTabNom(1, j) NomFeuille Then ArrTabNom(2, j) "1"
Next j
Next i

'Création des nouvelles feuilles
For i = 0 To NbNom - 1
If ArrTabNom(2, i) = "" Then 'Si chaine vide alors nouveau nom
'Création d'une feuille en derniére position
j = Worksheets.Count 'indice de la dernier feuille crée
ActiveWorkbook.Sheets.Add after:=Worksheets(j)
'Donne le nouveau nom
j = Worksheets.Count 'indice de la dernier feuille crée
ActiveWorkbook.Worksheets(j).Name = ArrTabNom(1, i)
With Worksheets(j) 'renseigne la nouvelle feuille avec les données concernant le nouveau nom
.Range("A1").Value = Worksheets(1).Range("A1").Value 'place l'intitulé de colonne nom
.Range("B1").Value = Worksheets(1).Range("B1").Value 'place l'intitulé de colonne id opération
.Range("C1").Value = Worksheets(1).Range("C1").Value 'place l'intitulé de colonne Type d'opération
.Range("A2").Value = ArrTabNom(1, i)
.Range("B2").Value = Worksheets(1).Range("B" & i + 2).Value
.Range("C2").Value = Worksheets(1).Range("C" & i + 2).Value
End With
End If
Next i
'Revient à la feuille de départ
ActiveWorkbook.Worksheets(1).Activate
End Sub
galaadspirit
Messages postés
5
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
28 novembre 2010
-
Je te remercie beaucoup, je vais essayer ça cet après-midi je te tiendrai au courant.
Pour ce qui est des feuilles, il ne devrait pas y en avoir plus de 30.
galaadspirit
Messages postés
5
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
28 novembre 2010
-
j'ai testé, mais il y a un problème :

j'aurai voulu que quand il y a plusieurs fois le même nom il ajoute la ligne à la suite du tableau de la feuille qui porte ce nom
(de plus avec ton script s'il y a plusieurs occurrences du nom le script s'arrête avec l'erreur "deux feuilles ne peuvent pas avoir le même nom !")

dans mon exemple il y avait deux fois "dupond", j'aurai donc voulu avoir 3 feuilles dont une feuille qui s'appelle "dupond" présentée comme ceci :

nom id operation Type d'operation
dupond AF1 vente
dupond JU4 location

est-ce que tu peux faire quelque chose pour moi ?
artgile
Messages postés
61
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
26 juin 2017
-
Bonsoir,

Bigre! Par la Couenne des "gens bons", je viens de faire l'essai de mon script mais je n'est aucun message d'erreur???????

En revanche, si je comprend bien, je dois vérifier pour l'ensemble des noms et Id si il existe une feuille du même nom avec des nouveaux ID le concernant, puis d'ajouter l'information sur la dite feuille ou en créer une nouvelle.
J'ai peur de faire un script qui ressemble à une usine à gaz............
Si tu n'est pas pressé....Mais dans un premier temps il faudrait résoudre l'erreur en question.
Travail t-on avec le même fichier? Je n'ai aucun doublon de nom au niveau de mes feuilles.

J'attends la suite, Cordialement, JML
artgile
Messages postés
61
Date d'inscription
mercredi 20 janvier 2010
Statut
Membre
Dernière intervention
26 juin 2017
-
Re :(

Je crois comprendre. Je viens de faire l'essai avec une seule feuille, c'est à dire, avec la feuille de départ et avec une autre feuille excel standard. Et la effectivement bingo! l'erreur! Mais pas de doublon? Bon c'est déjà un début....
Si tu essaies avec ton fichier d'exemple, il n'y a pas de message d'erreur. Mais ta demande n'est pas honorée.

Donc retour à la case départ, j'ai du boulot...........

cordialement, JML

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.