[Catégorie modifiée .Net -> VBA] filtrer, trier et ordre

Résolu
givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
- 26 mai 2011 à 21:20
givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011
- 26 mai 2011 à 23:41
Bonjour à toutes et à tous,

Bon mon cas est peut être simple mais j'ai tellement le nez dedans que je vois pas comment faire.
pour résumer:

J'utilise le vba sous 2003 (je sais Access est mieux pour les triages etc. mais étant donné que pas beaucoup de personne maitrise Access je dois me débrouiller pour le faire sur Excel. BREF.)
Comme vous pouvez le voir j'ai simplifier avec 2 colonnes.
La première feuille montre l'apparence que peut prendre la base de donnée.



et la deuxieme feuille montre comment je veux qu'elle se range (dans une autre feuille).



j'ai pas de problème à trier/ filtrer etc seulement il y a plusieurs contrainte.
- VD1 doit etre rangé puis couper dans l'autre feuille en respectant l'ordre de priorité ( colonne B)
- VD2 et VD9 sont triés ensemble et respecte également l'ordre de priorité il peut donc avoir VD9 en n°1, VD2 en n°2 encore VD2 en n°3 etc.

Vous allez me dire FACILE ! bah non. ahah parce que lorsque je fais .find sur VD2 sur le filtre VD2/VD9, il est possible qu'un VD9 soit en 1er...

je sais pas si je m'explique bien.
Voici une partie de mon code sur mon fichier réel je vais essayer d'être la plus claire possible :

Private sub automatisme2(variable_section, variable_section2, numero_ligne, controle, controle2, onglet)
'trouver le numéro de la ligne

with worksheets("Collage").range(A:A)
Set trouver_ligne = .find(variable_section)

'avec une message box ( trouver_ligne.offset(1.0)) je trouve VD2

 If trouver_ligne.offset(1,0) = variable_section2 then ' donc si ya une valeur au dessus égale VD9 alors je veux 
'prendre cette ligne ( sauf que j'ai pensé après que si les 2 première c'est du VD9.. bah jsuis dans la mer**)
trouver_ligne=.find(variable_section2)
else
trouver_ligne=.find(variable_section) ' je sais je répète c'est bien pour qu'on comprenne
end if

numero_ligne = trouver_ligne.offset(0,15).value ' ça c'est où la valeur de l'ordre de priorité se trouve
'dailleurs C'EST LA OU CA BLOQUE !!!
'le truc c'est que j'ai fais la même formule pour VD1 (donc sans double filtrage) et ça marche nickel :/
End with


variable_section = "VD2"
variable_section ="VD9"
controle c'est pour la suite du code donc on s'en fou, ça me permet de faire la boucle après
controle2 c'est pareil
onglet ça c'est l'onglet dans lequel je veux copier la ligne

voici la suite du code avec la boucle si ça peut aider...

Do while worksheets("Controles").range(controle2)="0" ' j'ai mis un controle parceque dans mes autres 
'colonnes j'ai des poids associés. 
if trouver_ligne is nothing then ' si la ligne n'est pas trouvé alors sortir
exit do
Else 'sinon appeller la passation pour couper/coller
Call couper_coller(onglet, numero_ligne)

donnee_somme = worksheets("Collage").range("L"& numero_ligne) 'juste un addition pour ajouter le poids venant de 
'la ligne précédente au poids de la ligne actuelle la somme ne dois pas acceder le poids limite dans Controles
nombre_somme=worksheets("Controles").range(controle)
somme_somme=donnee_somme + nombre_somme

worksheets("Controles").range(controle) = somme_somme 'quand le poids limite à été dépassé la boucle s'arrete et 
'passe à une autre section.

worksheets("Collage").range("A" & numero_ligne).entireRow.delete 'supprimer la ligne de la base de donnée


La boucle n'a aucun problème, elle marche très bien avec VD1
Je sais que c'est pas forcément évident mais j'espère que vous pourrez m'aider
N'hésitez pas à demander des précisions si besoin est!

Merci en tout cas de prendre un peu de votre temps sur mon cas!!
Jennifer.

