Userform et tableau

salut,

désolé j'ai pas trop eu le temps de bossé dessus, j'ai fait quelque modif sur le bouton Raz feuil 1 ainsi que sur l'userorm2

la prochaine étape est de renvoyer le total de chaque ligne tableau 4 dans la colonne "perte par agent sur paye (NET)" de la

11greve-013-3.xlsm (61.25 Ko)

ligne de l'agent correspondant...

bonne soirée

Re

désolé j'ai pas trop eu le temps de bossé dessus, j'ai fait quelque modif sur le bouton Raz feuil 1 ainsi que sur l'userorm2

La variable lastcol ne sert pas. On n'a pas besoin de cela avec les tableaux structurés. Donc comme je vous l'ai déjà écrit, inutile d'ajouter des variables si on peut éviter.

Hum... votre code RAZ comme ceci à la place de ce que vous avez fait

Sub RAZ_Synthese() 'effacer synthese

With Feuil1.ListObjects(1)
    If .ListRows.Count > 0 Then .DataBodyRange.Delete
End With

Dim i As Integer
With Feuil2.ListObjects("Tableau3")
        For i = .ListColumns.Count - 1 To 3 Step -1
            .ListColumns(i).Delete
            Feuil2.Cells(.HeaderRowRange.Row - 1, i).ClearContents
            Feuil2.Cells(.HeaderRowRange.Row - 2, i).ClearContents
        Next i
    If .ListRows.Count > 0 Then .DataBodyRange.Delete
End With
End Sub

Dans l'userform2, vous avez juste rajouté le code Private Sub CommandButton4_Click() ?
Le bouton Tout supprimer ne supprime rien dans la feuil1 mais uniquement dans la feuil2. Normal ?
-
En gros que doit supprimer le bouton Tout Supprimer ?


la prochaine étape est de renvoyer le total de chaque ligne tableau 4 dans la colonne "perte par agent sur paye (NET)"

Le tableau 4 c'est sur quelle feuille ?
Si c'est la feui2, comment voulez-vous procéder ? Une fois le calcul sommesicouleur effectué ? sur base d'un bouton ?

salut,

La variable lastcol ne sert pas. On n'a pas besoin de cela avec les tableaux structurés. Donc comme je vous l'ai déjà écrit, inutile d'ajouter des variables si on peut éviter.

je sais mais j'ai un message d'erreur si je ne la mets pas

Le tableau 4 c'est sur quelle feuille ?

Si c'est la feui2, comment voulez-vous procéder ? Une fois le calcul sommesicouleur effectué ? sur base d'un bouton ?

oups , une erreur c'est dans le tableau 1.

je ne suis pas arrivé à rajouter les totaux sur chaque colonne du tableau en feuil 2

En gros que doit supprimer le bouton Tout Supprimer ?

le bouton supprimer est là pour supprimer toutes les colonnes du tableau en feuil 2 si l'équipe n'a pas changer et que c'est pour une nouvelle grève.

je suis assez occupé et malheureusement je n'arrive pas à faire tout les test désiré afin d'éviter les bug...

bonne soirée et merci

je sais mais j'ai un message d'erreur si je ne la mets pas

Je vous ai donné le code à utiliser dans mon message précédent. Donc prenez celui-là


je ne suis pas arrivé à rajouter les totaux sur chaque colonne du tableau en feuil 2

On modifie le code Sommesicouleur qui ajoutera le total votre colonne "perte par agent..." dans la feuil1.
Allez dans le module 2 et remplacez le code par celui-ci dessous

Sub SommeSiCouleur()
Dim sommecouleur
Dim i As Integer, Col As Integer, lig As Integer
Dim lo As ListObject

Set lo = Worksheets("Feuil2").ListObjects("Tableau3")

