Procédure trop longue
Résolu
Helpme89
-
Helpme89 -
Helpme89 -
A voir également:
- Procédure trop grande vba
- Barre des taches trop grande - Guide
- Télécharger livre maternelle grande section gratuit pdf - Télécharger - Éducatifs
- Excel compter cellule couleur sans vba - Guide
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Comment faire une grande photo sur instagram - Guide
3 réponses
Bonjour,
Beaucoup de codes à modifier...
Bref, si tu le veux bien commençons.
Beaucoup de codes à modifier...
Bref, si tu le veux bien commençons.
- Efface tout le code de ton Module2
- places, dans ce module2, la procédure suivante :
Sub ActiveFeuille() Dim NomFeuille As String Sheets(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text).Select End Sub
- affecte cette unique macro à chacun de tes boutons de la feuille consommable
Bonjour helpme89, bonjour Pijaku
Sans vouloir m'immiscer dans la conversation, j'avais commençé à y jeter un oeil de mon côté, et j'allais proposer de modifier le code du userform1 appliqué au bouton "validation", celui qui fait plus de 1000 lignes, on pourrait le simplifier comme suit:
A tester
bonne journée
cdlt
Sans vouloir m'immiscer dans la conversation, j'avais commençé à y jeter un oeil de mon côté, et j'allais proposer de modifier le code du userform1 appliqué au bouton "validation", celui qui fait plus de 1000 lignes, on pourrait le simplifier comme suit:
Private Sub CommandButton1_Click() Dim nextLigne As Long Dim Sh As Worksheet Set Sh = Sheets(ComboBox1.Value) nextLigne = Sh.Cells.Find("*", Range("B1"), , , xlByRows, xlPrevious).Row + 1 Sh.Range("B" & nextLigne).Value = UserForm1.ComboBox1.Value Sh.Range("C" & nextLigne).Value = UserForm1.TextBox2.Value Sh.Range("D" & nextLigne).Value = UserForm1.TextBox3.Value Sh.Range("E" & nextLigne).Value = UserForm1.TextBox4.Value Sh.Range("F" & nextLigne).Value = UserForm1.TextBox5.Value Unload Me End Sub
A tester
bonne journée
cdlt
Par contre, dans ta procédure, n'oublie pas de tester la valeur de ComboBo1 avant de l'attribuer à ta variable Objet. Sous peine de crash si ComboBox1 = ""
Private Sub CommandButton1_Click() Dim nextLigne As Long Dim Sh As Worksheet If ComboBox1 = "" Then MsgBox "Choisissez un nom!": Exit Sub Set Sh = Sheets(ComboBox1.Value) nextLigne = Sh.Cells.Find("*", Range("B1"), , , xlByRows, xlPrevious).Row + 1 Sh.Range("B" & nextLigne).Value = UserForm1.ComboBox1.Value Sh.Range("C" & nextLigne).Value = UserForm1.TextBox2.Value Sh.Range("D" & nextLigne).Value = UserForm1.TextBox3.Value Sh.Range("E" & nextLigne).Value = UserForm1.TextBox4.Value Sh.Range("F" & nextLigne).Value = UserForm1.TextBox5.Value Unload Me End Sub
Voici ton tout nouveau classeur :
https://www.cjoint.com/c/ECsjwTBmjYx
Les modifications :
Nota :
- Dim NomFeuille As String doit être supprimé. Ne sert à rien.
- La macro Action, je te l'ai laissé pour info. Elle n'est plus utile. Elle m'a servi à attribuer à tous tes boutons de la feuille consommable, la macro Affichefeuille. C'est fait, ça n'est plus à faire.
- J'ai modifié le texte du bouton "AUTRES" en "AUTRE" comme la feuille du même nom...
https://www.cjoint.com/c/ECsjwTBmjYx
Les modifications :
- Code de l'userform1 comme indiqué par Frenchie,
- La procédure CalculMat (à tester, je ne l'ai pas fait) (Module1) devient :
Sub CalculMat() Dim Lign As Byte For Lign = 5 To 30 Range("D" & Lign).Value = Range("D" & Lign).Value + Range("H" & Lign).Value - Range("I" & Lign).Value Range("I" & Lign & ":J" & Lign).ClearContents Next Lign End Sub
- Code du Module 2, cf ma réponse plus tôt.
Nota :
- Dim NomFeuille As String doit être supprimé. Ne sert à rien.
- La macro Action, je te l'ai laissé pour info. Elle n'est plus utile. Elle m'a servi à attribuer à tous tes boutons de la feuille consommable, la macro Affichefeuille. C'est fait, ça n'est plus à faire.
- J'ai modifié le texte du bouton "AUTRES" en "AUTRE" comme la feuille du même nom...
Oula quel travail pijaku ! Cela fait 4 jours que je suis sur ce projet, et toi tu arrives et tu résous tous mes problèmes, chapeau bas l'artiste, idem pour toi Frenchie83 ! Vous m'impressionnez !
Je viens donc de regarder le doc excel, et il y as deux choses qui me chagrine, toujours le problème avec le bouton du gros matériel, quand je le déplace dans la feuille sommaire, celui ci ne fonctionne plus et pour le calcul de la feuille matériaux, les valeurs, entrée ne s'efface plus après validation.
Je viens donc de regarder le doc excel, et il y as deux choses qui me chagrine, toujours le problème avec le bouton du gros matériel, quand je le déplace dans la feuille sommaire, celui ci ne fonctionne plus et pour le calcul de la feuille matériaux, les valeurs, entrée ne s'efface plus après validation.
nouveau fichier :
https://www.cjoint.com/c/ECskmpIsOjA
Les codes des 3 userforms et du module2 sont modifiés...
Je ne comprends pas tes 2 problèmes, peux tu réexpliquer?
https://www.cjoint.com/c/ECskmpIsOjA
Les codes des 3 userforms et du module2 sont modifiés...
Je ne comprends pas tes 2 problèmes, peux tu réexpliquer?
Ah oui ben la le nouveau document excel fonctionne déjà beaucoup mieux ! :D
Le problème dont je te parle, c'est que si tu vas sur la feuille matériaux, quand tu rentres des valeurs dans "Entrée" et "Sortie", il faut qu'après avoir cliquer sur le bouton valider, c'est valeurs s'effacent de façon à ce que lors de la prochaine validation, les valeurs entrées ne se reprennent pas en considération, me comprend tu ?
Le problème dont je te parle, c'est que si tu vas sur la feuille matériaux, quand tu rentres des valeurs dans "Entrée" et "Sortie", il faut qu'après avoir cliquer sur le bouton valider, c'est valeurs s'effacent de façon à ce que lors de la prochaine validation, les valeurs entrées ne se reprennent pas en considération, me comprend tu ?
Sauf si modifier le Module 2 à un réel intérêt ?
ça va te prendre 5 minutes.
Après tout dépend si tu veux ou non optimiser ton fichier.
Donc j'efface tout tout ? Enfin du module 2 ?
Dans ton Module2, tu as certaines macros qui ne sont pas affectées à tes boutons de la feuille Consommables (retour par exemple). Il ta faut les conserver.
Mais attends un peu, je reviens dans 5 minutes avec une solution toute automatique (pas besoin d'affecter la macro à tous tes boutons, une procédure peut le faire...)