7 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
26 mai 2011 à 22:56
Bonjour,
Je ne suis pas certain d'avoir compris (voire deviné) ce que tu as essayé d'exprimer là. Que dit la boule de cristal de Jack ?
Juste pour le cas où, finalement, tu voudrais trrier sur un "groupe ,constitué, rien ne devrait t'empêcher d'ajouter une colonne invisible, dont les cellules seraient remplies par le siymbole ou la lettre de ton choix si la cellule de la première colonne contient "V2" ou "V9" (une simple forule excel le ferait).
Fais ensuite tes tris hierarchises en tenant compte de cette colonne et non de la première.

Tout cela à condition que j'aie quand même un peu deviné

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
26 mai 2011 à 22:19
Salut

Pourquoi veux-tu faire une boucle alors que le tri de Excel pourrait faire l'affaire avec 2 ou 3 instructions ?
Il te suffit d'enregistrer une macro pendant que tu vas dans le menu Données Trier ... et tu obtiendras le code.
Le copier coller, ensuite, est une autre tâche que l'enregistreur de macro peut aussi résoudre.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
26 mai 2011 à 22:26
Je reviens, je n'avais pas fait attention à l'ordre particulier que tu souhaites.
Ce tri ne sera réalisable que lorsque tu auras défini les règles.
Pourquoi VD2 apparaitrait après VD9 ?
Et pourquoi pas au lieu de VD1 ?
Comment veux-tu que ton programme le sache ?

La seule règle que je vois, c'est de dire "après tri alphabétique des données de la colonne section + deuxième ordre de tri = la colonne ordre, s'il manque un chiffre dans la suite numérique de la colonne ordre, il faut rechercher et prendre la donnée située après cette ligne et dont le numéro d'ordre est celui qui manque."

Donc oui, c'est une affaire de boucle et de If
0
givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011

26 mai 2011 à 22:39
hey,
em disons que la base de données est assez conséquentes donc c'est beaucoup de copier / coller et d'erreurs manuelles ...

je n'ai pas choisi de faire VD2 et VD9 ensemble, il doivent l'être car un poids (par exemple) leur est attribué et sur le groupe VD2/VD9 le poids ne doit pas dépasser 20tonnes par exemple. donc je suis obligée de les trier ensemble. Ensuite il ont un ordre de priorité dans ce groupe VD2/VD9. Donc si je demande de trier sur VD2/VD9 et que je trie ensuite sur l'ordre tout va bien.

Mais le truc c'est que si avec .find je demande de chercher le premier VD2 dans la colonne, si ça se trouve il y aura 2 VD9 en position n°1 et n°2 or je veux la ligne de la position n°1 VD2 ou VD9 aille se mettre dans l'autre feuille! (sachant que du coup ya plusieurs n°1 , n°2 etc vu que le groupe VD1 est différent du groupe VD2/VD9...) de même si je demande de chercher le premier VD9.. il peut y avoir x VD2 devant...

l'ordre de priorité avec "-" n'a en fait pas de priorité donc il se met 'au hasard' après les priorités jusqu'à ce que les limites de poids soit atteints.

je sais pas si tu vois..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011

26 mai 2011 à 23:08
re,
um...j'avais pas pensé à ça > noob <

et si ya une nouvelle section qui est ajoutée avec V2 ou V9 dedans... je plaisante..

je vois ce que tu veux dire je peux 'regrouper mes groupes' avec une colonne cachée; appelons la 'groupe' et j'y met le numero de groupe. donc groupe 1 : VD1 , groupe 2 : VD2/VD9 etc..

c'est ça ? :)
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
26 mai 2011 à 23:15
C'est ça.
Formule à mettre dans les cellules de la colonne invisible, du genre :
SI(OU(A1"V2";A1="V9");"TOTO";A1)
Bon ... trouve autre chose que TOTO, quand même
Bonne nuit

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
givemecookies
Messages postés
32
Date d'inscription
mardi 27 octobre 2009
Statut
Membre
Dernière intervention
4 août 2011

26 mai 2011 à 23:41
ahah ouais ouais t'inquiètes!! ;)

Comme quoi souvent les problèmes compliqués ont des réponses simples! ;)
Merci pour ta lumière! :D
Bonne soirée!
0