Gestion de tableau avec tri automatique - VB/VBA/VBS - Programmation
Marsh Posté le 02-10-2011 à 02:45:50
Salut, cela te fera un excellent exercice d'optimisation manuelle du code généré par l'enregistreur de macros plutôt que d'attendre du tout cuit
Marsh Posté le 02-10-2011 à 10:57:20
Salut kiki29,
Je n'attends pas du tout cuit, mais vois tu la dernière fois où j'ai codé cela remonte à plus de 10 ans durant mes études où j'ai fais plusieurs années de C, de Java,... Et honnêtement j'adorais la prog. Mais voila, dans mon travail je ne suis plus du tout amener à programmer et donc j'ai perdu mes réflexes même si les principes de programmation, c'est comme le vélo on n'oublie pas.
Donc vois-tu l'idée en venant sur ce forum à la rencontre de gars expérimentés et passionnés qui eux ont tous les reflexes, je recherche avant tout une aide pour la structure de mon code avec des fonctions de bases que bien entendu par la suite je vais devoir adapter.
Par ailleurs tu t'imagines bien que mon probleme de base est un peu plus compliqué que trier des "vaches" dans un tableau de 6 lignes.
Donc bien entendu je compte mettre les mains dans le cambouis. Mais je sais qu'à l'époque ou je programmais, pour résoudre un énoncé comme ça il m'aurait fallu moins de 30min .... maintenant malheureusement (étant en plus newbie en VBA), le temps qui m'est nécessaire en partant de zéro est considérablement plus long que si j'arrive à partir avec une base assez bien faite.
En tout cas merci d'avance, pour toute personne ayant l'expérience lui permettant de m'aider sur ce problème sans que cela lui bouffe une journée ;-)
Marsh Posté le 02-10-2011 à 15:47:07
Pour les passionnés, je vous donne un bout de code qu'un certain Mercatog m'a gentil fournit sur un autre forum:
Code :
|
Merci d'avance pour toute aide complémentaire ou remarque.
Bonne journée,
Marsh Posté le 02-10-2011 à 01:17:28
Bonjour,
Je vous contacte car débutant en macro VB Excel, je souhaiterai avoir vos conseil pour régler le problème suivant:
-> Dans une worksheet, j'ai un tableau de la forme suivante
titreA titreB titreC titreD titreE
vache ble 10.2.1 ville valide
cheval mais VIDE ferme valide
vache ble 5.2.1 ferme valide
vache mais VIDE ville valide
vache ble 5.4.6 ville valide
cheval seigle 100.0.7 ferme valide
cheval mais 3.6.1 ville valide
Hypotheses:
* L'espace doit etre interprété comme séparateur de cellule
*La taille du tableau peut varier et l'emplacement des colonnes aussi. Ici on va travailler avec les colonnes nommées: "titreA" et "titreC", mais leur emplacement peut varier (seul leur nom est connu et fixe). Pour ça j'avais pensé à l'utilisation d'une fonction de calcul de la taille du tableau et une fonction de recherche de titre de colonne.
* Quand j'écris VIDE: cela signifie que le contenu de la cellule est réellement vide
1/ Je souhaite trouver la colonne "titreC" et utiliser un filtre automatique pour ne garder QUE les lignes NON vide (similaire à l'option "Non Blank" du filtre automatique sous Office 2003). Dans notre cas les lignes 3 et 5 ne doivent plus apparaitre.
2/ Je souhaite trier la colonne "titreC" préalablement filtré de façon croissante. Le probleme qu'on rencontre ici (existant d'ailleurs aussi avec le filtre automatique) c'est que par ex: 10.2.1 sera devant 5.2.1, ce que je voudrai éviter.
3/ Enfin, j'aimerai bien pouvoir filtrer de nouveau le résultat de l'étape précédente suivant la colonne "titreA" en ne gardant que les lignes avec le mot "vache". J'imagine qu'ici aussi la fonction de filtre automatique va être utile
Le resultat obtenu des 3 étapes précédentes devrait avoir la forme suivante:
titreA titreB titreC titreD titreE
vache ble 5.2.6 ferme valide
vache ble 5.22.3 ville valide
vache ble 10.2.1 ville valide
4/Une fois ce tri effectué, je souhaiterai copier ce résultat dans une autre worksheet et supprimer les colonnes "titreB" et "titreD", afin d'obtenir dans une nouvelle worksheet créé:
titreA titreC titreE
vache 5.2.6 valide
vache 5.22.3 valide
vache 10.2.1 valide
5/ Et dernière étape (si pas trop compliqué), je souhaiterai pouvoir insérer une ligne (de la longueur du tableau où toutes les cellules sont fusionnées) et où serait écrit le numéro de section basé UNIQUEMENT sur le premier nombre des cellules de la colonne "titreC" (ex: 5.2.6 -> nombre 5, 10.2.1 -> nombre 10). Cette ligne devra être affiché des que le nombre change.
Donc dans l'exemple cela donnerait:
titreA titreC titreE
*** SECTION 5 *********
vache 5.2.6 valide
vache 5.22.3 valide
*** SECTION 10 *******
vache 10.2.1 valide
Je me suis fais une macro sous Excel en mode enregistrement automatique résolvant mon problème, mais le code est vraiment moche!
Donc voilà je me demandais si quelqu'un pourrait m'aider à construire une macro un peu plus propre.
Merci d'avance pour votre aide,