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

Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Dernière intervention
20 février 2011
- - Dernière réponse : idieordeco
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Dernière intervention
20 février 2011
- 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
Messages postés
1403
Date d'inscription
mardi 1 mai 2007
Dernière intervention
7 octobre 2012
5
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 86 internautes nous ont dit merci ce mois-ci

Commenter la réponse de LIBRE_MAX
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
4
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
Messages postés
1403
Date d'inscription
mardi 1 mai 2007
Dernière intervention
7 octobre 2012
5
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
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Dernière intervention
20 février 2011
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
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Dernière intervention
20 février 2011
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.