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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    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
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    2. 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
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    3. Helpme89
       
      Et dois-je laisser "NomFeuille" ou il faut que je remplace par le nom de ma feuille ?
      0
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut Frenchie,
      Immisce toi, immisce toi!
      Pas de souci.
      Plus on est...
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    3. 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
    4. 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
    5. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Non, simplement remplacer tout le code de plus de 1000 lignes par celui que j'ai mis au-dessus.
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Pour revoir ton Userform3, affectes, au bouton véhicules, la macro Bouton3_Clic...
      0
    2. 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
    3. 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
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    5. 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