Effacer résultats sélection précédente vba

Bonjour,

J'ai un petit problème sur une macro que je suis en train de réaliser.
J'ai créé un bouton qui permet d'afficher le détail de la masse salariale en fonction du centre de coûts sélectionné.

En dessous de ce détail, je cherche à effectuer plusieurs lignes de sous totaux. J'en suis là. La ligne ci dessous a donc pour objectif de faire apparaître "Total CDI 2011" dans une cellule bien précise. Jusque là tout va bien.

Cells(activecell.Row, 5).FormulaLocal = "=SI(E12 = ""C Nature contrat"" ; ""Total CDI 2011""; ""Erreur"")"

Mon problème réside dans le fait que lorsque je lance une nouvelle sélection, la cellule nommée "Total CDI 2011" de l'ancienne sélection reste en place. Je me retrouve donc avec plusieurs cellules nommées de cette manière à mesure que je change de centre de coût.

J'espère que vous pourrez m'éclairer, car en attendant, je suis bloquée..

Merci d'avance,
Très bonne journée

11 réponses

  1. Je ne me suis pas envoyée la bonne version sur le pc perso ce soir.

    Toutefois, j'aimerais savoir s'il existerait une macro (imbriquée dans ma macro) permettant d'expliquer que :

    A chaque changement de sélection (c'est à dire dès qu'on sélectionne un centre de coûts différent via la boîte de dialogue parmi la liste déroulante), on puisse supprimer tout ce qu'a engendré la sélection précédente, et recommencer de zéro ou presque.

    Ce que je n'ai peut-être pas précisé au départ, c'est que j'ai entré toutes les fonctions entre le Sub et End Sub du Userform. Du coup, quand je change de centre de coûts, les résultats se superposent au lieu de se remplacer. Il est là mon problème.

    Merci d'avance pour votre aide
    0
    1. Comment ca transparent?
      Oui pardon, je vous ai écrit de 2 postes différents d'où le pseudo différent oups.
      0
      1. Contributeur
        Comment ca transparent?
        Quand on répond à un demandeur on s'attend à un commentaire de sa part (il y en a même qui disent merci parfois... si si...)
        J'ai horreur de parler dans vent, l'impression de déranger...
        eric
        0
      2. Excusez moi si c'est l'impression que j'ai donné. La n'était pas le but. Quand on est au travail, il faut que ca aille vite.. Du coup, j'ai pu oublier d'y mettre la forme, désolée.

        Par contre, ayant un langage plutôt basique pour le moment sur vba, j'avoue ne pas avoir compris tous vos conseils avisés.
        0
    2. Contributeur
      Pas de pb
      Mais comme je suis transparent sur tes 2 posts (mag55 c'est toi aussi non ?) je me retire avec plaisir...
      eric
      0
      1. Après relecture, même moi je m'y perds. C'est beaucoup trop compliqué sans le fichier sous les yeux.

        Je peux vous le mettre en ligne ce soir si vous voulez. Seul bémol, la macro comporte des fichiers liés qui doivent être nécessairement ouverts pour qu'elle s'exécute correctement que je ne pourrai vous joindre...
        0
        1. En bidouillant, j'ai trouvé une façon alternative de réaliser mes lignes de sous-totaux sans faire appel à d'autres cellules:

          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)

          etc etc sur la même ligne.

          En français, cette ligne doit permettre de faire apparaître un sous total en fonction du type de contrat (CDD, CDI, Interim,..). Chaque ligne correspond à un employé et la colonne E donne le type de contrat pour chaque employé.

          Mais ceci ne règle toujours pas mon problème. Lorsque je change de centre de coûts, mes précédents sous totaux restent et faussent donc mes nouveaux calculs..
          0
          1. Contributeur
            Bonjour,

            C'est une formule que tu mets, et qui fait toujours référence à E12.
            Toutes tes formules ramènent donc la même valeur, c'est normal.
            Il faudrait peut-être changer la formule selon la ligne non ?

            eric
            0
            1. attention
              et en plus, pas fait attention, mets :
              If Cellule.Value = "Total CDI 2011" or Cellule.Value = "Erreur" Then
              0
              1. et en plus, pas fait attention, mets :
                If Cellule.Value = "Total CDI 2011" or Cellule.Value = "Erreur" Then
                0
                1. bonjour,

                  essaie ce petit bout de code :

                  Dim Plage As Range, Cellule As Range

                  Set Plage = Range("E1", "E60000")

                  For Each Cellule In Plage
                  If Cellule.Value = "Total CDI 2011" Then
                  Cellule.Value = ""
                  End If
                  Next Cellule
                  Cells(activecell.Row, 5).FormulaLocal = "=SI(E12 = ""C Nature contrat"" ; ""Total CDI 2011""; ""Erreur"")"
                  0
                  1. Melanie, je n'arrive pas à lire ta réponse!

                    J'ai une poisse phénoménale aujourd'hui...
                    0
                    1. bonjour,

                      essaie ce petit bout de code :

                      Dim Plage As Range, Cellule As Range

                      Set Plage = Range("E1", "E60000")

                      For Each Cellule In Plage
                      If Cellule.Value = "Total CDI 2011" Then
                      Cellule.Value = ""
                      End If
                      Next Cellule
                      Cells(activecell.Row, 5).FormulaLocal = "=SI(E12 = ""C Nature contrat"" ; ""Total CDI 2011""; ""Erreur"")"
                      0