Procédure trop longue

Résolu
Helpme89 -  
 Helpme89 -
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   Statut Modérateur Dernière intervention   2 761
 
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
Helpme89
 
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   Statut Modérateur Dernière intervention   2 761 > Helpme89
 
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
Helpme89
 
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   Statut Modérateur Dernière intervention   2 761 > Helpme89
 
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
Helpme89
 
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   Statut Membre Dernière intervention   338
 
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   Statut Modérateur Dernière intervention   2 761
 
Salut Frenchie,
Immisce toi, immisce toi!
Pas de souci.
Plus on est...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
Helpme89
 
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
Helpme89
 
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   Statut Membre Dernière intervention   338
 
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   Statut Modérateur Dernière intervention   2 761
 
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   Statut Modérateur Dernière intervention   2 761
 
Pour revoir ton Userform3, affectes, au bouton véhicules, la macro Bouton3_Clic...
0
Helpme89
 
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
Helpme89
 
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   Statut Modérateur Dernière intervention   2 761 > Helpme89
 
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
Helpme89
 
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