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
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 SubDans 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 Suble 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 SubFaites 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"....
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"
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 "
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 SubIl 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
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 ...)
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 Subun 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 ColLa 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 SubRien 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 SubCe 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 .
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