Création d'une macro VBA complexe HELP !!!

Création d'une macro VBA complexe HELP !!! - VB/VBA/VBS - Programmation

Marsh Posté le 25-03-2009 à 12:19:21    

Bonjour,  
J’ai besoin de votre aide pour la création du macro VBA relativement complexe surtout quand on y connaît rien du tout.
Il faudrait que je crée un fichier regroupant des informations de 2 autres fichiers.
Un fichier étant une base de données et l’autre des résultats.  
 
Ex :  
 
Base de données:
AA | Granny | Pomme | Fruit
AB | Golden | Pomme | Fruit
AC | Gala | Pomme | Fruit
BA | Orange | Agrume | Fruit
BB | Clémentine | Agrume| Fruit
CA | Bintje | Pomme de terre |Légume
CB | Ratte | Pomme de terre |Légume
DA |Choux de bruxelle | Choux | Légume
DB | Choufleur |Choux | Légume|
 
Ventes :  
AA | 12
AB | 5
AC | 9
BA | 33
BB | 2
CA | 12
CB | 11
DA | 15
DB | 1  
 
Résultat : (tableau généré par la macro)
Pommes | 26
Agrume | 35
TOTAL FRUIT | 61
Pomme de terre | 23
Choux | 16
TOTAL LEGUME | 39
 
La macro doit comparer des données de la base et des ventes pour afficher le bon résultat sur la nouvelle feuille. Si vous pouvez m’aider a construite cette macro, je vous en remercie 1000 fois.  
 
Salutations.  
 
Vincent.


Message édité par V i n c e n t le 30-03-2009 à 10:01:57
Reply

Marsh Posté le 25-03-2009 à 12:19:21   

Reply

Marsh Posté le 26-03-2009 à 07:51:29    

Personne pour me donner un coup de main ?

Reply

Marsh Posté le 27-03-2009 à 10:39:28    

Bonjour
 
Tu devrais encore plus condenser ton message... Ce qui est rigolo vu que ton pseudo est tres aéré...
Bref, ca donne pas envie de lire en somme.
 
Un petit screen ou meme le fichier pour reellement comprendre a quoi ressemble et le dictionnaire et ce qu'il y a dedans ?
 
Cordialement


Message édité par SuppotDeSaTante le 27-03-2009 à 10:41:00

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-03-2009 à 09:40:30    

Zut, j'avais même pas fait attention que ça s'affichait comme ça.
Bonne remarque, je modifie immédiatement.


Message édité par V i n c e n t le 30-03-2009 à 10:02:37
Reply

Marsh Posté le 30-03-2009 à 10:51:53    

Bonjour
 
Je ne vois pas trop en quoi cela est tres compliqué, car réellement ton 1er fichier on s'en fou non ? Il definit seulement les clés pour chaque entité. Fruit commence par A ou B, Pomme de terre par C etc.
 
Tu prends ton second fichier, et tu :  

  • sommes tout ce qui commence par A pour avoir le total des Pommes
  • sommes tout ce qui commence par B pour avoir le total des Agrumes
  • sommes tout ce qui commence par A ou B pour avoir le total des Fruits
  • sommes tout ce qui commence par C pour avoir le total des Pommes de terre
  • sommes tout ce qui commence par D pour avoir le total des Choux
  • sommes tout ce qui commence par C ou D pour avoir le total des Legumes


Meme pas besoin de macro pour ca...  
Une liaison de donnée, un SOMME.SI, un SOUS.TOTAL ou a la limite un TDC (Tableau croisé dynamique) et tu as tout ce dont tu as besoin. (Si tu veux pas toucher au fichier de resultat, sinon tu le fais directement dedans.)
 
Tu créés un nouveau fichier Excel, tu vas dans Données, Créer une requete, tu selectionnes fichier Excel, Bouton Ok, tu vas chercher ton fichier, tu selectionnes les champs qui t'importent, tu selectionnes la cellule ou mettre les données (A1).
Tu selectionnes la ligne 1, Données, Filtrer, Filtre automatique.  
Regardes du coté de la fonction SOUS.TOTAL pour les filtres,  
ou  
tu peux faire un SOMME.SI() directement sur le tableau, sans avoir recours aux filtres automatiques.
 
Cordialement

Message cité 1 fois
Message édité par SuppotDeSaTante le 30-03-2009 à 10:55:49

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 30-03-2009 à 16:03:29    

