XL 2019 Macro si texte présent plusieurs fois alors insérer une ligne total au dessus

Clement92

XLDnaute Nouveau
Bonjour le Forum,

Premier post soyez indulgent et n'hésitez pas a me faire des remarques ;)

Malgré mes connaissances basiques en VBA et mes nombreuse recherches je n'ai pas trouvé de solution a mon problème.

J'ai un tableau avec des noms de fournisseurs dans une colonne et des totaux de commande dans les colonnes suivantes. Certains fournisseurs apparaissent plusieurs fois (nombre aléatoire) et d'autre une seul fois.

Mon tableau fait plus de 16.000 lignes donc utiliser des filtres serait très fastidieux :) (et je suis un peu flemmard il faut bien l'avouer :D)

Je demande donc votre aide pour faire une macro qui :
1. Détermine si le nom du fournisseur est présent plusieurs fois
2. Compte le nombre de fois ou il est présent
3. Si il est présent plusieurs fois, insérer une ligne au dessus de la première occurrence trouvée
4. Inserer dans chaque colonne de chiffre (il y en a 4) un total ( (=somme(Bx:By) ) dans la ligne insérée au dessus du nombre de cellule équivalent au nombre de fois ou le fournisseur est trouvé (ex : Total B2:B4 en B1 si 3 fois le fournisseur "toto" en A2, A3, A4)

J'ai préalablement trier mon tableau en alpha par fournisseur.

J'espère être assez clair et si besoin je peux donner plus de détails.

Je met un tableau en exemple et j'espère qu'un bon samaritain pourra me venir en aide car je dois rendre mon étude à la fin de la semaine et je sèche complet :)

Par avance merci de votre temps et de votre aide !!!

Bonne soirée

Clément
 

Pièces jointes

  • Exemple.xlsx
    10.8 KB · Affichages: 24

Clement92

XLDnaute Nouveau
Bonjour sousou,

La finalité sera bien un TCD. Mais avant de pouvoir le faire j'ai besoin d'identifier les fournisseurs selon le montant total de chaque colonne suivante. J'ai des macros et des filtres ensuite, qui me permettent de les classer et les analyser selon différents critères. Malheureusement un TDC ne correspond pas exactement à mon besoin (ou alors je ne maîtrise pas assez pour réussir a l'exploiter pleinement :) )

Etant donné le nombres de fournisseurs et leur classement anarchique (extrait d'un logiciel) j'ai besoin dans un premier temps d'avoir ces totaux avant de poursuivre l'étude pour mon boss (qui risque de changer les critères de sélection en fonction des résultats qui l'intéressent ;) )

Bonne journée
 

Clement92

XLDnaute Nouveau
Bonjour plv23,

Merci pour votre retour ! Pour l'insertion des lignes au dessus de chaque résultat c'est parfait !

Il me reste à trouver comment insérer un formule jusqu’à la prochaine ligne vide :) je vais essayer de trouver quelque chose. Si entre temps vous trouver une idée je suis preneur ;)

Encore merci pour votre aide.

Bonne journée

Clément
 

plv23

XLDnaute Nouveau
Voici une solution qui reste perfectible mais qui fonctionne....
Le traitement n'est pas très "clean" au niveau des dernières lignes du tableau.
Le total se fait au-dessous et non au dessus.
Et il faut déterminer automatiquement la zone de traitement jusqu'à la dernière ligne non vide.
Mais bon, c'est un début.... Si quelqu'un peut améliorer ce code, je suis également preneur !;)
A bientôt !
 

Pièces jointes

  • test.xlsm
    21.9 KB · Affichages: 10

Clement92

XLDnaute Nouveau
Re-Bonjour plv23


Merci pour ce bel effort ! Malheureusement j’ai une erreur lors de l’exécution « Compile Error : Can’t find project or library »


Sur la ligne : « xTitleId = "KutoolsforExcel" »



Dans la déclaration :



« Dim Rng As Range

Dim WorkRng As Range

On Error Resume Next

xTitleId = "KutoolsforExcel"

Set WorkRng = Application.Selection

Set WorkRng = Range("A5:A24") '---> Attention modifier la zone si besoin

Application.ScreenUpdating = False

For i = WorkRng.Rows.Count To 2 Step -1

If WorkRng.Cells(i, 1).Value <> WorkRng.Cells(i - 1, 1).Value Then

WorkRng.Cells(i, 1).EntireRow.insert

End If

Next

Application.ScreenUpdating = True



N’ayant pas trouvé à quoi cela faisait référence, j’ai tenté de la supprimer mais l’erreur reste sur la ligne suivante.



Quel serait la solution ?



Merci



Clément
 

Discussions similaires