Bonjour,
Je me suis fais une macro sous Excel en mode enregistrement automatique résolvant mon problème, mais le code est vraiment, mais vraiment moche!
Donc voilà je me demandais si quelqu'un pourrait m'aider à construire une macro un peu plus propre.
Débutant en macro VB Excel, je souhaiterai avoir vos conseil pour régler mon problème suivant:
-> Dans une worksheet, j'ai un tableau de la forme suivante
Hypotheses:
*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.
* Pour ordre de grandeur les tableaux que j'utilise font en moyenne 30 colonnes sur 3000 lignes
* 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:
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éé:
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:
Merci d'avance pour votre aide,
Je me suis fais une macro sous Excel en mode enregistrement automatique résolvant mon problème, mais le code est vraiment, mais vraiment moche!
Donc voilà je me demandais si quelqu'un pourrait m'aider à construire une macro un peu plus propre.
Débutant en macro VB Excel, je souhaiterai avoir vos conseil pour régler mon 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:
*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.
* Pour ordre de grandeur les tableaux que j'utilise font en moyenne 30 colonnes sur 3000 lignes
* 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
Merci d'avance pour votre aide,
Dernière édition: