Userform et tableau
bonjour,
j'ai un fichier que je cherche à simplifier
à partir d'un userform je voudrais renseigne un tableau dans l'onglet DATA mais j'aimerais que les autres tableaux dans les autres onglet soient aussi renseignés
mais je ne vois pas comment faire...
j'ai ensuite un autre problème dans mon userform je fais aussi une recherche et dans la case "à rendre" je voudrais afficher la ligne d'un tableau de l'onglet synthèse mais mon code ne marche pas très bien (colonne 16 de la ligne correspondante de la recherche)
merci pour votre aide.
Bonjour,
Hum... il y a du boulot à faire dans votre fichier....
Supprimez déjà les rowssource dans les combo de votre usf. Vous ne le savez probablement pas mais comme déjà écrit des centaines de fois il faut éviter l'instruction Rowssource qui provoque des soucis avec VBA et plutôt choisir les instruction LIST ou ADDITEM.
Après allez dans votre USF et coller ce code qui sera exécuté à l'ouverture de l'USF
Private Sub UserForm_Initialize()
With Feuil3
ComboBox1.List = .Range("A9:A" & .Range("A" & Rows.Count).End(xlUp).Row).Value
ComboBox2.List = .ListObjects(1).ListColumns(1).DataBodyRange.Value
End With
End Subà partir d'un userform je voudrais renseigne un tableau dans l'onglet DATA mais j'aimerais que les autres tableaux dans les autres onglet soient aussi renseignés
1. Quels tableaux et où dans chaque tableau ?
2. feuille data : pourquoi la colonne F taux horaire contient-elle des fois une formule et des fois pas ?
Crdlt
bonjour,
désolé pour la réponse tardive ... le mail de notification était dans les spams
merci pour l'info sur les rowsources malgré mon interré depuis des années pour vba je reste novice.
dans le tableau DATA les lignes où il n'y a pas de formule ce sont les lignes renseignées à l'aide de mon userform.
je voudrais à partir de mon formulaire renseigner tous les tableaux de façon à ce qu'il rajoute une ligne avant la ligne totale.
je voudrais aussi créer une formule de façon à éviter de 'sauter' de tableaux en tableaux pour avoir le résultat finale .
Function calcul_cout_greve(f As Double, d As Double) As Double
calcul_cout_greve = ((f - 1) * d) - ((f - 1) * d * 0.2)
End Function
je cherche une idée aussi pour rajouter une colonne dans les différent tableaux...
pas facile...
pour explication ce formulaire un peu bizarre sert à repartir le coût d'une grève à toute une équipe alors que seulement certain font grève ...
Bonjour
merci pour l'info sur les rowsources malgré mon interré depuis des années pour vba je reste novice.
Ok pas de soucis. Tout le monde reste novice en quelque sorte... sinon on n'apprendrait plus rien
dans le tableau DATA les lignes où il n'y a pas de formule ce sont les lignes renseignées à l'aide de mon userform.
Pour vous, pensez à enlever les formules qui se trouvent dans le colonne F de votre fichier.
je voudrais à partir de mon formulaire renseigner tous les tableaux de façon à ce qu'il rajoute une ligne avant la ligne totale.
Au vu de vos tableaux répartis dans les feuilles ce n'est pas du tout simple à réaliser. Je peux imaginer que vous allez devoir modifier des choses en tout cas
Vous avez 5 tableaux au format structuré. Ce qui est à priori bien pour ce que vous voulez faire
Voici une chose, à faire dans la feuille Synthèse (Nommé Tableau1) dans le fichier posté
- cliquez dans une cellule de la ligne 22
- dans le menu excel, cliquez sur l'onglet "Création tableau"
- Cochez la case "Ligne total" (cela va créer une nouvelle ligne à la ligne 23 pour vos totaux)
- Pour chaque cellule entre B et R, choisissez la bonne formule dans les listes déroulantes de chaque cellule entre B et R
- supprimez la ligne 24 (anciennement ligne 23) qui ne sert plus
Après vous pouvez procéder de la même manière pour les tableaux, vu que que avez 4 tableaux au format structuré dans les autres feuilles. Ce sera plus simple pour le code à réaliser.
Dites moi si souci pour vous
bonjour et merci pour ta réponse,
la ligne total ne marche pas sur tous les tableaux mais je pense savoir pourquoi (à causes des formules dans les cases)
je penses devoirs tout restructurer afin de facilité les choses
- un tableau par feuille, ce qui devrait me faciliter l'insertion de nouvelles lignes depuis mon userform
- créer une formule pour la quotte part
- créer une formule pour le cout de la grève journalière ...
allez au boulot
la ligne total ne marche pas sur tous les tableaux mais je pense savoir pourquoi (à causes des formules dans les cases)
oui effectivement. Par contre est-ce ok pour la feuille Synthèse ?
un tableau par feuille, ce qui devrait me faciliter l'insertion de nouvelles lignes depuis mon userform
C'est l'idéal évidemment d'autant que vous avez tous vos tableaux au format structuré
J'attends votre retour pour avancer
salut,
j'ai un peu avancé et aussi fait marche arrière ...
j'ai du faire une fausse manip mon userform1 ne s'affiche plus et je ne vois pas pourquoi j'ai fais 200 manip différente et je suis toujours bloqué...
sinon je suis parti de zéro
en feuille 1 il y aura mon tableau de synthèse et en feuille deux je renseignerai à partir d'un userform chaque jour de grève
c'est encore très brouillon mais j'avance par petit pas ...
Bonsoir,
Oulà là, cela n'a plus rien avoir avec le fichier précédent cela....
Déjà allez dans votre module 1 :
1. supprimez toutes les lignes depuis dim MonUserForm as.... jusque la dernière ligne End sub. Ces codes n'ont rien à faire là. Laissez toujours les codes Function. Cela peut servir
2. Ajoutez ce code dans
Sub ajout_Agent()
UserForm1.Show
End SubAssociez ce code au bouton "Ajout Agent" qui est sur votre feuille
Après je ne sais pas pourquoi vous faites tous ces contrôles à l'ouverture de votre userform1 .. mais faites toujours ceci :
Allez dans votre userform1, remplacez le code Initialize par celui ci-dessous
Private Sub UserForm_Initialize()
On Error Resume Next
With Feuil3
With .ListObjects("Tableau5")
If .ListRows.Count > 1 Then
ComboBox1.List = .DataBodyRange.Value
Else: ComboBox1.AddItem .DataBodyRange(, 1).Value
End If
End With
With .ListObjects("Tableau6")
If .ListRows.Count > 1 Then
ComboBox2.List = .DataBodyRange.Value
Else: ComboBox2.AddItem .DataBodyRange(, 1).Value
End If
End With
End With
End SubEnsuite dans votre feuille Data, mettez un titre dans les deux colonnes (on ne sait pas à quoi cela correspond) et préparez les autres colonnes de données
Crdlt
Edit : modifié code Initialize
Private Sub UserForm_Initialize()
On Error Resume Next
With Feuil3
With .ListObjects("Tableau5")
If .ListRows.Count > 1 Then
ComboBox1.List = .DataBodyRange.Value
Else: ComboBox1.AddItem .DataBodyRange(, 1).Value
End If
End With
With .ListObjects("Tableau6")
If .ListRows.Count > 1 Then
ComboBox2.List = .DataBodyRange.Value
Else: ComboBox2.AddItem .DataBodyRange(, 1).Value
End If
End With
End With
End Subbonjour,
je n'ai pas changer car dans la combobox2 je souhaite afficher la colonne A du tableau1 et je ne suis pas arrivé à modifier votre code afin de lui donnée la référence de la feuil1 pour le tableau1 ...
je reste toujours bloqué avec mon userform1
après avoir effacer les lignes de mon tableau avec le bouton RAZ tableur, l'userform ne s'ouvre plus et j'ai le code erreur '91' variable objet ou variable de bloc avec with non defini
merci pour votre retour
Bonjour,
Pas besoin de remettre le code que je vous ai proposé dans mon post précédent s'il est identique.
je n'ai pas changer car dans la combobox2 je souhaite afficher la colonne A du tableau1 et je ne suis pas arrivé à modifier votre code afin de lui donnée la référence de la feuil1 pour le tableau1 ...
Si vous voulez remplir votre combobox1 avec les valeurs de votre tableau1 colonne A, il suffit de remplacer le chiffre 5 par 1 dans le code Initialize que je vous ai proposé.
Faites le test avant de passer à l'étape suivante
salut,
voilà dans mon fichier je ne comprends pas
à partir de l'userform1 je suis censé remplire les tableaux alors qu'en faite il rajoute des lignes hors tableau ...
à partir de l'userform1 je suis censé remplire les tableaux alors qu'en faite il rajoute des lignes hors tableau ...
Avec ce que vous avez comme code, la première dernière ligne est la 6 et comme vous ajoutez 1, l'ajout commence sur la ligne 7.
Il faut procéder différemment car vous utilisez les tableaux au format structuré.
En supposant que vous n'avez qu'un seul tableau structuré par feuille, le code pour ajouter comme ceci :
Private Sub CommandButton1_Click() 'ajouter donnees
Dim lig As Integer
With Feuil1.ListObjects(1)
If .ListRows.Count = 0 Then
.ListRows.Add: lig = 1
Else: .ListRows.Add: lig = .ListRows.Count
End If
With .DataBodyRange
.Item(lig, 1) = TextBox1.Value
.Item(lig, 2) = TextBox2.Value
.Item(lig, 3) = ComboBox1.Value
End With
End With
With Feuil2.ListObjects(1)
If .ListRows.Count = 0 Then
.ListRows.Add: lig = 1
Else: .ListRows.Add: lig = .ListRows.Count
End If
With .DataBodyRange
.Item(lig, 1) = TextBox1.Value
.Item(lig, 2) = TextBox2.Value
End With
End With
End SubEnsuite est-ce qu'une fois les données enregistrées vous devez vider l'USF complète ou pas ?
si oui, je vous donne le code à rajouter
Faites déjà un test
NB : essayez de ne pas remettre à chaque fois votre fichier, j'ai votre dernier fichier posté comme fichier de travail
salut,
merci pour votre aide j'y suis finalement arriver
mais j'ai qd même un probléme dans le tableau 4 feuille 2 je voudrais commencer à la ligne 3 mais ça bug un peu ...
Pourquoi vous remettez le fichier alors que je l'ai déjà ?
mais j'ai qd même un probléme dans le tableau 4 feuille 2 je voudrais commencer à la ligne 3 mais ça bug un peu ...
Vous me posez une question alors que je vous ai donné la réponse à utiliser.
Si vous me demandez mon avis et n'utilisez pas ce que je vous donne....
bonjour,
si si j'utilise ce que vous me dite ... et ça me sert beaucoup
je vous remet le fichier pour montrer que malgré tout j'avance et je suis pas contre n'importe quel conseil !
juste pour d'écrire mes prochaines étapes :
à partir de l'userform2 je souhaite pouvoir rajouter une colonne dans le tableau 4 à chaque jour de grève supplémentaire.
après je veux calculer dans le tableau4 le cout de la grève journalière par agent et plein de truc encore ....
re
si si j'utilise ce que vous me dite ... et ça me sert beaucoup
Non puisque le code d'ajout dans l'userform1 n'est pas celui que je vous ai donné. Vous déclarez d'ailleurs 5 variables, alors qu'une seule suffit.
Votre variable lastrow n'est pas non plus une bonne méthode.
Gardez en mémoire qu'une variable c'est une allocation de mémoire excel et que plus vous en mettez plus cela ralentit l'exécution.
Maintenant à vous de voir, vous faites ce que vous voulez...
à partir de l'userform2 je souhaite pouvoir rajouter une colonne dans le tableau 4 à chaque jour de grève supplémentaire.
D'abord dites moi comment cela fonctionne pour l'ajout d'une colonne
L'userform 2 ne sert qu'à rajouter une colonne par date de grève ?
A quoi correspondent les titres "colonne 3" et "colonne 4" ?
La combobox2 doit contenir quoi à l'ouverture de l'USF ?
edit : Le choix de la combobox1 va où dans la feuille 2 ?
userform2 est déjà créer, la date doit s'insérer en ligne 2 et le QUART en ligne 1 .
c'est pour ça que je voudrais que l'insertion des lignes dans le tableau2 commence à la ligne 3 (je n'y arrive tjs pas)
la case suppression doit afficher la ligne 2 du tableau (DATE) afin de pouvoir effacer une colonne en cas d'erreur .
les colonnes 3 et 4 ne servent pas à grand chose, elles étaient juste là pour des essais.
en C7, il y a la formule cout de la grève (macro déjà dans le module)qui reprendra la valeur de la colonne TH et le valeur qui sera donné par le type de quart (AM et matin=7,5 ; nuit = 9,5 ; 1h = 1), une fois ça réalisé j'aurais bien avancé... tout sera calculé à partir du résultat de cette formule.
si vous avez des idées je suis preneur .
comme je vous ai dit je débute et je me sert de chat gpt pour avoir la base de mon code c'est pour ça qu'il y a surement trop de ligne...
bonne soirée
merci
Bonjour
comme je vous ai dit je débute et je me sert de chat gpt pour avoir la base de mon code c'est pour ça qu'il y a surement trop de ligne...
Hum.... n'oubliez pas que vous avez un enregistreur automatique d'excel. Chat gpt ... mouais mais cela vous donne aussi des résultats bizarres comme je le vois dans le code de votre feuil2 et si vous ne savez pas analyser pas à pas pour comprendre les instructions cela ne vous sert pas.
Donc oubliez un peu cela et demander des explications sur les instructions, je pense que vous avancerez plus vite.
userform2 est déjà créer, la date doit s'insérer en ligne 2 et le QUART en ligne 1 .
c'est pour ça que je voudrais que l'insertion des lignes dans le tableau2 commence à la ligne 3 (je n'y arrive tjs pas)
Ok. J'ai une autre approche à vous proposer.
1. dans votre feuille DATA, on ajoute une colonne dans le Tableau6 qui va servir à mettre le montant des indemnités. Cela vous donne ceci :
2. dans votre feuil2,
---- on met ajoute une colonne via code pour chaque nouvelle Date et on mentionne la date en ligne 4 et les deux premières lettres du quart (ou une seule, mais il faudrait savoir combien de données "quart" vous pouvez avoir
---- pour chaque colonne ajoutée on utilise la ligne 3 pour y placer le "Type de quart" toujours via le code
---- on place une formule dans la colonne pour obtenir le montant (par code ou non) des agents
Dites moi avant que je n'avance sur le fichier et les codes
edit : maintenant il faudrait voir la finalité une fois une colonne rajoutée cela se passe comment si par exemple un agent mentionné en colonne A n'a pas fait grève le jour de la colonne ajoutée ?
cette présentation est parfaite.
je voudrais identifier les grévistes et non gréviste à partir de l'userform2, une liste déroulante ou des cases à cocher ... je ne sais pas encore ce qui est faisable.
les différents quart sont Matin et AM = 7,25 ; Nuit = 9,25 ; 1h = 1
dans mon ancien fichier les jours de grève par agent étaient identifier par une mise en couleur et je me servais de la formule
sommesicouleur pour calculer en bout de ligne le coût de la grève par agent et le coût de la grève de l'équipe par jour sur chaque colonne
les différents quart sont Matin et AM = 7,25 ; Nuit = 9,25 ; 1h = 1
Ok j'ai adapté la feuille DATA en colonne D
je voudrais identifier les grévistes et non gréviste à partir de l'userform2, une liste déroulante ou des cases à cocher ... je ne sais pas encore ce qui est faisable.
Ah là. Il vaut mieux se poser pour y réfléchir avant
cela voudrait dire que pour une date précise ajoutée, le calcul des indemnités ne se ferait que sur base des noms en colonne A dont vous auriez coché un case dans l'userform 2 ?
Si oui, une idée à développer :
- Dans votre userform 2 on ajoute une liste des noms selon colonne A et une case à cocher en regard de chaque nom.
- vous cochez les noms qui sont en grève
- une fois terminé, le bouton Ajouter, ira ajouter la nouvelle colonne avec la date et mettra en couleur le nom qui est coché
Une question : Dans l'usf2 vous avez une option supprimer. La combobox doit charger les dates qui sont dans la feuil2 en ligne 4