Comment séparer les données d"une même feuille en plusieurs onglet [Résolu]

idieordeco 28 Messages postés mercredi 7 novembre 2007Date d'inscription 20 février 2011 Dernière intervention - 4 juil. 2008 à 22:27 - Dernière réponse : idieordeco 28 Messages postés mercredi 7 novembre 2007Date d'inscription 20 février 2011 Dernière intervention
- 5 juil. 2008 à 15:20
Bonjour,

Je ne suis pas bien sur d'être dans la bonne section, désolé par avance. (C'est ou VBA Excel ?)
Je suis sur VBA Excel et je souhaite séparer les données d'un même onglet et plusieurs onglets en fonction des critères de la colonne A
Exemple :
J'ai un onglet avec ça comme base :
A              B                  C
CAC40     01/01/08        4019
CAC40     02/01/08        4023
CAC40     03/01/08        4043
SBF120    01/01/08        235
SBF120    02/01/08        238
SBF120    03/01/08        245
(...)          (...)                (...)

Au finale je veux ça (avec cet exemple)
Onglet 2
A              B                  C

CAC40     01/01/08        4019

CAC40     02/01/08        4023
CAC40     03/01/08        4043

Onglet 3
SBF120    01/01/08        235

SBF120    02/01/08        238

SBF120    03/01/08        245

Onglet n
(...)          (...)                (...)

Et l'onglet 1 vide au final !

Je me suis complétement perdu dans le code avec une variable qui teste la colonne A et si cette dernière est différente de A-1 alors tu crée un nouvel onglet sinon tu copies colles sur le dernier onglet crée.
Voila voila, lost in translation idieordeco...
Si quelqu'en peut me rebrancher sur une piste ?

Merci par avance !

Bière qui roule bière qui mousse
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 5 juil. 2008 à 13:42
3
Merci
>>Le truc c'est que ma variable critere ne s'implémente pas. (Donc je copie/colle toujours le même indice (hum !)

Pas fort en VBA, alors Question:
Est-ce que ActiveSheet.Range("$A:$G").AutoFilter Field:=8, Criteria1:=critere
suffit pour éviter que ça copie et colle toujours le même indice.Car à part ça, l' indice critère ne figure nulle part ailleur.Dans ta boucle tu ne te refères qu' à J.
(Columns(j).Select)

A part ça, difficile pour moi de t' aider sur ce coup là !  
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.

Merci LIBRE_MAX 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de LIBRE_MAX
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 4 juil. 2008 à 23:18
0
Merci
Bonsoir,

Il semble que tu analyses bien ton problème... Maintenant, je pense que l'algo que tu veux faire n'est pas très bon...
En effet, le moindre désordre rendait tout bordelique, avec 2 onglets pour une même rubrique... je ne détaille pas plus, mais personnellement, je suivrais un autre chemin... en prenant un nom d'onglet valant celui de la colonne A.

Schématiquement, voici les étapes :

1er étape :
- Faire une fonction qui repère le nb d'enregistrement dans une feuille (c'est facile, et existe déjà...)

2 étape : l'algo...
- Recherche le nb d'enregistrement => fin
- De la ligne 1 à fin
- Lire l'élément de la colonne A (un enregistrement : CAC40 par exemple)
- Copier la ligne entière (avec les fonctions intégrées d'Excel => selection.copy)
- Rechercher parmi les noms des onglets, si CAC40 existe
- Selon la réponse on va à l'étape 3 ou 5

3 étapes : L'onglet existe !
- Changer la feuille correspondante à l'onglet
- Recherche le nb d'enregistrement => fin
- Se positionner juste une ligne après
- Coller la copie précédente (avec les fonctions d'Excel)

4 étapes : Retour à l'étape 2

5 étapes : L'onglet n'existe pas !
- Créer un onglet (Sheet.add)
- Changer son nom avec la valeur de l'élément de la colonne A précédent.
- Retour à l'étape 3

Amicalement,
Us.
Commenter la réponse de us_30
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 4 juil. 2008 à 23:50
0
Merci
Salut,
regardes cette discution..si ça peut t' aider.
http://www.vbfrance.com/infomsg_QUESTION-SUBSIDIAIRE-VB6-AJOUTER-FEUILLE-CLASSEUR_1164051.aspx#18

En partant du principe que tu regrouperas tout dans une seule feuille, qui servira selon l' exemple, comme source de données.

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Commenter la réponse de LIBRE_MAX
idieordeco 28 Messages postés mercredi 7 novembre 2007Date d'inscription 20 février 2011 Dernière intervention - 5 juil. 2008 à 13:26
0
Merci
Bonjour,

Tout d'abord, merci pour vos réponses.
J'ai repensé mon système.
En fait les données que je souhaite mettre en onglet font 170000 lignes pour 600 variables en A. (J'ai excel 2007 donc ça passe sans problème)
Seul souci ça va mettre deux ans à trier.
Dans l'idéal, après le tri des indices, je serai à 200 variables A et 50000 lignes (Là, c'est pour le boulot et Excel 2003 :) )

Maintenant je repense le système et je met les données en colonne.

Avant j'avais ça sur mon onglet indice:
A              B                  C
CAC40     01/01/08        4019
CAC40     02/01/08        4023
CAC40     03/01/08        4043
SBF120    01/01/08        235
SBF120    02/01/08        238
SBF120    03/01/08        245

Je vais faire ça sur un autre onglet VL (et un seul) :
                A             B (...)             J                  K                ETC....
 1                                                   CAC 40       SBF 120
 2              01/01/08                       4019            235
 3              02/01/08                       4023            238
 4              03/01/08                       4043            245

Le principe du début de la moulinette est le suivant :
Le filtre les indices les un après les autres par leur code (Qui une variable nombre) puis je copie/colle la valeur de l'indice sur l'onglet VL et colonne.
ça donne ça :

Sub tri()

Dim j As Long
Dim critere As Long
For critere = 85 To 100000
For j = 12 To 1000


    Sheets("indices").Select
    ActiveSheet.Range("$A:$G").AutoFilter Field:=8, Criteria1:=critere
    Columns("C:C").Select
    Selection.Copy
    Sheets("VL").Select
    Columns(j).Select
    ActiveSheet.Paste
    Next j
    Next critere

Le truc c'est que ma variable critere ne s'implémente pas. (Donc je copie/colle toujours le même indice (hum !)
En pas à pas, la moulinette passe de next j au début (sans passer sur Next critere donc)

Bière qui roule bière qui mousse
Commenter la réponse de idieordeco
idieordeco 28 Messages postés mercredi 7 novembre 2007Date d'inscription 20 février 2011 Dernière intervention - 5 juil. 2008 à 15:20
0
Merci
Dim critere As Long
For critere = 85 To 100000
    Sheets("indices").Select
    ActiveSheet.Range("$A:$G").AutoFilter Field:=8, Criteria1:=critere
    Columns("C:C").Select
    Selection.Copy
    Sheets("VL").Select
    Columns("J:J").Select
    Selection.Insert Shift:=xlToRight
    Sheets("indices").Select
    ActiveSheet.Range("$A:$H").AutoFilter Field:=8

next critere

En fait comme ça, ça marche.

Mais j'arrête là car je ne suis pas bien sur des données sources que je traite.
Merci pour tout

Bière qui roule bière qui mousse
Commenter la réponse de idieordeco

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.