Supprimer résultats d'un Userform

Mag55 -  
 Mag55 -
Bonjour,

Je mets actuallement à jour des fichiers de masse salariale en vue de les automatiser au maximum. En gros, la masse salariale est répartie par centre de coût. J'ai donc créé un bouton via Userform sur VBA qui permette de sélectionner le centre de coût souhaité.

Entre le sub et end sub de ce userform, j'ai enregistré un tas d'actions que je souhaitais être exécutées dès la sélection du centre de coût.

Mon problème: Lorsque je change de sélection en passant par la boîte de dialogue créée, mes résultats du nouveau centre de coûts se superposent aux anciens qui ne s'effacent pas automatiquement.

Du coup, comme la masse salariale n'est pas figée d'un centre de coûts à l'autre, j'ai des lignes d'employés qui restent et qui n'ont rien à faire dans ma nouvelle sélection.

Je me disais qu'en essayant de créer une fonction à la fin du userform qui permette de supprimer les résultats précédents dès lors qu'un centre de coûts différent est sélectionné résoudrait mon problème.

Seulement, je n'ai aucune idée concernant la manière dont je peux faire fonctionner une telle macro, je compte donc un peu (beaucoup) sur vos lumières.

A l'avance, merci merci merci.

A voir également:

10 réponses

marion8316 Messages postés 75 Statut Membre
 
Bonjour,

Si j'ai bien compris, lors de la sélection (Combobox ?) d'un centre de coût, exécution du code.

Ou vont les résultats ? (affichage ou autre)

Si vous voulez que je vous fournisse une solution, le plus simple est de m'envoyer par mail le code et la grille Userform.

Merci

Didier
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Bonjour,

on ne demande pas à l'utilisateur d'envoyer par mail le code, mais de le mettre à disposition ici, afin que cela puisse profiter à tout le monde sur le site.

Cordialement.
0
Mag55
 
Exactement Didier. Lorsque le centre de coût est sélectionné via la boîte de dialogue, les résultats s'affichent automatiquement dans la même feuille.

Je vous ai envoyé ci dessous le détail de mon code qui ne doit pas faire peur ! Beaucoup de lignes, mais très peu d'opérations au final comme je l'explique plus bas.

Merci
0
marion8316 Messages postés 75 Statut Membre
 
Bonjour Mr Chossette9,

Afin d'éviter des manipulations inutiles du style : Copier/coller, il est plus facile de loader l'application directement avec les sources.

La solution sera positionnée sur le site avec bien sur le source modifié.

Cordialement

Didier
0
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 312
 
Du coup, il est utile de proposer à l'utilisateur de déposer son fichier sur le site cijoint.fr, et de copier le lien généré dans une réponse, pour que tout le monde accède au fichier et puisse proposer ses solutions.

Cordialement.
0
Mag55
 
Je peux vous envoyer le code mais pas les fichiers puisqu'ils concernent de la masse salariale à grande échelle. Sera-t-il tout de même possible d'en faire quelque chose? Bien cordialement
0
marion8316 Messages postés 75 Statut Membre
 
Pouvez vous procéder comme l'a dit Chossette9 (voir ci-dessus).

Pour les fichiers même principe en copiant une dizaine d'enregistrements dans de nouveaux fichiers.

Ou si vous ne pouvez pas , donnez moi la structure des fichiers.

Merci

Didier
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Bonjour,
Commencez déjà par envoyer tous les codes contenus dans le userForm ainsi que les éventuelles Sub qu'il est susceptible d'appeler... On verra déjà plus clair... peut être!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mag55
 
Private Sub Label1_Click()

End Sub

Private Sub ListBox1_Change()

'Cellule liée à la sélection ds boîte de dialogue
Range("$A$2").Value = ListBox1.Value

End Sub

Private Sub OK_Click()

Unload Me

Dim i As Integer, j As Integer

i = [B65536].End(xlUp).Row
j = [IV5].End(xlToLeft).Column

'Filtre élaboré pour obtenir matricules selon centre de coût sélectionné
Workbooks("Ctrl Gestion -SG- analyse par postes -0611.xls").Sheets("RUB2"). _
Columns("A:S").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"A1:A2"), CopyToRange:=Range(Cells(12, 2), Cells(i, 2)), Unique:=False

Range(Cells(12, 2), Cells(i, 2)).Select

Rows("13:13").Select
Selection.Insert Shift:=xlDown

Range("B14:B1000").Select
With Selection.Interior
.ColorIndex = 2
.Pattern = xlSolid
End With

'Entre les formules de la 1ère ligne qui sera ensuite recopiée
Cells(14, 3).FormulaLocal = "=SI($B14<>"""";SI(C$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(C$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(C$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 4).FormulaLocal = "=SI($B14<>"""";SI(D$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(D$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(D$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 5).FormulaLocal = "=SI($B14<>"""";SI(E$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(E$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(E$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 6).FormulaLocal = "=SI($B14<>"""";SI(F$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(F$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(F$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 7).FormulaLocal = "=SI($B14<>"""";SI(G$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(G$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(G$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 8).FormulaLocal = "=SI($B14<>"""";SI(H$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(H$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(H$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 9).FormulaLocal = "=SI($B14<>"""";SI(I$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(I$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(I$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 10).FormulaLocal = "=SI($B14<>"""";SI(J$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(J$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(J$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 11).FormulaLocal = "=SI($B14<>"""";SI(K$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(K$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(K$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 12).FormulaLocal = "=SI($B14<>"""";SI(L$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(L$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(L$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 13).FormulaLocal = "=SI($B14<>"""";SI(M$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(M$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(M$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"
Cells(14, 14).FormulaLocal = "=SI($B14<>"""";SI(N$12=""Eff"";SOMME.SI('[ETP 2011-06.xls]TB-EFFMO'!$A:$A;$B14;'[ETP 2011-06.xls]TB-EFFMO'!$Q:$Q);SI(N$12=""R ""&$P$1&"" "";SOMME($G14:$H14;$J14:$M14);RECHERCHEV($B14;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$A:$S;EQUIV(N$12;'[Ctrl Gestion -SG- analyse par postes -0611.xls]RUB2'!$1:$1;0);""faux"")));"""")"

'Etire la ligne de formules définie plus haut

Set SourceRange = Worksheets("Essai juin").Range("C14:N14")
Set fillRange = Worksheets("Essai juin").Range(Cells(14, 3), Cells(i, 14))
SourceRange.AutoFill Destination:=fillRange

' Selectionne la première cellule du tableau
Range("B14").Select

' Boucle tant que pas vide
Do While Not (IsEmpty(activecell))
Nbligne = Nbligne + 1
Selection.Offset(1, 0).Select
Loop

'1ere ligne total
activecell.Offset(1, 3).Select
Selection = "Total CDI 2011"

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(F14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(G14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(H14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = (activecell.Offset(0, -1)) / (activecell.Offset(0, -2))

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(J14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(K14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(L14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(M14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDI", Range("(N14)").EntireColumn)

'2eme ligne total
activecell.Offset(1, -9).Select
Selection = "Total CDD 2011"

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(F14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(G14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(H14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.NumberFormat = "0.0%"
If (activecell.Offset(0, -1)) = "" Then activecell = "0" Else activecell.Formula = (activecell.Offset(0, -1)) / (activecell.Offset(0, -2))

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(J14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(K14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(L14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(M14)").EntireColumn)

activecell.Offset(0, 1).Select
Selection.Value = Application.SumIf(Range("(E14)").EntireColumn, "CDD", Range("(N14)").EntireColumn)

'3eme ligne
activecell.Offset(1, -9).Select
Selection = "Total INT 2011"

activecell.Offset(0, 1).Select
If Q5 = "" Then activecell = "0" Else activecell.Formula = activecell.Offset(0, 8) / Q5

'4eme ligne
activecell.Offset(1, -1).Select
Selection = "Total MO 2011"

activecell.Offset(0, 1).Select
If Q6 = "" Then activecell = "0" Else activecell.Formula = activecell.Offset(0, 8) / Q6

'Prov
activecell.Offset(1, 6).Select
Selection = "+ Prov manuelles SAP"

'Total gal
activecell.Offset(2, -7).Select
Selection = "R 2011 SAP"

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.NumberFormat = "0.0%"
activecell.Formula = (activecell.Offset(0, -1)) / (activecell.Offset(0, -2))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

activecell.Offset(0, 1).Select
Selection.Value = Application.Sum(Range(activecell.Offset(-6, 0), activecell.Offset(-3, 0)))

End Sub

Private Sub UserForm_Initialize()

ListBox1.ColumnCount = 1

'Load data into ListBox

ListBox1.List() = Array("184000", "185900", "183200", "185100", "181900", "184300", "183800", "183400", "185400", "184200", "183900")

End Sub

Sub gocombobox()

frmcomb.Show

End Sub
0
Mag55
 
Voila le code. Il peut paraître très long mais en fait pas du tout.

Je pense que les commentaires insérés avant les opérations pourront vous aider à comprendre mon cheminement. Sinon, je reste bien évidemment à votre disposition pour répondre à d'éventuelles questions.

En gros, pour que la macro s'exécute, je vais chercher les données dans 2 fichiers Excel différents. J'ai d'abord nommé de façon automatique ma ligne d'en-têtes: Matricule, Nom, Prénom, CS,.. Prov.

Ensuite, via un filtre élaboré, je suis allée chercher la liste des matricules en fonction du centre de coût sélectionné. Pour remplir toutes les colonnes qui suivent, j'ai utilisé la fonction Recherchev que j'automatise grâce à la macro.

Une fois l'ensemble des données récupérées dans le fichier, j'ai créé une ligne de sous-totaux (CDI, CDD, Interim, MO) puis Total.

C'est à la suite de ces opérations que j'aimerais pouvoir insérer une macro permettant d'effacer TOUUUUTES ces données si la sélection venait à changer.

Merci d'avance pour le temps que vous consacrerez à mon problème.
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Alors si j'ai bien compris, et c'est loin d'être acquis...
Private Sub ListBox1_Change() 
'Cellule liée à la sélection ds boîte de dialogue 
Range("$A$2").Value = ListBox1.Value 
End Sub 

Te permet de choisir la valeur du filtre.
C'est dans cette liste que tu veux, en cas de nouvelle sélection, effacer les données contenues dans ta feuille.
Question 1 : Nom de la feuille dont tu souhaites supprimer les données?
Ensuite, ta macro : Private Sub OK_Click() te permet de, systématiquement et complètement, remplir ta feuille (celle dont je t'ai demandé le nom?) avec formules etc...
Question 2 : Dans cette feuille, tu n'as pas d'autres données à conserver, tu veux bien tout effacer?
Si oui, il suffit, dans ta procédure Private Sub ListBox1_Change() d'ajouter :

Private Sub ListBox1_Change() 
Sheets(NomDeLaFeuilleDontOnVeuxEffacerLesDonnées).Cells.Clear
'Cellule liée à la sélection ds boîte de dialogue 
Range("$A$2").Value = ListBox1.Value 
End Sub 

!!!!!!!!! Teste cette procédure sur une copie de ton classeur!!!!!!!!! Je ne suis pas responsable de l'effacement de toutes tes données!!!!!!!!!!!!!!
0
Mag55
 
Question 1: Je n'ai pas du si mal expliquer car c'est exactement ca!
Question 2: Je souhaiterais juste garder les 12 premières lignes de la feuille qui n'ont rien à voir avec la macro car je les copie-colle pour l'instant d'un classeur à un autre.

En attendant, je vais m'empresser d'essayer cette macro !!!

Et surtout.. MERCI!!!
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 769
 
Ben non n'essaye pas!!! la macro supprime toutes les cellules de la feuille concernée:!!!!
Essaye plutôt celle ci :
Private Sub ListBox1_Change() 
Dim DerLig As Long 
With Sheets(NomDeLaFeuilleDontOnVeuxEffacerLesDonnées) 
    DerLig = .Range("A" & .Rows.Count).End(xlUp).Row 'remplace le "A" par la lettre de ta plus longue colonne 
    .Range("A13:H" & DerLig).Clear 'ici H représente ta dernière colonne remplie
End With 
'Cellule liée à la sélection ds boîte de dialogue  
Range("$A$2").Value = ListBox1.Value  
End Sub
0
Mag55
 
SUPER!!!!

Déjà, ca efface!!!

A présent, j'aimerais juste pouvoir épargner les 12 premières lignes de la feuille si possible :)
0
Mag55
 
Aie.. Ca ne fonctionne pas finalement. J'ai l'impression que la macro ne réitère pas les formules pour le centre de coûts sélectionné suivant.

J'ai essayé de bidouiller mais rien n'y fait.
0
Mag55
 
Après plusieurs essais, je pense que si j'arrivais "simplement" à supprimer les lignes correspondant au code de mes sous-totaux (c'est-à-dire à partir du commentaire '1ere ligne total jusqu'à 'Total gal, ceci résoudrait mon problème et me permettrait d'exécuter correctement la macro que pikaju m'a donné plus haut.
0