J'ai refait ton exemple en 10 minutes (le temps de retaper les données) avec un tableau croisé dynamique. Mais pour ça il faut que tu demandes un seul fichier en entrée de la forme :
AA|Granny|Pomme|Fruit|12
Si les deux premiers fichiers sont issues d'une base de données avec une petite requête SQL, ça se fait sans problème.
 
 


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
Reply

Marsh Posté le 31-03-2009 à 13:37:47    

j'avoue que l'idée d'une macro c'est pour tout faire automatiquement et qu'un utilisateur lambda puisse utiliser le fichier à ma place.
 
Archangel, je veux bien tes lumières.

Reply

Marsh Posté le 31-03-2009 à 14:00:13    

Un fichier contenant des données liées, je vois pas ou est le souci qu'un utilisateur lambda utilise ton fichier....
 

SuppotDeSaTante a écrit :

Une liaison de donnée, un SOMME.SI, un SOUS.TOTAL ou a la limite un TDC (Tableau croisé dynamique) et tu as tout ce dont tu as besoin.


Que ca soit en TDC ou autre...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 14:12:56    

FICHIER EXCEL
 
 
Voila un premier essai (merci danix)
 
Un onglet avec les tables.
Un onglet avec les données (data)
Un onglet avec le tableau final.
 
Les données sont mises à jour gràce à la macro.
Il faudrait maintenant que le tableau final se créé tout seul avec des sous totaux par familles et quelque soit le nombre de produits, familles etc....
 
Le tableau actuel est fixe et donc ne tiens pas en compte de la nouvelles listes de données réactualisée.
 
Merci pour votre aide.

Reply

Marsh Posté le 31-03-2009 à 14:22:00    

Comme on le dit depuis le debut, que ca soit archangel ou moi, tu fais ca avec un tableau croisé dynamique...!
En se servant juste de l'onglet TABLE ca prend aller, 30sc... et ca se met a jour tout seul, forcement, un TDC...
 
Je ne vois vraiment ou se situe ton souci, dsl.
 
Edit : Jette un oeil au fichier et dis moi si c'est ca que tu veux


Message édité par SuppotDeSaTante le 31-03-2009 à 14:27:34

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 14:22:00   

Reply

Marsh Posté le 31-03-2009 à 14:35:16    

V i n c e n t a écrit :

j'avoue que l'idée d'une macro c'est pour tout faire automatiquement et qu'un utilisateur lambda puisse utiliser le fichier à ma place.
 
Archangel, je veux bien tes lumières.


 
Tu fusionnes tes deux premières listes comme indiqué dans mon poste précédent :
AA|Granny|Pomme|Fruit|12
Comme tu peux le voir, les dénominations et les quantités sont sur la même ligne.
 
Ensuie tu utilise la fonction Tableau croisé dynamique d'Excel (voir google si tu ne connais pas)


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
Reply

Marsh Posté le 31-03-2009 à 14:49:43    

Pour commencer, merci pour votre aide et patience.
Je doit dire que je suis plutot fénéant ou pragmatique dans mon travail.
 
Mon but est de produire en 2 clics un fichier final avec mise en forme automatique etc...
Sur le coté estétique du tableau, j'arriverai probablement à me débrouiller avec la/les macros.
Mais pour les données je connais pas assez.
 
Je connais les TCD et les fontions SOMME, mais le but et vraiment de bosser une bonne fois pour la mise en oeuvre du truc et après je suis pénard.
 
Pour info, mes données (AA, AB ...) c'est environ 6500 lignes.
 
 

Reply

Marsh Posté le 31-03-2009 à 15:33:40    

+1 avec le fichier de dje69r
 
avec rajout du code suivant
ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotCache.Refresh
a la fin de la macro "comptage"

Reply

Marsh Posté le 31-03-2009 à 15:34:50    

86vomito33 a écrit :

+1 avec le fichier de dje69r
 
avec rajout du code suivant
ActiveSheet.PivotTables("Tableau croisé dynamique1" ).PivotCache.Refresh
a la fin de la macro "comptage"


 
Ah en effet j'ai pas mis le fichier ou j'actualise le TCD.
 
Merci 86vomito33  :jap:


Message édité par SuppotDeSaTante le 31-03-2009 à 15:35:09

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-03-2009 à 16:54:34    

En tout cas, en ajoutant le code de 86vomito33, ça marche pour la réactualisation du TCD.  
 
Je confirme.
 
Merci.


Message édité par V i n c e n t le 31-03-2009 à 16:55:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed