grosse base de donnée à traiter par TABLO vba

jpp1961

XLDnaute Junior
Bonjour les exceliens

Excel 2003

Je remercie toutes les personnes qui prendront le temps de lire mon post.
Je suis vraiment pas doué en TABLO vba , et sollicite votre aide, et de toute esquisse de solution.
J’ai une grosse base de données d’historique de commandes (de 2011 à 2017)
d’environ 48 000 lignes à traiter. Et de 67 colonnes.

Cette base se trouve dans un onglet « Base de données»
Il faut que je ressorte le dernier prix PUHT acheté par article et les transposés dans l’onglet « Extraction »

Problématique :
Temps de traitement (Utilisation de Tableau en VBA c’est du chinois pour moi)
Les codes articles peuvent être présents plusieurs fois dans la base de données

Le PUHT n’est pas présent dans la base mais c’est le résultat de :
Colonne « MONTANT COMMANDE HT » / Colonne « QTE COMMANDE. »

Onglet Base de données :
Colonne [2]: « RAISON SOCIALE »
Colonne [9] : « NUM. COMMANDE »
Colonne [21] : « CODE ARTICLE»
Colonne [22] : « LIBELLE 1 ARTICLE»
Colonne [23] : « LIBELLE 2 ARTICLE»
Colonne [26] : « QTE COMMANDEE» cellule format « STANDARD »
Colonne [27] : « UNITE DE COMMANDE »
Colonne [28] : « MONTANT COMMANDE HT»
Colonne [32] : « DATE EDITION» cellule format date « jj/mm/aaaa »
Colonne [55] : « LIBELLE COMPTE ACHAT»

Onglet d’extraction :
Colonne destination
Colonne [1] : « CODE ARTICLE»
Colonne [2] : « LIBELLE 1 ARTICLE»
Colonne [3] : « LIBELLE 2 ARTICLE»
Colonne [4] : « QTE COMMANDEE»
Colonne [5] : « UNITE DE COMMANDE »
Colonne [6] : « PUHT » ( COMMANDE HT » / Colonne « QTE COMMANDE. )
Colonne [7] : « MONTANT COMMANDE HT »
Colonne [8] : « RAISON SOCIALE »
Colonne [9] : « DATE EDITION »
Colonne [10] : « NUM. COMMANDE »
Colonne [11] : « LIBELLE COMPTE ACHAT»
Je joins un EXTRAIT du fichier EXCEL.
et joyeuse fêtes à tous
 

Pièces jointes

  • extract commande 2011_2017 _forum.xls
    2.5 MB · Affichages: 38

Dranreb

XLDnaute Barbatruc
Bonjour.
Avec la référence au projet GigIdx cochée :
VB:
Sub ExtrDernPUHT()
Dim TR(), Art As SsGr, LR&, TD(), C&
ReDim TR(1 To 10000, 1 To 11)
For Each Art In Gigogne(Feuil2.[A2], 21)
   TD = Art.Co(Art.Co.Count)
   TD(1) = TD(28) / TD(26)
   LR = LR + 1
   For C = 1 To 11: TR(LR, C) = TD(Choose(C, 21, 22, 23, 26, 27, 1, 28, 2, 32, 9, 55)): Next C, Art
Feuil1.[A2].Resize(UBound(TR, 1), UBound(TR, 2)).Value = TR
End Sub
 

Pièces jointes

  • GigIdx.xlsm
    67.9 KB · Affichages: 30

mapomme

XLDnaute Barbatruc
Supporter XLD
Bon réveillon à tous :) jpp1961, Staple1600, Dranreb, pierrejean,

J'y vas aussi de ma macro.
  • cliquer sur le bouton HOP! de la feuille "Extraction"
  • cliquer sur le bouton #48 000 de la feuille "base de données" crée une base de données d'environ 48000 lignes par recopie des 47 premières lignes de la base

edit :
En chargeant le fichier joint, il semblerait (sans doute problème entre Excel2003 et Excel2010) qu'on puisse perdre l'association entre les boutons et les macros associées. Il faut donc ré-associer les boutons avec leur macro.
  • sur la feuille "extraire", cliquer droit sur le bouton Hop!
  • sélectionner dans le menu "Affecter une macro..."
  • dans la liste "Macros dans", sélectionner "ce classeur"
  • dans liste des macros, sélectionner "Extraire"
  • cliquer sur OK
  • sur la feuille "base de données", cliquer droit sur le bouton #48 000
  • sélectionner dans le menu "Affecter une macro..."
  • dans la liste "Macros dans", sélectionner "ce classeur"
  • dans liste des macros, sélectionner "lignes48000"
  • cliquer sur OK
 