With lo
        .ListColumns(.ListColumns.Count).DataBodyRange = 0 'remise à zero des totaux

        For i = 1 To .ListRows.Count 'calcul total si couleur
            For Col = 3 To .ListColumns.Count - 1
                If .DataBodyRange(i, Col).Interior.ColorIndex = 44 Then
                    sommecouleur = sommecouleur + .DataBodyRange(i, Col).Value
                End If
            Next Col

            If sommecouleur > 0 Then
                'ajout total en feuil2
                lo.DataBodyRange(i, Col) = sommecouleur

                'mise a jour perte par agent sur paye (NET) en feuil1
                With Feuil1.ListObjects(1)
                    lig = WorksheetFunction.Match(lo.DataBodyRange(i, 1), .ListColumns(1).DataBodyRange, 0)
                    .DataBodyRange(lig, 4) = sommecouleur 'ajout total
                    lig = 0
                End With

                sommecouleur = 0
            End If
        Next i
    End With
End Sub

le bouton supprimer est là pour supprimer toutes les colonnes du tableau en feuil 2 si l'équipe n'a pas changer et que c'est pour une nouvelle grève.

Dans l'USF2, remplacez le code Private Sub CommandButton4_Click par celui ci-dessous

Private Sub CommandButton4_Click() ' supprimer toutes les colonnes sauf la dernière
Dim i As Integer

With Feuil2.ListObjects("Tableau3")
    For i = .ListColumns.Count - 1 To 3 Step -1
        .ListColumns(i).Delete
        Feuil2.Cells(.HeaderRowRange.Row - 1, i).ClearContents
        Feuil2.Cells(.HeaderRowRange.Row - 2, i).ClearContents
        Next i
    If .ListRows.Count > 0 Then .DataBodyRange.Delete
End With

' Vider listview
ListView1.ListItems.Clear
End Sub

Faites un test et dites-moi si ok pour passer au point suivant

salut dan,

voilà j'ai modifié avec vos codes tout est super, pas de bug, ça roule.

j'ai continué, dans la colonne 4 du tableau 1 je calcul le cout de la grève en NET à partir du coef en B4 feuil 1, ça fonctionne mais lorsque je change la valeur le calcul ne se fait pas automatiquement , il faut que je trouve une solution...

prochaine étape le calcul de la quote-part de chacun en mettre dans la feuil3 (data) peut-être créer un tableau à voir, je réfléchi à faire une option dans ce calcul de la quote-part : la recalculer si certain jour de grève certain des non gréviste ne veulent pas participer à "l'effort de grève"....

8greve-013-4.xlsm (63.54 Ko)

Le code RAZ Synthese n'est pas celui que je vous ai donné ici -->https://forum.excel-pratique.com/s/goto/1175793
Merci de le remplacer d'autant qu'il est plus court, sans quoi je dois à chaque fois recommencer dans le fichier de travail que j'ai ici à chaque fois que vous postez un fichier


j'ai continué, dans la colonne 4 du tableau 1 je calcul le cout de la grève en NET à partir du coef en B4 feuil 1, ça fonctionne mais lorsque je change la valeur le calcul ne se fait pas automatiquement , il faut que je trouve une solution..

A priori, cela n'est pas compliqué, il suffit de faire un nouveau code qui change automatiquement la colonne 4 dès que vous modifiez la valeur en B2. Je regarde cela mais il faut d'abord savoir si une fois les totaux ajoutés depuis le code sommesicouleur, il se peut qu'il y ai des modifications (exemple ajout d'un agent ou modifier un TH...). Vous voulez que je regarde ou pas ?


prochaine étape le calcul de la quote-part de chacun en mettre dans la feuil3 (data) peut-être créer un tableau à voir, je réfléchi à faire une option dans ce calcul de la quote-part : la recalculer si certain jour de grève certain des non gréviste ne veulent pas participer à "l'effort de grève"....

Là vous devez m'expliquer pourquoi vous voulez mettre cette info dans la feuille DATA. Donnez un exemple


Autre point : dans la feuille 1 je vois un montant total en D21. vous pouvez faire autrement avec les tableaux structurés. Faites comme ceci
- Sélectionnez les cellules A21 à T21
- clic droite et choisir Supprimer -> lignes de tableau (attention vous devez absolument voir "Ligne de tableau")
- Une fois la ligne supprimée, sélectionnez une cellule
- dans le menu excel, cliquez sur l'onglet "Création de tableau" et cochez la case "Ligne Total". cela crée une nouvelle ligne 21
- Allez sur la cellule D21 et choisissez SOMME dans la liste déroulante

