Répeter une extraction d'un groupe issus d'un filtre

  • Initiateur de la discussion sebastien
  • Date de début
S

sebastien

Guest
Bonjour a tous,

Je suis novice en la matiere et certains d'entre vous sont limite des magiciens, et moi j'aime bien les tours de magie ;-).
J'arrive grace à l'enregistreur de macro à faire bcp d'opération, mais dès qu'il s'agit de les globaliser mon experience en VBA est trop réduite pour y arriver.

J'ai une liste de produit qui me viennent de plusieurs fournisseurs, plusieurs fournisseurs me livrent le meme produit.
Pour connaitre les totaux sur les differents produits, j'utilise les filtres et liste le tout un par un.
Sur la macro cela marche tres bien.
Le moment ou cela se complique c'est que tout les mois j'ai 4 ou 5 produits qui partent et peut etre 30 nouveaux qui arrivent.
Est il possible de reproduire une serie d'action précise pour une pour chaque produit apparaissant dans la liste (sachant que le nom du produit se répète).
J'envoie une pièce jointe pour vous montrer a quoi cela doit ressembler, avec la macro.
Pour une fois j'ai la sensation d'être clair

Merci

Bonne journée
 

Pièces jointes

  • extract.zip
    9.8 KB · Affichages: 16
  • extract.zip
    9.8 KB · Affichages: 15
  • extract.zip
    9.8 KB · Affichages: 15
@

@+Thierry

Guest
Bonjour Sébastien, le Forum

Je pense que l'on peut faire ceci avec des formules, ce qui serait peut-être pour toi plus simple que de faire en VBA, mais bon, moi je ne fais pas de Formule c'est bien connu !! lol

Bon je te l'ai pas fait en UserForm rassure toi, mais sinon je peux te garantir que si la structure de ton tableau est bien représentatif de la vrai structure des tableaux à traîter tu n'auras pas de maintenance à faire, car j'imagine bien comme tu devais te faire ... (huum, bon tu m'as compris lol) pour maintenir tes criterias dans ta macro d'origine !!

En fait maintenant tu peux ajouter n'importe quel fruit ou pièce détachée automobile ! le code le gérera 100% automatiquement ...

Enfin voilà pour toi une démo, basée encore sur le Set d'Objet New Collection.

Je te laisse découvrir et si tu veux comprendre un peu mieux la méthode employée je te conseille ce fil de discussion :
=> Lien supprimé

Bon Appétit
@+Thierry
 

Pièces jointes

  • XLD_Sub_Total_Methode-New-Collection.zip
    12.4 KB · Affichages: 22
J

Jean-Marie

Guest
Bonjour

Beau travail Thierry, je vais pourvoir approfondir ton code.

Il y a des fois où une solution par formules n'est pas à entrevoir due à sa complexité, à la vue de la simplicité avec laquelle on lance une macro.

@+Jean-Marie
 
@

@+Thierry

Guest
Bonjour Monique et Jean Marie, re Sebastien

Merci pour le Compliment Jean-Marie, oui je sais que parfois une macro et hop !! lol

Mais comme j'étais sûr et certain de vous voir par là tous les deux, j'ai signalé que par formule on pouvait aussi faire des barbatrucs !! lol

Sinon heureux que celà fonctionne Sous Mac le Set D'Object New Collection, car c'est ultra pratique.

Et sinon je pense aussi qu'en TCD on doit aussi avoir un résultat pour ce genre de requête... (Et hop Celeda dans le Fil lol)

Bon App à vous tous et toutes (je file me chercher un casse dalle)
@+Thierry
 
S

sebastien

Guest
Salut Thierry

Ton truc est excellent, il va me falloir tout l'apres midi si ce n'est plus pour réadapter les colonnes (et aussi envoyer les résultats dans une autre feuille)
Par contre j'avais plus de 1800 produits (on a bcp de fruits a traiter), alors je ne me suis pas fait ...... a masquer j'en ai refait un a coté.
Vous allez me faciliter la vie je n'en voyait pas le bout.
Je suis en stage, et j'en apprends pas mal, mais vous y etes aussi pour beaucoup.

PS: La coincidence avec les produits que tu as ajoute est plutot rigolote, je fais des essuies glaces.
 
S

sebastien

Guest
Re bonjour tout le monde


Monique,
ta solution est elle aussi sans reproche et pour moi bien plus facile a réadapter.
Je n'aurais jamais reussi devant pareil complexité.

Encore merci

Il ne me reste maintenant plus qu'a comprendre toutes les subtilités des 2 solution pour les utiliser à m aguise en toutes occasion et ce pour tout nouvelle chose a faire.

Par contre j'aimerais savoir quelle est la difference entre un module et un userform sur VBA.


Bonne journée a tous, enfin jusqu'à ce que je n'arrive pas a me sortir de mon prochain problème.
Je vous le predit pour dans 3 heures, j'ai une formation d'ingénieur conception pas de gestion de base de données! Et vu ce qu'on me demande en ce moment je pense que niveau base de données ca va donner

salut
 
@

@+Thierry

Guest
Re Sebastien, Monique, Jean-Marie, Le Forum

La difference entre un Module et un UserForm sur VBA, et bien ou c'est très simple ou c'est très compliquée comme question.

Un UserForm, à partir du moment où tu le crées, il génére son propre "Private Module", tout comme les Feuilles, et même le Classeur lui même ("ThisWorkbook").

Par définition, un Private Module ne devrait servir qu'à contenir les codes de l'objet concerné (Le UserForm, ou la Feuille ou le Classeur), mais je dis bien par définition, puisque l'on peut gérer des autres choses comme je le fais avec Lien supprimé mais je e veux pas t'embrouiller l'esprit...

En fait un Module "Standard" (Module1 par exemple) lui contient par définition des codes "Publique" à tout le Projet (et même à l'extérieur si on veut extrapoler).

La différence sinon est évidente, un UserForm est un Object "palpable" (au figuré lol) un Module non, il peut générer tout au mieux des MsgBox, ou alors on fait appel à des Controls existants par ailleurs (Dans un UserForm ou dans une Feuille)... Un Module peut par contre fabriquer un UserForm à la Volée par programmation... Mais tout ceci doit te rendre encore plus perplexe que lorsque tu as posé la question !! lol

Non disons que dans ton cas présent, pas besoin de UserForm, un Module suffit, il va permetre de lire tes donnés et les reporter dans un autre endroits du classeur avec les Statistique nécessaire...

Pour mieux comprendre comment adater ce code, imagine que ta base de donnée soit de la Colonne "A" à "H" que le "Fruit" soit en colonne "D" le "CA" en "E" et la "Marge"en "F" tout ceci sur une feuille "Import" et que tes calculs doivent se trouver en Feuille "Statistics" de la colonne "A" (libellé du Fruit), "B" (CA) et "C" (Marge) ...

Voici le code remanié dans le cadre de cette supposition :

Sub MakingSubTotalPerFruit()
Dim TabloDatabase As Variant
Dim CollectionFruits As Collection
Dim Fruit As Variant
Dim i As Long, L As Long
Dim CA As Double, Marge As Double



With Sheets("Import")
  TabloDatabase = .Range("D3:F" & .Range("D65536").End(xlUp).Row)
  .Range("F19:H500").ClearContents
End With

Set CollectionFruits = New Collection

On Error Resume Next
  For i = 1 To UBound(TabloDatabase)
   CollectionFruits.Add CStr(TabloDatabase(i, 1)), CStr(TabloDatabase(i, 1))
  Next


  For Each Fruit In CollectionFruits
    For i = 1 To UBound(TabloDatabase)
      If TabloDatabase(i, 1) = Fruit Then
       CA = CA + TabloDatabase(i, 2)
       Marge = Marge + TabloDatabase(i, 3)
      End If
    Next i

    With Sheets("Statistics")
    L = .Range("A65536").End(xlUp).Row + 1
   .Range("A" & L) = Fruit
   .Range("B" & L) = CA
   .Range("C" & L) = Marge
   End With
   CA = 0
   Marge = 0
   Next Fruit

End Sub

Voilà ce n'est pas vraiment sorcier à adapter... Ce qui est important c'est le dimensionnement de la Plage TabloDatabase au départ et ensuite de savoir travailler dans les colonnes respectives de ce Tableau (ici (i, 1) = le Fruit puisque 1 est la première colonne....) Si par exemple tu as une colonne de donnée au milieu qui ne sert à rien dans tes stats, ce n'est pas grave, tu élargit d'autant la plage de TabloDatabase et tu décalles le numéro...

Bon "Amusement"
@+Thierry

PS ce n'est pas une coïncidence, j'ai pu savoir par ton classeur dans quel boite tu travailles (regarde Menu / Fichier / Propriétés)
 
S

sebastien

Guest
Oui que tu as capté la boite, pas de prob, mais cette boite a 10 branches dans des domaines très très variés, et je suis justement dans la branche qui s'occupe de ces produits.

Pour cela c'est une coïncidence.

Je vais suivre tes cours au pied de la lettre et tenter d'en apprendre un max, même si le reste de la semaine s'annonce tendu.

Merci de ton aide

Bonne soirée
 
S

sebastien

Guest
Salut


J'ai reussi a comprendre pas mal de truc, ca ressemble pas mal a mapple dans le fond (j'ai utlisie mappel de facon assez succinte et en espagne, mais....).

