Procédure trop longue

Résolu/Fermé
Helpme89 - 18 mars 2015 à 07:42
 Helpme89 - 18 mars 2015 à 10:32
Bonjour à tous, voilà comme le titre l'indique, j'ai un gros gros problème de procédure... En effet mon code en VBA, nécessaire à la réalisation d'un historique de suivis du matériel par ouvrier, fait environs 1070 lignes de code...
Du coup un petit message d'erreur apparait, ce qui est fort fâcheux :/

J'ai essayer de diminuer le code, mais je suis pas un expert en VBA et pour moi chaque ligne à sont importance.
Est ce que quelqu'un serait capable de réduire ce code sans modifier les paramètres et de façon à ce que la procédure fonctionne ? Svp

Voici mon document Excel :

http://cjoint.com/?ECshSxuW327

Merci d'avance !

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
Bonjour,

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

1
Merci pijaku, mais mon module fonctionne correctement si je peux éviter de perdre du temps à le modifier ce serai cool, mon problème c'est le UserForm 1 lier au bouton emprunt de consommable.
Sauf si modifier le Module 2 à un réel intérêt ?
0
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 à 08:45
si je peux éviter de perdre du temps à le modifier ce serai cool
ça va te prendre 5 minutes.
Après tout dépend si tu veux ou non optimiser ton fichier.
0
Oui tu as raison pijaku, je vais faire ce que tu me dis, je vais optimiser mon fichier Excel tant que j'y suis.
Donc j'efface tout tout ? Enfin du module 2 ?
0
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 à 08:59
Non, pas tout...
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...)
0
Et dois-je laisser "NomFeuille" ou il faut que je remplace par le nom de ma feuille ?
0
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
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:
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
0
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
Salut Frenchie,
Immisce toi, immisce toi!
Pas de souci.
Plus on est...
0
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
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
0
Bonjour Frenchie83, merci de ta réponse très rapide.
Ta solution serais de crée un Msgbox de façon à choisir le nom et de lancer la procédure en fonction du nom choisis, c'est ça ? Et du ai je besoin de garder le reste de mon code, ou unique cette partie ?
0
Et à la place de "Choisissez un Nom" je doit mettre le nom souhaiter, ou je le laisse tel quel et je le rentrerai dans mon userform ?
0
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
Non, simplement remplacer tout le code de plus de 1000 lignes par celui que j'ai mis au-dessus.
0
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
Voici ton tout nouveau classeur :
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...
0
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
Pour revoir ton Userform3, affectes, au bouton véhicules, la macro Bouton3_Clic...
0
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.
0
Et pour le UserForm 3, en fait, c'est le code qui marche pas et non pas le bouton, l'action s'exécute bien, mais aucune valeur n'est rentrer ou que se soit :/
0
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
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?
0
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 ?
0