BONJOUR,

désolé trop de bricolage à la maison pour avancer sur mon projet aussi vite que je le souhaite

voilà j'ai rajouté le calcul de la quote-part en feuille DATA, cela me permet ensuite de répartir le cout journalier par agent. il sera calculé

en multipliant le cout journalier de la grève (grève totale) par la quote part de chaque AGENt ce qui donnera ce qu'on appellera " l'effort collectif"

13greve-013-4.xlsm (70.51 Ko)

Bonjour

désolé trop de bricolage à la maison pour avancer

Pas de soucis pour moi. Je avais proposé de regarder


Mes commentaires :

1. Vous avez placé une macro Private Sub Worksheet_Change(ByVal Target As Range) dans un module. Elle n'a rien à faire là et le code est déjà dans la feuille DATA. Donc à effacer
2. Vous utilisez encore l'instruction Lastrow. Ne sert pas vous êtes avec des tableaux structurés.
3. Attention à l'instruction Enableevents. Si votre code plante entre les deux instructions pendant l'exécution, vous perdrez l"utilisation des macros événementielles utilisables dans excel et vous n'aurez d'autre choix que de fermer excel et donc tous les fichiers ouverts.

Pour moi vous compliquez avec deux codes. Puisque le total dans la colonne D est fonction de B4 feuil1, on pouvait simplement faire avec un code de 4 ou 5 lignes. Je vous l'avais écrit dans mon post précédent. Mais à vous de voir

Que se passe-t-il si vous changez la valeur de B4 après coup dans la feuil1 ?

bonjour Dan

Que se passe-t-il si vous changez la valeur de B4 après coup dans la feuil1 ?

Rien malheureusement .... ça ne marche pas, j'essaie de modifier.

Vous utilisez encore l'instruction Lastrow. Ne sert pas vous êtes avec des tableaux structurés.

je vais essayer de m'y faire

Attention à l'instruction Enableevents. Si votre code plante entre les deux instructions pendant l'exécution, vous perdrez l"utilisation des macros événementielles utilisables dans excel et vous n'aurez d'autre choix que de fermer excel et donc tous les fichiers ouverts.

je n'en avais pas conscience comment puis-je modifier ?

. Vous avez placé une macro Private Sub Worksheet_Change(ByVal Target As Range) dans un module. Elle n'a rien à faire là et le code est déjà dans la feuille DATA. Donc à effacer

c'est un oublie !

je voudrais maintenant réfléchir à rajouter dans userform2 une option afin de modifier une journée de grève (les agents en grève ou pas)

ainsi que dans l'userform1 la possibilité de modifier un taux horaire et si je veux allez plus loin prendre en compte le changement de taux horaire en cours de grève ...

bonne journée.

Rien malheureusement .... ça ne marche pas, j'essaie de modifier.

1. Justement c'est ce que je voulais faire depuis le début. A vous de voir si je me penche là dessus ou pas car cela supprime les deux codes que vous avez fait.

je n'en avais pas conscience comment puis-je modifier ?

2. Nul besoin avec ce que je voulais vous proposer avant dans mon post de jeudi -> https://forum.excel-pratique.com/s/goto/1176205
Et là pas besoin de votre colonne H en feuille Data


EDIT :

3.

je voudrais maintenant réfléchir à rajouter dans userform2 une option afin de modifier une journée de grève (les agents en grève ou pas)

Que voulez-vous dire par "modifier une journée" ?
S'il s'agit de supprimer des agents qui ne sont pas en grève, je pense que c'est assez simple. Il suffit de passer l'usf2 en modification (ajout d'un bouton Modifier), vous sélectionnez les agents en question non en grève dans la liste, puis un click sur modifier pour supprimer la ligne dans les feuilles 1 et 2
Il faut penser d'abord aux actions qui pourraient être faites

4.

ainsi que dans l'userform1 la possibilité de modifier un taux horaire et si je veux allez plus loin prendre en compte le changement de taux horaire en cours de grève ...

A faire via la recherche. Déjà à quoi sert la textbox "a donner" ? ou qu'avez-vous prévu pour cette textbox

bonjour DAN,

S'il s'agit de supprimer des agents qui ne sont pas en grève, je pense que c'est assez simple. Il suffit de passer l'usf2 en modification (ajout d'un bouton Modifier), vous sélectionnez les agents en question non en grève dans la liste, puis un click sur modifier pour supprimer la ligne dans les feuilles 1 et 2

oui c'est tout à fait ça , l'objectif est de modifier les grévistes du jour en cas d'erreur d'entrée .

A faire via la recherche. Déjà à quoi sert la textbox "à donner" ? ou qu'avez-vous prévu pour cette textbox

l'objectif est que dans la textebox "a donner" soit d'affiché le montant calculé en colonne " à rembourser à l'agent "

image

en ce moment j'essaie de calculer la perte collective par agent ce qui donne : la somme de toutes les pertes collectives journalière X par la quote-part de chacun

ça sera affiché en colonne 5 du tableau1

j'ai quelque problème pour récupérer les bonnes valeurs ...

bonne journée

Bonjour,

Bon apparemment vous ne répondez rien aux points 1 et 2. Donc je laisse tomber.

l'objectif est que dans la textebox "a donner" soit d'affiché le montant calculé en colonne " à rembourser à l'agent "

D'après la vue c'est la colonne i qui est à récupérer dans cette feuil1
Voici le code à placer dans l'USF1

Private Sub ComboBox2_Change()
TextBox3 = Feuil1.ListObjects(1).DataBodyRange(ComboBox2.ListIndex + 1, 8).Value
End Sub

Il vous reste à choisir dans la combobox2 pour avoir l'info en textbox3
Ensuite à quoi sert le bouton Afficher ou que doit-on faire ?


en ce moment j'essaie de calculer la perte collective par agent ce qui donne : la somme de toutes les pertes collectives journalière X par la quote-part de chacun
ça sera affiché en colonne 5 du tableau1
j'ai quelque problème pour récupérer les bonnes valeurs ...

donnez quelques explications si vous voulez que je regarde

bonjour,

désolé j'ai répondu rapidement du travail, je vais détailler .

pour le point 1 , oui je veux bien que vous regardiez, j'avais mis ça de coté pensant que ça serait plus facile. L'objectif est de transformer le Brut en NET

pour le point 2, il faut que je reprenne l'historique, je n'y ai pas vraiment réfléchi et travaillé sur la modif

donnez quelques explications si vous voulez que je regarde

en ce qui concerne le calcul de la perte collective

image

je voudrais que la somme de chaque perte journalière (ligne 21 de chaque colonne de jour de grève) soit multiplié par la quote-part de chacun et que le résultat soit affiché en colonne 5 du tableau1.

dans un seconde temps, juste pour un suivi je voudrais détaillé par agent et par jour ce montant en feuil "feuil de calcul" dans un tableau.

actuellement le code que j'ai fait et faux je n'ai pas pris le bon chiffre (j'ai pris le total en fin de ligne ...)

12greve-013-6.xlsm (81.04 Ko)

pour le point 1 , oui je veux bien que vous regardiez, j'avais mis ça de coté pensant que ça serait plus facile. L'objectif est de transformer le Brut en NET

Ok. Il me faut reprendre le sujet.

Le but final est que le montant total en feuil2 - Colonne I soit enregistré en colonne D de la feuil1 en tenant compte de la cellule B4
SI je prends un exemple :
feuil2 - I4 = 648
feuil1 - D6 = 648 x 0.8 (0.8 étant la valeur en B4)
Est-ce correct ?


pour le point 2, il faut que je reprenne l'historique, je n'y ai pas vraiment réfléchi et travaillé sur la modif

Le point 2 sera lié au point 1 dans ce que je pense vous proposer


je voudrais que la somme de chaque perte journalière (ligne 21 de chaque colonne de jour de grève) soit multiplié par la quote-part de chacun et que le résultat soit affiché en colonne 5 du tableau1.

Ok. Si je prend C21 en feui2 vous avez 750. Comme calculez-vous la quote-part de chacun des 14 Agents ?

NB : attention vous avez toujours ce code Private dans le module 1.... je l'ai supprimé de votre dernier fichier posté. Voyez chez vous

bonjour DAN,

ok. Il me faut reprendre le sujet.

Le but final est que le montant total en feuil2 - Colonne I soit enregistré en colonne D de la feuil1 en tenant compte de la cellule B4

SI je prends un exemple :

feuil2 - I4 = 648

feuil1 - D6 = 648 x 0.8 (0.8 étant la valeur en B4)

Est-ce correct ?

c'est la case I5 mais vous avez tout à fait compris le principe

Ok. Si je prend C21 en feui2 vous avez 750. Comme calculez-vous la quote-part de chacun des 14 Agents ?

Sub CalculerQuotePart()
    ' Définir la feuille de travail
    Dim feuille As Worksheet
    Set feuille = ThisWorkbook.Sheets("DATA")

    ' Définir la plage de données
    Dim tableau As ListObject
    On Error Resume Next
    Set tableau = feuille.ListObjects("tableau2")
    On Error GoTo 0

    ' Vérifier si le tableau existe
    If Not tableau Is Nothing Then
        ' Obtenez le total de la colonne 2
        Dim totalColonne As Double
        totalColonne = Application.WorksheetFunction.Sum(tableau.ListColumns(2).DataBodyRange)

        ' Boucler à travers chaque ligne du tableau
        Dim Ligne As ListRow
        For Each Ligne In tableau.ListRows
            ' Vérifier si la ligne appartient au tableau
            If Not Ligne Is Nothing Then
                ' Calculer la quote-part
                Dim quotePart As Double
                If totalColonne <> 0 Then
                    quotePart = Ligne.Range(1, 2).Value / totalColonne
                Else
                    quotePart = 0
                End If

                ' Afficher le résultat dans la colonne 3 de la même ligne
                Ligne.Range(1, 3).Value = quotePart
            End If
        Next Ligne
    Else
        MsgBox "Le tableau2 n'existe pas dans la feuille DATA."
    End If
End Sub

un simple produit en croix, je pense que ça doit pouvoir se simplifier...

merci DAN

bonne journée

Bonjour,

Avant d'aller plus loin, pourquoi avez-vous modifié le code sommesicouleur en ajoutant ceci ??

'        ' Boucle pour la somme de chaque nouvelle colonne
'        For Col = 3 To .ListColumns.Count - 1
'            sommecouleur = 0
'            For i = 1 To .ListRows.Count
'                If .DataBodyRange(i, Col).Interior.ColorIndex = 44 Then
'                    sommecouleur = sommecouleur + .DataBodyRange(i, Col).Value
'                End If
'            Next i
'            ' Ajout de la somme en bas de la colonne
'            lo.ListColumns(Col).DataBodyRange(.ListRows.Count + 1, 1).Value = sommecouleur
'        Next Col

La somme des colonnes est automatique dans un tableau structuré. Dans "autre point", je vous l'ai expliqué ici --> https://forum.excel-pratique.com/s/goto/1176205
Donc ces lignes sont à supprimer.
Evitez de compliquer avec des codes si c'est une fonctionnalités d'excel.

EDIT :

1. normal que vous avez deux fois Agent10 dans la feuil2 ?
2. Si par hasard en feuil1 le taux de conversion en B4 = 0 vous voulez quoi dans la colonne la colonne D ?
Pas besoin de me reposter le fichier, je supprime dans votre dernière version

1. normal que vous avez deux fois Agent10 dans la feuil2 ?

oui faute de frappe lors d'un essai.

Avant d'aller plus loin, pourquoi avez-vous modifié le code sommesicouleur en ajoutant ceci ??

je ne me souviens pas avoir modifié...

pour la somme j'ai bien compris mais dans ce cas je veux faire la somme des cases colorées, je suis obligé de passer par la formule somme si couleur, non?

2. Si par hasard en feuil1 le taux de conversion en B4 = 0 vous voulez quoi dans la colonne la colonne D ?

je ne m'etais pas posé la question, il ne devrait jamais y avoir 0, par défaut je mettrais 1

bonne journée

pour la somme j'ai bien compris mais dans ce cas je veux faire la somme des cases colorées, je suis obligé de passer par la formule somme si couleur, non?

Oui mais il ne fallait pas aller modifier le code proposé pour ajouter des sommes au bas des colonnes.
Voici ce que vous devez modifier pour tenir compte du taux de conversion en B4 de la feuil1
1. Dans le module 2
, remplacez tout le code Sommesicouleur par celui-ci

Sub SommeSiCouleur()
Dim sommecouleur As Double
Dim i As Integer, Col As Integer, lig As Integer
Dim lo As ListObject

Set lo = Worksheets("Feuil2").ListObjects("Tableau3")

With lo
    .ListColumns(.ListColumns.Count).DataBodyRange = 0 ' remise à zero des totaux

    ' Boucle sur les lignes
    For i = 1 To .ListRows.Count
        ' Boucle sur les colonnes
        For Col = 3 To .ListColumns.Count - 1
            If .DataBodyRange(i, Col).Interior.ColorIndex = 44 Then
                sommecouleur = sommecouleur + .DataBodyRange(i, Col).Value
            End If
        Next Col

        If sommecouleur > 0 Then
            ' Ajout total en Feuil2
            lo.DataBodyRange(i, Col) = sommecouleur

            ' Mise à jour perte par agent sur paye (NET)
            With Feuil1.ListObjects(1)
                lig = WorksheetFunction.Match(lo.DataBodyRange(i, 1), .ListColumns(1).DataBodyRange, 0)
                .DataBodyRange(lig, 4) = sommecouleur * Feuil1.Range("B4").Value ' ajout total x taux conversion
            End With

            sommecouleur = 0
        End If
    Next i
End With
End Sub

Rien ne change par rapport à l'utilisation de votre userform, j'ai uniquement rajouté une instruction pour que le résultat de la colonne D tienne compte du taux de conversion mentionné en B4.

2. Ajout code en feuil1
- Faites un click droite sur m'ongelt "feuil1"
- Choisir l'option "Visualiser le code"
- Collez le code ci-dessous dans la fenêtre

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B4")) Is Nothing Then
    Call SommeSiCouleur
End If
End Sub

Ce code changera le résultat en colonne D si vous changez B4. Il vous sert uniquement à modifier la colonne D si par hasard vous deviez changez le taux de conversion utilisé initialement lorsque vous avez utilisé l'USF 2 pour ajoutez des données.


Autre point déjà évoqué précédemment (https://forum.excel-pratique.com/s/goto/1176615), dans votre dernier fichier vous avez de nouveau laissé le code Private Sub Worksheet_Change(ByVal Target As Range). De nouveau à supprimer.

Dites moi ce que je dois regarder pour la suite

bonjour Dan,

j'ai tout modifier, j'ai pu constater que dans les 2 derniers jours de grève que j'ai rajouté , la somme des couleurs ne s'est pas faite.

Autre chose que j'ai constaté lorsque que j'utilise la flèche de tri dans les colonnes, les tableaux de chaque feuille ne sont pas associés, je pense que ça peut poser

un problème .

9greve-013-6.xlsm (74.03 Ko)

je regarde pour la suite, j'ai commencé à faire une petite explication du contenu du tableau, je fini ça et je vous le transmet

j'ai tout modifier, j'ai pu constater que dans les 2 derniers jours de grève que j'ai rajouté , la somme des couleurs ne s'est pas faite.

Ok. Mais la somme des couleurs est bien ajoutée. je ne vois pas le souci....

Autre chose que j'ai constaté lorsque que j'utilise la flèche de tri dans les colonnes, les tableaux de chaque feuille ne sont pas associés, je pense que ça peut poser...

Je n'ai pas compris votre souci. Quelle flèche de tri ? Les flèches en haut de chaque tableau sont des flèches pour filtrer les infos.

NB : j'ai remplacé le 2ieme Agent 10 par Agent 15 dans les trois feuilles pour éviter tout doublon

Rechercher des sujets similaires à "userform tableau"