J'ai reperer plein de choses interessante.

a priori
For i = 1 To UBound(TabloDatabase)
grace a ca tu passe en revue toute les lignes jusqu' a la fin

par contre comment s'utilise la commande:

CollectionFruits.Add CStr(TabloDatabase(i, 1)), CStr(TabloDatabase(i, 1))

Celle la je ne la comprends pas bien, je vois plus ou moins ce qu'elle fait je change sans prob les chiffres, mais Add CStr, ce la fais quoi exactement.


SInon je pense être capable d'adapter ton calcul sans problème sauf que j'ai fait un petit test et il me considere absoluement tout, la base de données que j'avais extraite était obtenu apres un passage par plusieurs filtre. Si je filtre banane par exemple il me le prendra quand meme en compte les cases banane. Je ne veux que les produits malades, ceux qui ont une petite marge, c'est eux que je devrais reconcevoir pour les rendre plus abordables.
Je veux que qu'il ne me considère que les lignes où
Il y a le mot Premier dans la colone B
Il n'y ait pas le mot Rés dans la colone H
Le chiffre dans la colonne I soit inférieur a 10.


Sinon pour ce qui est de l'ecriture des données j'ai réussi je n'ai pas réussi a changer la ligne c'est a dire uqe je peux mettre chacun dans le bonne colonne mais pas dans la bonne ligne.
Je veux par exemple que tout soit donné ligne 10.

Quelle est la signification de end(XlUp)?

j'arrete de demander la j'ai l'esprit trop embrouiller, j'arrete la pour les question.


Merci, je commence a mieux cerner plein de chose


Et au revoir

bonne soirée


Y a t-il un moyen d'intégrer la considération de ces filtre dans la base de calcul
 
S

Seb

Guest
Bonjour a tous.

Le code de Thierry marche parfaitement, même un peu trop, il me considère toutes les données hors il y a des données saines que je n'ai pas besoin de traiter. De plus j'ai reussi a toucher a tout et ai compris plein de choses, mais je n 'arrive pas a changer la ligne où sont envoyes les donnés, il me commence à la ligne 1, or je les veux plus bas.
J'ai mis le fichier original (et cette fois thierry je me suis vraiment fait c.... pour le rendre meconnaissable, paranoïa auto oblige....).

Et je dois avoué que je suis encore surpassé, je vous envoie un fichier ou dans chaque feuille, j'ai les etapes. Tout est mieux ordonné.

Merci d'avance


Bonne journée

Ps le fichier etait trop lourd j ai du en retirer un peu
 

Pièces jointes

  • Extract_vrai.zip
    47.6 KB · Affichages: 35

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 210
Messages
2 107 298
Membres
109 796
dernier inscrit
aelgar