Procédure trop longue
Résolu/Fermé
A voir également:
- Procédure trop grande vba
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
- Photo trop grande pour fond d'écran smartphone ✓ - Forum Matériel & Système
- Erreur 1004 vba ✓ - Forum VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Find vba - Astuces et Solutions
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
18 mars 2015 à 08:09
18 mars 2015 à 08:09
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
337
18 mars 2015 à 08:19
18 mars 2015 à 08:19
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
18 mars 2015 à 08:32
18 mars 2015 à 08:32
Salut Frenchie,
Immisce toi, immisce toi!
Pas de souci.
Plus on est...
Immisce toi, immisce toi!
Pas de souci.
Plus on est...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
18 mars 2015 à 08:34
18 mars 2015 à 08:34
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
337
18 mars 2015 à 08:48
18 mars 2015 à 08:48
Non, simplement remplacer tout le code de plus de 1000 lignes par celui que j'ai mis au-dessus.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
18 mars 2015 à 09:14
18 mars 2015 à 09:14
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...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
18 mars 2015 à 09:15
18 mars 2015 à 09:15
Pour revoir ton Userform3, affectes, au bouton véhicules, la macro Bouton3_Clic...
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.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
>
Helpme89
18 mars 2015 à 10:01
18 mars 2015 à 10:01
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 ?
18 mars 2015 à 08:43
Sauf si modifier le Module 2 à un réel intérêt ?
18 mars 2015 à 08:45
ça va te prendre 5 minutes.
Après tout dépend si tu veux ou non optimiser ton fichier.
18 mars 2015 à 08:57
Donc j'efface tout tout ? Enfin du module 2 ?
18 mars 2015 à 08:59
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...)
18 mars 2015 à 09:00