Excel VBA : segmenter un fichier et copier dans un nouveau
yannickroulin
Messages postés
3
Statut
Membre
-
yannickroulin Messages postés 3 Statut Membre -
yannickroulin Messages postés 3 Statut Membre -
Bonjour,
J'ai un feuille excel avec 3 colonnes :
1. Les noms de recettes
2. Les ingrédients
3. La préparation
Ces colonnes ne sont pas toujours pleines. Toutes les indications pour une recette se situent entre la ligne du nom de la recette et la ligne précédent le nom de la recette suivante.
J'essaie de créer un formulaire avec ListBox à selection multiple (qui contient les noms des recettes). L'utilisateur choisi les recettes qui l'intéresse et le programme doit recopier dans un nouveau fichier (toujours sur 3 colonnes) uniquement les recettes selectionnées les unes à la suite des autres.
J'ai pensé à utiliser un "Scripting.Dictionary". Les clefs étants les noms des recettes (qui apparaissent dans la ListBox), les valeurs étants des objets Range qui contiennent les zones de chaque recette à recopier.
Mes tentatives ont été infructueuses, j'ai bien peur d'avoir inutilement compliqué le problème dans mon approche.
Quelqu'un a-t-il une idée à me proposer?
Yannick
J'ai un feuille excel avec 3 colonnes :
1. Les noms de recettes
2. Les ingrédients
3. La préparation
Ces colonnes ne sont pas toujours pleines. Toutes les indications pour une recette se situent entre la ligne du nom de la recette et la ligne précédent le nom de la recette suivante.
J'essaie de créer un formulaire avec ListBox à selection multiple (qui contient les noms des recettes). L'utilisateur choisi les recettes qui l'intéresse et le programme doit recopier dans un nouveau fichier (toujours sur 3 colonnes) uniquement les recettes selectionnées les unes à la suite des autres.
J'ai pensé à utiliser un "Scripting.Dictionary". Les clefs étants les noms des recettes (qui apparaissent dans la ListBox), les valeurs étants des objets Range qui contiennent les zones de chaque recette à recopier.
Mes tentatives ont été infructueuses, j'ai bien peur d'avoir inutilement compliqué le problème dans mon approche.
Quelqu'un a-t-il une idée à me proposer?
Yannick
4 réponses
-
Bonjour,
Pas sûr de l'intérêt d'un dictionary vu que tu n'as pas de doublon.
J'ai peut-être raté qcq chose mais je ferais comme ça :Public Sub UserForm_initialize() Dim dernLigne As Long, c As Range With Sheets("Recettes") dernLigne = .[A:A].Cells(Rows.Count, 1).End(xlUp).Row ListBox1.Clear For Each c In .Range("A3:A" & dernLigne).SpecialCells(xlCellTypeConstants, 23) ListBox1.AddItem c Next c End With End Subqui permet de ne boucler que sur les cellules utiles.
eric -
Bonjour,
Peut-être qu'avec un fichier de travail avec ce que tu as fait on arrivera à réfléchir.
Déposer le fichier xls (réduit au nécessaire et anonymisé) sur cjoint.com et coller ici le lien fourni.
eric
-
Bonjour,
j'ai réussi à résoudre une bonne partie du problème : je n'avais pas déclaré mon "Scripting.Dictionary" dans un module standard ce qui fait que la portée de cet objet était insuffisante. Néanmoins je trouve mon code fichtrement compliqué.
Pour info :
https://www.cjoint.com/?BLliNUBzi3e
Salutations
Yannick -
Bonjour,
Merci pour ce post, débutant en vba, je ne connaissais pas bien la méthode SpecialCells. ça simplifie bien les choses
Salutations
Yannick
:Résolu: