XL 2013 Macro : Qté * CU avec nombre variable de ligne

jerome91

XLDnaute Junior
Bonjour à tous,

Je suis depuis cet après-midi sur une macro dont l'objectif est de calculer le coût de différentes primes en fonction de différents services ou catégories.

Pour cela, la "procédure" est :
1) remplir l'onglet Catégorie colonne A avec les différents services (il y en a de renseigner mais il peut y en avoir plus)
2) dans l'onglet Primes, appuyer sur le bouton "bonhomme" (lien avec la macro1)
et cette dernière duplique les catégories dans 3 tableaux
3) ensuite il faut renseigner dans le tableau du haut, les quantités par type de prime et par catégorie
4) ensuite le coût unitaire pour ces dernières et idem par catégorie (tableau du milieu)
5) ensuite là où je bloque dans ma macro, c'est mettre une formule d'office (dans le tableau du bas) qui fasse la quantité * le CU, je souhaiterais que cette formule se mette directement à l'étape 2), et qu'elles se mettent jusqu'à la dernière catégorie (là il y en a 7 mais il peut y avoir bien plus).

Pourriez-vous m'aider sur le point 5) où je bloque ?

Je suis débutant, peut-être qu'il est aussi possible de modifier le début mais en tout cas ça fonctionne, mais il y a peut-être plus simple :)

De plus, comme vous le verrez j'ai rajouté un bouton "éclair" pour gagner du temps pour supprimer les lignes.

Merci.

Jérôme
 

Pièces jointes

  • Test variables.xlsm
    21 KB · Affichages: 48

Lone-wolf

XLDnaute Barbatruc
Bonjour Jérôme

Pour commencer, il faut ajouter Application.CutCopyMode = 0 et Application.GoTo [A1] avant End sub.
Pour les primes, sans base de données de celles-ci (les quantités par type de prime et par catégorie), comment comptes-tu faire??
 

jerome91

XLDnaute Junior
Bonjour,

L'objectif de ce fichier est de calculer des provisions de primes par catégorie. Quand la partie Quantité * CU fonctionnera je pourrais tester le fichier avec des valeurs "prises au hasard" avant utilisation au réel.

De plus, à quoi serve les 2 instructions que tu mindiques ?

En espérant avoir répondu à ton interrogation.

Jérôme
 

Lone-wolf

XLDnaute Barbatruc
Re

La première sert à arrêter la sélection du tableau, l'autre enlève la sélection(en bleu). Remplace ta macro par celle-ci

VB:
Sub Macro1()
Dim X As Integer, I As Integer, Z As Integer, Y As Integer

Application.ScreenUpdating = False

X = Application.WorksheetFunction.CountA(Sheets("Catégorie").Range("A:A"))
Z = 13 + X
Y = 20 + X * 2

With Sheets("Primes")
For I = 1 To X
.Rows(6).Insert
Next I
For I = 1 To X
.Rows(Z).Insert
Next I
For I = 1 To X
.Rows(Y).Insert
Next I
End With

Sheets("Catégorie").Range("A1:A" & Range("A65000").End(xlUp).Row).Copy
With Sheets("Primes")
.Range("A5").PasteSpecial Paste:=xlPasteValues
.Range("A" & Z - 1).PasteSpecial Paste:=xlPasteValues
.Range("A" & Y - 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = 0
Application.GoTo .[A1]
End With
End Sub

ça j'ai compris. Mais comment veux-tu qu'on fasse pour calculer quantité * CU si il n'y a rien d'inscrit, on doit le deviner?? :rolleyes:o_O
 
Dernière édition:

jerome91

XLDnaute Junior
J'ai fait la modification avec la macro indiquée.

Quand je lances la macro j'ai l'impression que ça supprime les libellés initiales.
Exemple : ce qu'il y a en ligne 9 et 16avant de lancer la macro disparaissent

J'ai rajouté un onglet avec des données "test" qu'il "suffit" de copier dans le tableau 1 et 2 pour vérifier, ces données seront ensuite renseignées à la main.

Merci.

Jérôme
 

Pièces jointes

  • Test variables - V2.xlsm
    24 KB · Affichages: 30

Lone-wolf

XLDnaute Barbatruc
Re

Désolé pour le quack, voici la macro corrigée.

VB:
Option Explicit

Sub Macro1()
Dim X As Long, I As Long, Z As Long, Y As Long, plage As Range


Application.ScreenUpdating = False

X = WorksheetFunction.CountA(Sheets("Catégorie").Range("A:A"))
Z = 13 + X
Y = 20 + X * 2

With Sheets("Primes")
For I = 1 To X
.Rows(6).Insert
Next I
For I = 1 To X
.Rows(Z).Insert
Next I
For I = 1 To X
.Rows(Y).Insert
Next I
End With

With Sheets("Catégorie")
Set plage = .Range("a1:a" & .Range("a" & Rows.Count).End(xlUp).Row)
plage.Copy
End With

With Sheets("Primes")
.Range("a5").PasteSpecial Paste:=xlPasteValues
.Range("a" & Z - 1).PasteSpecial Paste:=xlPasteValues
.Range("a" & Y - 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = 0
Application.GoTo .Range("a1")
End With

End Sub

J'ai mis Long, car il a une plus grande portée ( plus de 2 millions) par rapport a Integer. Voir ici Variables

Pour le reste, désolé, pour moi c'est un peu compliqué.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 335
Membres
102 864
dernier inscrit
abderrashmaen