Créer feuille selon valeur [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013
-
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013
-
Bonjour,

J'ai un classeur sous la forme suivante :

ColonneA // ColonneB // ColonneC // ...
Valeur 1 // Sous-Valeur1 / Sous-Sous-Valeur1
Valeur 1 // Sous-Valeur2 / Sous-Sous-Valeur2
Valeur 1 // Sous-Valeur3 / Sous-Sous-Valeur3
Valeur 1 // Sous-Valeur4 / Sous-Sous-Valeur4
Valeur 2 // Sous-Valeur5 / Sous-Sous-Valeur5
Valeur 2 // Sous-Valeur6 / Sous-Sous-Valeur6
Valeur 2 // Sous-Valeur7 / Sous-Sous-Valeur7
Valeur 2 // Sous-Valeur8 / Sous-Sous-Valeur8
Valeur 3 // Sous-Valeur9 / Sous-Sous-Valeur9
Valeur 3 // Sous-Valeur10 / Sous-Sous-Valeur10
Valeur 3 // Sous-Valeur11 / Sous-Sous-Valeur11
Valeur 3 // Sous-Valeur12 / Sous-Sous-Valeur12
...etc

et je voudrai enregistrer un classeur par valeurs avec les sous-valeurs et sous-sous-valeurs correspondante.

Ex :
Classeur "valeur 1"
Valeur 1 // Sous-Valeur1 / Sous-Sous-Valeur1
Valeur 1 // Sous-Valeur2 / Sous-Sous-Valeur2
Valeur 1 // Sous-Valeur3 / Sous-Sous-Valeur3
Valeur 1 // Sous-Valeur4 / Sous-Sous-Valeur4

Classeur "valeur 2"
Valeur 2 // Sous-Valeur5 / Sous-Sous-Valeur5
Valeur 2 // Sous-Valeur6 / Sous-Sous-Valeur6
Valeur 2 // Sous-Valeur7 / Sous-Sous-Valeur7
Valeur 2 // Sous-Valeur8 / Sous-Sous-Valeur8

...etc

Je ne vois pas trop par où commencer.

Merci de votre aide
--

12 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Je suppose que tu veux dire que, dans ton premier classeur, tu as une feuille avec les données précisées en ton premier point. Une Feuille n'est pas un classeur !

Cet "amalgame" entre le terme "classeur" et "Feuille" induit du coup ,un sacré doute sur ce que tu veux réellement créer ! Sont-ce vraiment des classeurs (et dans un tel cas : sur une feuille nommée comment) ? Sont-ce des Feuilles d'autre classeurs ? Sont-ce d"es feuilles du même classeur ?
La terminologie est, tu le vois, très importante ! Elle est même le début de la réflexion ...
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

Effectivement, j'était parti sur une autre idée au début (créer des feuilles au sein d'un même classeur puis enregistrer chaque feuilles).
Mais.....
J'ai bien un classeur avec une seule feuille au début que je souhaite décliner en N classeurs (correspondant aux N valeurs) à enregistrer dans un même répertoire.
Le nombre et le nom des valeurs peut varier
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Et ?
Relis-moi, s'il te plait :
"Sont-ce vraiment des classeurs (et dans un tel cas : sur une feuille nommée comment) ? "
on, ne peut saisir que sur une plage d'un objet feuille d'un objet classeur, pas sur "un classeur" !
Je te prie de bien vouloir commencer à être très précis. C'est indispensable.
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

dans une feuille d'un classeur (le nom de la feuille n'a pas vraiment d'importance) mais le nom du classeur sera le nom de la valeur.
je me retrouverai donc avec N classeurs comportant chacun une seule feuille
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Comment cela, "le nom de la feuille n'a pas d'importance" ? !!!
Il va bien falloir que tu décides de la feuille "réceptrice" !
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

les N classeurs porterons le nom des N valeurs mais le nom de la feuille au sein de chaque classeurs n'a pas d'importance, elle peut s'appeler "feuil1" ou porter le nom du classeur ou autres...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bon... on va y aller avec "Feuil1", donc ...
Connais-tu le principe/règlement de ce forum ? Je te le rappelle : ===>>
On n'y traite pas un projet dans son ensemble, mais une seule question, spécifique et parfaitement isolée :
Il va donc falloir, pour cette discussion, que tu choisisses une seule difficulté, que tu ne saurais résoudre, parmi les suivantes :
1) créer un nouveau classeur en lui attribuant un nom
2) y créer une feuille en lui attribuant un nom
3) dans un classeur (celui d'origine) : parcourir en boucle une plage d'une feuille
Que choisis-tu ?
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

Ma difficulté est de définir la liste des valeurs (sans doublons) afin d'en créer les classeurs/feuilles.
La création de classeurs/feuilles, l'enregistrement des classeurs/feuilles une fois créée avec des noms définis sont des codes que j'arrive à produire sans trop de difficultés.
Donc option 3 :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bon :
On suppose que la feuille de ton classeur d'origine est triée (sonon : à trier d'abord) :

Regarde ce que fait ceci :

derlig = Range("A" & Rows.Count).End(xlUp).Row
 Dim toto As Range
 For i = 2 To derlig + 1
   If Range("A" & i - 1).Value = Range("A" & i).Value Then
     Set toto = Union(Range("A" & i - 1 & ":C" & i - 1), Range("A" & i & ":C" & i))
   Else
     MsgBox toto.Address
     Set toto = Range("A" & i & ":C" & i)
     If i > derlig Then Exit For
   End If
 Next

Voilà pour ce qui est de ta difficulté du point 3 !
A toi, maintenant (mais ce n'est plus le point 3 mais une autre question/discussion) de remplacer le msgbox par tes instructions de création de classeur et de copie (à chaque fois) de la plage toto vers la feuille choisie de l'autre classeur (méthode Range.copy avec argument destination).
Voilà ...
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

très bien, merci beaucoup pour ta rapidité, j'essaye ça la semaine prochaine (au boulot) et te tiens au courant.
=)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Attention !
J'ai écrit à main levée et ai commis une erreur ===>> corrigé ===>>
derlig = Range("A" & Rows.Count).End(xlUp).Row
 Dim toto As Range
 Set toto = Range("A1:C1")
 For i = 2 To derlig + 1
   If Range("A" & i - 1).Value = Range("A" & i).Value Then
     Set toto = Union(toto, Range("A" & i & ":C" & i))
   Else
     MsgBox toto.Address
     Set toto = Range("A" & i & ":C" & i)
     If i > derlig Then Exit For
   End If
 Next
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Tiens...
Hier, j'ai écrit à main levée et en ne m'écartant que le moins possible de ce que tu pourrais suivre.
Ce matin, je t'ai écrit une autre manière, beaucoup plus technique (et d'exécution plus rapide), très différente de la première ===>>
Dim deb As Long, i As Long, titi As Range, toto()
 toto = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row + 1)
 deb = 1
 For i = 2 To UBound(toto)
   If toto(i, 1) <> toto(deb, 1) Or i = UBound(toto) Then
     Set titi = Range("A" & deb & ":C" & i - 1)
     MsgBox "plage " & titi.Address & " à copier dans feuil1 d'un classeur à créer sous le nom " & Range("A" & deb).Text & ".xls"
     deb = i
   End If
 Next


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
19
Date d'inscription
lundi 2 avril 2007
Statut
Membre
Dernière intervention
19 novembre 2013

Parfait, merci ;)