Liste d'éléments a copier d'une feuille sur l'autre afin de les exploiter

marido

XLDnaute Junior
Bonjour,

Votre aide sera la bienvenue, car après plusieurs tentatives, le test n'est pas concluant :-(
J'ai besoin de travailler à partir d'une liste d'éléments (Col Metric Name - provenant de l'onglet Data) qui est variable d'un mois sur l'autre.
L'objectif étant de mettre ensuite en évidence les évolutions

Onglet "Data" : des données qui viennent d'un autre fichier et dont je fais préalablement un copy / paste
Pour la col J de l'onglet Data, j'ai fait une petite macro afin de recuperer cette liste d'éléments et la copier dans la feuille Evolution.... et pouvoir ainsi, travailler sur
les évolutions mois par mois

Mon problème : lorsque j'actionne la macro de l'onglet EVOLUTION (bouton "update" a gauche), je me retrouve avec des #REF! dans mes commandes
J'ai déjà modifié la macro initiale pour copier ma liste dans un onglet "Temp" (au lieu de le copier directement dans l'onglet "Evolution").... mais ca n'a pas résolu le pb

Je dois mal m'y prendre....

MD
 

Fichiers joints

youky(BJ)

XLDnaute Barbatruc
Bonjour MD,
Voici avec la méthode dictionary
Plus besoin de l'onglet <Tem>
Bruno
VB:
Sub Extraction_doublon()
Application.Calculation = xlCalculationManual
Sheets("EVOLUTION").[B3:B5000].ClearContents'efface
With Sheets("DATA")
Set dico = CreateObject("Scripting.Dictionary")
For Each c In .Range(.[J2], .[J65000].End(xlUp))
dico.Item(c.Value) = dico.Item(c.Value)
Next c
Sheets("EVOLUTION").[B3].Resize(dico.Count, 1) = Application.Transpose(dico.keys)
End With
Application.Calculation = xlCalculationAutomatic
End Sub
 

marido

XLDnaute Junior
Merci beaucoup Bruno, magique !
Puis-je ajouter des lignes au dessus du tableau sans que cela n'altère le résultat ?
MD
 

marido

XLDnaute Junior
J'ai essayé en indiquant Sheets("EVOLUTION").[B6:B5000].ClearContents 'efface
(soit B6 au lieu de B3), mais ca ne modifie pas la ligne de départ de la mise a jour
MD
 

youky(BJ)

XLDnaute Barbatruc
Hello,
Ici aussi faut mettre B6 au lieu B3
Sheets("EVOLUTION").[B3].Resize(dico.Count, 1) = Application.Transpose(dico.keys)

Les formules Sommeprod occupe beaucoup de place et ralentisse le fichier il serait bon de faire en macro
Bruno​
 

marido

XLDnaute Junior
Merci pour la mise a jour (qui fonctionne parfaitement)
Je pensais que c'était la macro qui ralentissait le fichier et pas les formules Sommeprod….
Je ne sais pas encore remplacer les formules par une macro, et comme je vais devoir travailler sur l'évolution sur 12 mois, ca risque de devenir urgent !
Si conseils, je prends et dans tous les cas merci pour le support efficace
MD
 

youky(BJ)

XLDnaute Barbatruc
Hello,
Je pensais pas que cela serait aussi rapide. . . .
Tu vas être content
Les SomProd sont vraiment lentes tu vas faire la différence . . .Hihi
Bruno
 

Fichiers joints

marido

XLDnaute Junior
Merci !!! ca va tellement vite que j'étais….. en attente du démarrage…..
Je suis en train de regarder, essayer de comprendre et l'adapter

J'ai un peu de mal au démarrage avec ces 2 lignes, si tu peux m'aider à saisir :
For k = 6 To [B65000].End(3).Row
metric = Cells(k, 2)
For lg = 2 To .[A65000].End(3).Row

La seconde partie me semble plus facile à comprendre avec la boucle if (emplacement des données a sélectionner selon critère et cible)
Merci encore
MD
 

youky(BJ)

