idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011
-
4 juil. 2008 à 22:27
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 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 ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 5 juil. 2008 à 13:42
>>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.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 4 juil. 2008 à 23:18
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
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011 5 juil. 2008 à 13:26
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
idieordeco
Messages postés28Date d'inscriptionmercredi 7 novembre 2007StatutMembreDernière intervention20 février 2011 5 juil. 2008 à 15:20
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