VBA sommer certaines lignes d'un tableau

Bonjour à toutes et tous,

Dans le tableau ci-joint, je voudrais (en VBA) grouper (et sommer) les montants repris en colonnes Q & R lorsque la colonne G est égale à 400000 pour une même écriture comptable qui est numérotée grâce à la colonne D.

Effectivement dans mon résultat final il ne peut y avoir qu'une ligne avec la colonne G étant = 400000

Un exemple est plus parlant :

14test.xlsx (18.20 Ko)
image

Si vous avez une idée je suis preneur car je tourne en rond depuis pas mal de temps.

Bonjour,
Joins un fichier pour une aide adaptée du forum.
Cdlt.

Hello! Jean-Eric,

Je l'ai joint regarde :

image

Est-ce que quelqu'un aurait une ébauche d'idée ?

Je ne demande pas spécialement la réponse "tout faite" (quoique j'avoue que là ça m'aiderait ) mais je suis toujours en train d'apprendre le code, j'avance pas à pas, au fur et à mesure des recherches.. et de mes échecs.. mais là contrairement l'habitude, je coince.. mais ici je ne vois pas ce que je dois faire.

C'est comme si je devais faire un TCD mais en VBA.. et là je sêche.

Merci d'avance,

Fred

bonjour Fredjo,

ce n'est qu'un début

17test-71.xlsb (29.47 Ko)

Dict ? Dictionnaire ? je ne connais pas du tout cette commande ! ça doit être ce qui me manquait car effectivement le résultat à l'air top !

Merci déjà BsAlv !! vous pouvez m'en dire un peu plus concernant cette commande ?

Je teste et je vous reviens avec le résultat !

Enfin, je vois que vous sauvegardez en .xlsb, pourquoi?

re

un xlsb et un xlsm contiennent tous les 2 des macros, mais un xlsb sous forme binair. On dit que cela prend moins d'espace et fonctionne plus vite, mais je ne sais pas le prover.

ce dictionaire fait 2 choses, il regarde si un clef (=les 8 premières colonnes) existe déjà et si oui, il mémorise un index (ligne dans le vecteur aOut)

Il y avait une difficulté, les colonnes 17 et 18 sont numérique mais sous forme de "texte", c'est pourquoi il faut le traduire avec "cdbl". Les autres colonnes sont ceux du premier occurence du clef.

Merci pour les précisions Bart !

Il est trop tard pour tester encore aujourd'hui. Je vous fais un retour demain dès que possible.

Bonne soirée !

Bonjour,
Une approche Power Query.
Une question : Doit-on conserver toutes les colonnes ?
Cdlt.

22test.xlsx (32.08 Ko)

Merci Jean-Eric ! Super en Power Query ! mais la dame qui doit utiliser le fichier n'est peut-être pas assez habile par rapport à ce qu'elle fait d'habitude --> je lui avait créé un bouton avec la macro derrière, elle n'avait qu'à cliquer A savoir aussi que ceci n'est qu'une petite partie la macro que j'ai déjà créée pour en arriver là, donc je devrais intégrer l'existant et Power Query.

Je vais quand-même y regarder car c'est clair qu'on sous-utilise Power Query alors que c'est franchement génial !

@bart, je n'arrive pas à comprendre pourquoi dans certain cas de votre exemple le formatage de certaines cellules est perdu (voir ci-dessous) l'écran.

Vous avez une idée ?

J'ai exécuté le script pas à pas mais je ne comprends pas pourquoi sur certaines cellules cela ne fonctionne pas :

image image

GRAND merci déjà parce que à part ce soucis de format, le contenu est super !!

Fred

bonjour Fredjo,

la macro ne fait rien avec ces formats, elle colle les valeurs. Avant que vous lancez la macro, c'est préférable de modifier le format en date pour les colonnes "date" et en "monnaie" pour les colonnes "monnaie", etc.

Yes ce que que je vais faire.

GRAND MERCI.

Bonjour Bart,

Je me permets de vous soliciter à nouveau.
Votre code fonctionne à merveille il somme bien mes lignes (et delete les lignes inutiles). C'est parfait !

Par contre j'ai maintenant le même genre de problématique mais je n'arrive pas à répliquer ce que vous aviez fait.

Voici un extrait dans un screenshot :

Pour obtenir le montant de 197.86, je pars du montant de TVA pour obtenir le montant HTVA (TVA / 21 * 100)
Dans votre script vous faites la somme des deux montants en colonne 17 et cela donne bien 197.85

image

(en annexe mon fichier de test où vous pouvez retrouver mes macros)

Je pense qu'en ligne 4 de ma macro "creation_data", au lieu de faire :

Sheets("mep").Cells(i, 18).Value = Format(Sheets("data").Cells(f, 10).Value / 21 * 100, "0.00") 'montant TVA

Il faudrait sommer les montants quand la colonne "1" = 3 et quand la colonne "5" = 2 .. de cette façon cela serait correct et je n'aurais plus de problèmes d'arrondis..

MERCI d'avance de votre aide !!!!

Fred

6injection-test.xlsm (101.92 Ko)

re,

comme ceci, cumulation des montants de "mep" jusqu'au TVA précédent ou montant atteint

    '----------------------------------------------------------------------------------------------------------------
          'injecte le VATBASE
          '----------------------------------------------------------------------------------------------------------------

          If Sheets("data").Cells(f, 8) = "8104" Then

               'Sheets("mep").Cells(i, 18).Value = Format(WorksheetFunction.RoundDown(Sheets("data").Cells(f, 10).Value / 21 * 100, 2), "0.00") 'montant TVA avec round down
               HTVA = Round(Sheets("data").Cells(f, 10).Value / 0.21, 2)     'montant TVA calculé
               somme = 0
               b = False
               For f1 = f - 1 To 1 Step -1   'sommer les lignes précédentes jusqu'au moment où on atteint le HTVA
                    If Sheets("data").Cells(f1, 8) = "8104" Then Exit For     'si ligne précédent est de nouveau TVA = exit
                    somme = somme + Sheets("data").Cells(f1, 10)     'cumuler ces montants précédents
                    Delta = somme - HTVA     'écart entre les 2
                    b = (Abs(Delta) < 0.05)  'écart moins que 5 centiemes pour le HTVA ==> excellent
                    If b Then Exit For       'drapeau TRUE
                    If somme > HTVA Then Exit For     'chiffre dépasse HTVA calculé
               Next
               If b Then 'si notre somme a un écart de moins de 5 centiemes, on prend ce chiffre
                    Sheets("mep").Cells(i, 18).Value = Round(somme, 2)     'on prend la somme (arrondi) au lieu du faux chiffre
               Else
                    Sheets("mep").Cells(i, 18).Value = HTVA 'autrement on prend ce (faux?) chiffre
               End If

          Else

               Sheets("mep").Cells(i, 18).Value = Format(Sheets("data").Cells(f, 10).Value, "0.00")     'montant htva
               'Sheets("mep").Cells(i + 1, 18).Value = Format(Sheets("data").Cells(f, 10).Value * -1, "0.00") 'montant htva

          End If
Rechercher des sujets similaires à "vba sommer certaines lignes tableau"