XLDnaute Barbatruc
Salut,
[B65000].end(3).row >>>> renvoie la derniére ligne de la colonne B...... ca c'est pour EVOLUTION
donc k dans la boucle est le N° ligne de 6 à la dernière ligne d'évolution
metric est une variable =cells(k,2) est =cells(k est ligne , 2 est col B)
Remarque le point avant
.[A65000].End(3).Row cela indique que c'est avec le With(onglet DATA)
Fait cet essai
en vba >menu affichage>Fenêtre exécution> dans la fenêtre on peut le questionner
Quand on veux savoir on mets un point d'interrogation ?
Donc exemple
?
[B65000].End(3).Row 'va envoyer le N° de la dernière ligne de col B
Si tu mets un point d'arrêt dans la maro (1 click dans la marge gauche, 1 point rouge se fait)
(1 autre click pour l'enlever)
Mets un point d'arrêt à la ligne >>> If .Cells(lg, 10) = metric Then
Exécute la macro, elle s'arrête sur le point, passe le curseur sur metric pour voir
ou en fenêtre exécution écris ?metric et Enter ou ?k ou ?lg
Tu appuie sur F8 pour continuer ligne par ligne ou par le menu>débocage>pas à pas
Ben voila pas mal d'explications
Bruno
 

marido

XLDnaute Junior
Explications très claires merci. J'ai encore 2 questions (désolée)
-En commentaire (Evolution), tu indiques MFC jusqu'a ligne 500 "MFC jusqu'a ligne 500" => que signifie MFC stp
-Je viens de recevoir une mise a jour de l'onglet DATA (plus de lignes) et j'ai fait un cpy/paste pour relancer la mécanique.
La macro fait bien un refresh de la col Metric name ds Evolution, mais les chiffres n'apparaissent plus ds le tableau. Y a t'il une limitation ?
Merci
MD
 

youky(BJ)

XLDnaute Barbatruc
MFC =Mise en Forme Conditionelle
La macro est prévu pour 65000 lignes (on peut facilement faire plus si besoin)
Je pense que le problème viens que les entêtes de colonnes ne sont pas identiques ou sont décalées en DATA
Bruno
 

marido

XLDnaute Junior
Après investigations : les noms (exemple cerise, ….) peuvent contenir des traits d'union (exemple cerise - France) et je pense que c'est la raison pour laquelle le tableau était vide de chiffres.
Si c'est une piste, ce qui est étrange c'est que la macro update la liste de Métriques malgré le "-" , et donc le nom, qu'elle ne semble pas reconnaitre, sans toutefois mettre à jour le tableau.

Egalement, lors de mes nombreux tests, j'ai modifié un nom pour n'avoir qu'une ligne de ce nom et la liste des métriques aurait donc du tenir en une seule ligne, mais elle a été plus longue que cela

Affaire a suivre et bonne soirée
MD
 

youky(BJ)

XLDnaute Barbatruc
Hello,
Voici qui va convenir dans tous les cas
Avec un formulaire > on choisit dans la liste qui est sans doublon
Si tu as Cerise et Cerises avec un "s" tu auras les 2 choix
Egalement pour les dates
Bruno
 

Fichiers joints

marido

XLDnaute Junior
Bonjour et un grand merci pour cette nouvelle mise a jour, en plus j'apprends !!

Est-il nécessaire de passer par un formulaire intermédiaire (mon soucis venant visiblement plus du "-" non reconnu que de doublons dans la liste de noms et j'aimais bien le design de la V3

Peux tu me dire comment je visualise le code (en passant Developer => Macro, j'accède à formulaire, mais pas à UserForm

MD
 

youky(BJ)

XLDnaute Barbatruc
En menu Développeur>Visual Basic>
Si aucune fenêtre aller en Menu>affichage>Projet
Doubleclick sur +Feuille
Doubleclick sur UserForm1
Doubleclick sur le bouton Valider de l'userform
Bon si tu préfère la V3 je peux faire avec (like) ou (left)
Par contre si tu as Courge et Courgette la macro prend les 2.
C'est mieux avec l'user
Bruno
 

marido

XLDnaute Junior
Merci, tu développes plus vite que je n'arriver à tester ;-)
Basé sur ton idée, j'ai fait un petit mixte à savoir
1) En A6 = un menu déroulant comportant la liste des noms (Data validation => Liste constituée à partir d'un onglet intermédiaire).
je n'ai laissé que 2 noms pour le moment, pour faciliter les tests
2) La date est en C4 (j'ai modifié la macro dans ce sens) pour commencer à préparer février, puis mars, puis.....

2 derniers points stp :
Peux tu m'indiquer stp comment je peux modifier la macro pour le mois suivant (bonne méthode !), je ne suis pas au point dans les boucles imbriquées et mon résultat n'est pas satisfaisant

Egalement, lorsque je sélectionne "Clementine - FRANCE" ds le menu déroulant en A6, puis UPDATE, j'obtiens 15 lignes alors qu'il n'y a qu'une ligne pour ce nom (soit 1 seul métrique) dans l'onglet DATA)

Merci encore
MD
 

Fichiers joints

marido

XLDnaute Junior
Aucun problème pour le délai : je te remercie déjà beaucoup pour ton support
Je regarde, j'adapte et je te dis
Bonne soirée
MD
 

marido

XLDnaute Junior
J'ai ajouté les 12 mois ds l'onglet EVOLUTION et dans la macro : j'ai du faire une erreur à partir de Mars car cela ne fonctionne pas très bien :-(
MD
 

Fichiers joints

Discussions similaires


Haut Bas