|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Dubuis Inscription : août 2009 Messages : 9 ![]() |
Bonjour,
J’ai un tableau comportant un nombre de ligne variable, généralement de 40 à 60 lignes. Toutes ces lignes comportent des tâches à accomplir qui peuvent être classée en fonction de divers critères dans les phases d’action 1, 2 ou 3. En fonction de ces phases, je crée dans la feuille « Etape 1 » la liste des actions a effectué selon la priorité 1 et ainsi de suite pour les 3 phases d’actions. Toutefois, comme je le fait avec des formules, j’ai beaucoup de ligne vide. Par exemple pour l’étape 1 seul les lignes 3 ; 7 ; 13 ; 14 ; 26 contiennent du texte et les autres sont vide. Afin d’obtenir un tableau présentable je masque les lignes inutiles avec la macro suivante : Code :
J’imagine qu’avec une macro il y aurait une manière bien plus élégante de le faire. Déjà en créant automatiquement les feuilles d’étape avec un truc du genre : Code :
Là où j’ai un problème, c’est pour reprendre les lignes correspondants à chaque étape afin de recrée mes tableaux. J’imaginais que cela pourrait fonctionner avec la macro suivante mais je ne trouve aucunes solutions. Code :
Pouvez-vous m’aider ? D’avance merci pour votre aide Stéph |
||||||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Bonjour potemkine,
Bienvenu au Forum! Tu peux tout simplement remplacer les cellules informées "-" par des cellules vides, puis supprimer celles-ci globalement. (à adapter) Code :
Code :
Reprends ce bout de code mot par mot et reviens si nécessaire.
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||||
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Dubuis Inscription : août 2009 Messages : 9 ![]() |
Hello !
Merci ! Merci et presque Merci Merci pour la réponse Merci pour la rapidité Je n’ai pas trop de soucis pour masquer ou supprimé les lignes vides. D’ailleurs, Code :
Bien sûr, je vais essayer ta solution et surtout tenter de la comprendre car je suis loin d’être un expert et mes macro ressemblent assez à des collages de bout de macro diverses. Cependant, je souhaite surtout me concentrer sur la dernière partie de mon mail. Mon problème c’est que je ne parviens pas à récupérer les lignes de la feuille « Synthèse des économies 2 » en fonction des valeurs saisies en T3:T62. Si les lignes T3:T62 de la feuilles « Synthèse des économies 2 » contiennent un 1 je souhaite les copier et les coller dans la feuille « Etape1 » qui aura été crée. Si les lignes T3:T62 de la feuilles « Synthèse des économies 2 » contiennent un «2 » je souhaite les copier et les coller dans la feuille « Etape2 ». Ainsi de suite pour chaque étape… Un exemple a été annexé au premier message. Merci Stéph |
||
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() ![]() Étudiant Inscription : novembre 2011 Messages : 102 ![]() |
Salut Potemkine, MarcelG,
Potemkine le nombre d'étapes est-il toujours le même (3 dans ton fichier exemple) ou bien peut-il varier ? Je ne peux pas me permettre de te donner le code, je suis loin de maîtriser VBA, en revanche je peux te conseiller ceci : - Dans ta feuille "Synthese_finale", tu dois créer une liste sans doublons de ta colonne T (tu la crées temporairement dans une colonne vide, la colonne Y par exemple, tu la videras quand tu n'en auras plus besoin). - Tu filtres ton tableau en fonction des valeurs de ta liste sans doublon. - Tu crées une nouvelle feuille pour chaque valeur de ta liste sans doublon. Ca peut donner quelque chose comme : Code :
J'espère que ce raisonnement pourra t'aider dans ton codage. |
||
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Bonjour potempkine, Kaera, Bonjour le Forum,
Avant toute chose, Potemkine, je te conseille une configuration de tes feuilles "Etape" identique à celle de ta feuille "Synthèse" (mêmes nombres de lignes et colonnes, mêmes entêtes). Cela évitera les erreurs. Au demeurant, le mode plan et les colonnes masquées peuvent être envisagées. Pour ce genre d'action, 2 méthodes peuvent être considérées : les filtres et les variables VBA tableaux. Pour plusieurs raisons, notamment de performance, je préfère les tableaux. Le principe ici est d'alimenter 1 tableau par valeur d'étape puis d'en informer chaque feuille étape correspondante. Pour plus de clarté, je n'ai considéré que l'étape 1 Code :
Bonne journée à tous.
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 696 ![]() |
Bonjour à tous,
Si la structure de tes feuilles est figée (seul le nombre de lignes est variable) et que le nombre d’opérations de copie est limité (60 lignes, 8 colonnes, 3 feuilles « Etape »), tu peux aussi envisager une copie directe de tes cellules. Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Bonjour gFTZ82,
Certes ton code est efficace. Au demeurant, je trouve plus performant d'alimenter une variable tableau différente pour chaque valeur d'étape constatée que de procéder à plusieurs balayages. Autrement dit, Dans la méthode Tableaux, chaque valeur alimente un tableau différent.(Ici, je n'en ai indiqué qu'un pour la clarté de l'exposé) Dans la métode Etape - Cellule, le balayage s'effectue autant de fois qu'il y a d'étapes (2 fois For Next). C'est une question de choix.
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 696 ![]() |
Bonjour MarcelG,
J’en conviens, ton code est plus académique et il présente l’intérêt de montrer l’utilisation des variables tableaux. Par contre, je ne suis pas persuadé qu’il soit mieux adapté à ce cas précis. La variable tableau est alimentée avec l’ensemble des valeurs de la feuille «Synthese_finale » et il reste à effectuer un tri pour obtenir le résultat attendu dans la feuille « Etape ». Cela risque d’alourdir le traitement. Dans mon code, dans un souci d’optimisation, on pourrait effectivement éviter les 2 boucles mais je craindrais que cela nuise à la clarté du code. Et comme tu le dis si bien, tout cela reste une question de choix Cordialement. |
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Citation:
Comme je l'ai indiqué, le code a été simplifié par souci de clarté. Je n'ai considéré que la valeur 1. Il reste à l'adapter. Dans le code complet, chaque occurence, prise une à une, et une seule fois, alimente un tableau par la méthode Select Case (Case 1 => Tableau1, Case 2 ==> Tableau 2, etc...). Au final, chaque feuille Etape est alimentée par le Tableau correspondant. Cette méthode n'alourdit en rien le traitement. Bien au contraire, il l'allège. En conséquence, il reste tout à fait Citation:
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 696 ![]() |
Re,
Je n’ai pas été assez précis. La variable tableau est alimentée avec les valeurs de 20 colonnes de la feuille «Synthese_finale ». Le résultat attendu dans la feuille « Etape » tient sur 9 colonnes. Il y a bien un moment où il va falloir tailler dans la masse (ce qui va constituer un allègement, j’en conviens Cordialement. |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
J'ai conseillé à notre ami d'avoir la même structure dans les feuilles Etape et la feuille Synthèse, ce qui n'empêche nullement un mode plan ou des cellules masquées, comme je l'ai indiqué.
Il n'y aurait donc pas lieu de Citation:
Citation:
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Dubuis Inscription : août 2009 Messages : 9 ![]() |
Hello !
Merci pour tous vos conseils. Je ne m’attendais pas à recevoir autant d’aide. Comme vous pouvez le voir rien d’élégant et je vais m’empresser d’étudier vos solutions. Pour l’instant voilà ce que j’ai bidouillé de mon côté avec mes maigres connaissances. Code :
1. Je ne parviens pas à faire les sommes dans les feuilles d’étape car le nbr de ligne peut varier d’un cas à l’autre. 2. Le tableau de base "Synthèse des économies" doit être alimenté par d’autres fichiers. Chaque ligne correspond en fait à un fichier enregistré sous un répertoire défini. L’arborescence des dossiers est toujours la même et le lay-out des outils de calcul pour chaque mesure d’économie est le même. Toutefois, je ne connais pas les noms des fichiers à l’avance. Il peut y avoir de 10 à 60 fichiers de calcul différents. Existe-il une routine qui ouvre tous les fichiers d’un dossier défini pour en récupérer les chiffres souhaité ? Bon, en attendant je vais bucher vos solutions et je vous souhaite d’ores et déjà d’excellente fêtes. Merci ![]() ![]()
|
||
|
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Bonjour potemkine, Bonjour le Forum.
Houlala ! Nous allons procéder par ordre. L'un des principes de base de VBA est qu'un objet peut être actionné sans être sélectionné. Autrement dit, les "Select" n'ajoutent rien au code; bien au contraire, ils l'alourdissent et le rendent illisible. D'autre part, en utilisant une simple boucle et les fonctionnalités de chaque méthode (Copy) indiquées en premier lieu dans l'aide en ligne de VBA, tu peux diviser la longueur de ton code par au moins 4. Dans le code suivant, les feuilles sont créées et chaque occuence de ta feuille de synthèse alimentent la feuille correspondante. Dernière remarque, c'est la condition supplémentaire "Vrai" qui entraîne le balayage (Personnellement, j'évite). Utiliser la méthode "Find" serait plus approprié mais plus compliqué. Teste d'abord ce code et reprends-le ligne par ligne, mot par mot. Ensuite nous aborderons, une par une, le reste des actions que tu souhaites réaliser. Code :
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com