Pièces jointes

  • jpp1961- extract commande- v1.xls
    90 KB · Affichages: 71
Dernière édition:

zebanx

XLDnaute Accro
Bonjour à Tous,

En vous souhaitant un très joyeux noel !
Vous m'avez perso. bien gâté cette année avec tous ces codes, et encore ces codes là qui me surprennent avec, entre autres, la copie d'array en array (génial @mapomme) que je vais m'empressez de sauvegarder.

Bon déjeuner avec vos proches, passez une bonne journée !
zebanx

arbre_10.gif
 
Dernière édition:

jpp1961

XLDnaute Junior
Bon réveillon à tous :) jpp1961, Staple1600, Dranreb, pierrejean,

J'y vas aussi de ma macro.
  • cliquer sur le bouton HOP! de la feuille "Extraction"
  • cliquer sur le bouton #48 000 de la feuille "base de données" crée une base de données d'environ 48000 lignes par recopie des 47 premières lignes de la base

edit :
En chargeant le fichier joint, il semblerait (sans doute problème entre Excel2003 et Excel2010) qu'on puisse perdre l'association entre les boutons et les macros associées. Il faut donc ré-associer les boutons avec leur macro.
  • sur la feuille "extraire", cliquer droit sur le bouton Hop!
  • sélectionner dans le menu "Affecter une macro..."
  • dans la liste "Macros dans", sélectionner "ce classeur"
  • dans liste des macros, sélectionner "Extraire"
  • cliquer sur OK
  • sur la feuille "base de données", cliquer droit sur le bouton #48 000
  • sélectionner dans le menu "Affecter une macro..."
  • dans la liste "Macros dans", sélectionner "ce classeur"
  • dans liste des macros, sélectionner "lignes48000"
  • cliquer sur OK
Bonjour,
apparement la macro fait son travail, et le temps éxécution impeccable c'est super.
je vais vérifier quelques résultats pour voir si conforme.
Je te remercie.
Peux-tu m'expliquer ta méthode dans les grandes lignes.
 

jpp1961

XLDnaute Junior
Bonjour.
Avec la référence au projet GigIdx cochée :
VB:
Sub ExtrDernPUHT()
Dim TR(), Art As SsGr, LR&, TD(), C&
ReDim TR(1 To 10000, 1 To 11)
For Each Art In Gigogne(Feuil2.[A2], 21)
   TD = Art.Co(Art.Co.Count)
   TD(1) = TD(28) / TD(26)
   LR = LR + 1
   For C = 1 To 11: TR(LR, C) = TD(Choose(C, 21, 22, 23, 26, 27, 1, 28, 2, 32, 9, 55)): Next C, Art
Feuil1.[A2].Resize(UBound(TR, 1), UBound(TR, 2)).Value = TR
End Sub
Bonjour,
je te remercie d'avoir pris le temps de m'aider
dabs vba dans référence je n'ai pas GigIdx
j'ai GenValObj 1.0 Type Library et Genesis Teletext Server 1.0
 

jpp1961

XLDnaute Junior
Bonjour,
désolé pour cette réponse tardive,
j'ai eu des pb perso.
Apparement j'ai une erreur d'éxecution (Erreur définie par l'application ou par l'objet)
sur la ligne:
Sheets("extraction").Range("A2:" & Cells(derlin, dercol).Address).ClearContents
La solution de mapomme a l'air de marcher je vais controler les résultats.
Mais j'aime également bien ton code à condition de résoudre le problème d'erreur.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
dans référence je n'ai pas GigIdx
Si c'est bien dans votre dossier de compléments que avez installé le GigIdx.xlam à partir du classeur précurseur GigIdx.xlsm joint au #3, il suffit pour l'ouvrir de cocher temporairement, coté Excel cette fois, le complément "Fonction Gigogne"

Remarque: Juste après l'installation, c'est inutile, il est forcément ouvert, et une fois son projet mis en référence dans celui de votre classeur d'application le CBxL.xlam sera ouvert automatiquement si nécessaire à l'ouverture de votre classeur.
 
Dernière édition:

jpp1961

XLDnaute Junior
La solution de mapomme est parfaite et le temps d'éxécution est trop top. C'est la solution que je vais retenir.
Je remercie également Dranreb et pierrejean du temps qu'il sont pris pour rédiger les codes. Je vais les étudier un peu plus tard.
Je vous souhaite à tous une bonne fin d'année 2017 et tous mes voeux pour 2018
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 837
dernier inscrit
Ugo