Problème de macro

Bonjour,

un amis, m'a créé un fichier excel afin de m'aider dans mon activité quotidienne de vétérinaire rurale.
ce fichier est exellent, mais il contient 4 macros, qui ne fonctionnent pas, et je ne comprends absolument rien
à la programmation visual basic.

j'aurais donc souhaité me mettre en contact avec un cador du visual basic afin de résoudre et débugger la phrase qui ne va pas dans ma ligne de commande.

je spécifit " me mettre en contact" car si je pouvais eviter de mettre mon fichier en pièce jointe sur le forum, çà m'arrangerais bien.

j'espère trouvé un passionné qui puisse me donner un coup de pouce ou tout au moins m'aiguiller pour que jy parvienne de moi même.
Configuration: Windows Vista
Internet Explorer 7.0
office 2007 professionel

7 réponses

  1. Modérateur
    Bonjour,

    Avant tout, tu peux peut être nous dire si tu as un message d'erreur... Est-ce que la macro s'arrête sur une ligne particulière ?

    Et aussi, as-tu pensé à activer les macros ? Et à mettre ta sécurité sur Moyen, et pas sur Elevé (Menu Macro, Sécurité). Si c'est ça, redémarre Excel ensuite.

    Euh... et ton ami, il sait pas corriger ?... ;))

    m@rina
    1. re bonjour,

      eh bien enfait pour ce qui est de mon amis, il ne peut pas m'aider, car on s'est un peu embrouillé, bref cette option là est bloqué.... no comment

      oui j'ai un message d'erreur:

      run-time error 2147319784 '-(80028018)':
      method 'activate' of object '_worksheet' failed

      mais peut être puis-je vous envoyer mon fichier, par le moyen de votre choix

      merci du coup de main en tout cas !!!
      1. voici ma ligne de commande en Visual basic, qui à l'air de déconner:

        Sub recopie()
        nettoyer
        Sheets("saisie pour calcul").Unprotect
        Sheets("saisie pour calcul").Activate
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        Sheets("saisie totale").Activate
        If Sheets("saisie totale").OptionButtons("crit1") = xlOn Then p = "$A$2:$l$3"
        If Sheets("saisie totale").OptionButtons("crit2") = xlOn Then p = "$A$2:$l$4"
        If Sheets("saisie totale").OptionButtons("crit3") = xlOn Then p = "$A$2:$l$5"
        Affiche_tout
        Sheets("saisie totale").Unprotect
        Range("m:v").Delete
        Range("A6:l16384").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range(p), CopyToRange:=Columns("M:x"), _
        Unique:=False
        Range("m16384").Select
        Selection.End(xlUp).Select 'trouve la dernière ligne remplie
        l = Selection.Row
        Sheets("saisie pour calcul").Unprotect
        Sheets("saisie totale").Range("M2:x" & l).Copy
        Sheets("saisie pour calcul").Cells(2, 1).PasteSpecial Paste:=xlValues, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        Sheets("saisie totale").Range("M:x").Delete
        Range("a3").Select
        Sheets("saisie pour calcul").Activate
        If l <> 1 Then
        Range("n2:bg" & l).FillDown:
        Range("bi2:bj" & l).FillDown:
        Range("be2:bf" & l).Select:
        Selection.Copy:
        Range("bg2:bh" & l).Select:
        Selection.PasteSpecial Paste:=xlValues, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False:
        Range("n3:be" & l).Select:
        Selection.Copy:
        Selection.PasteSpecial Paste:=xlValues, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        Range("bi3:bj" & l).Select:
        Selection.Copy:
        Selection.PasteSpecial Paste:=xlValues, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        End If
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        max_echelle
        Sheets("saisie pour calcul").Activate
        Range("a2").Select
        Sheets("saisie pour calcul").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        Sheets("Calcul").Activate
        Range("a1").Select
        End Sub

        Sub nettoyer()
        Sheets("saisie pour calcul").Unprotect
        Sheets("saisie pour calcul").Activate
        Range("a3:bj16384").ClearContents
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        Sheets("saisie totale").Activate
        End Sub

        Sub trie_avancé()
        Sheets("saisie totale").Activate
        Affiche_tout
        trie
        Sheets("saisie totale").Unprotect
        Range("a6:l16000").Select
        MsgBox ("Très important !!! L'option 'Ligne de titres' doit être sur 'Oui' sinon celles-ci sont détruites,")
        Application.Dialogs(xlDialogSort).Show
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        End Sub

        Sub trie()
        Sheets("saisie totale").Activate
        Sheets("saisie totale").Unprotect
        Range("A6:l16384").Select
        Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Key2:= _
        Range("B6"), Order2:=xlAscending, Header:=xlYes, _
        OrderCustom:=1, MatchCase:=False, Orientation:= _
        xlTopToBottom
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        End Sub

        Sub Aperçu_filtre()
        Sheets("saisie totale").Activate
        Sheets("saisie totale").Unprotect
        If Sheets("saisie totale").OptionButtons("crit1") = xlOn Then p = "$A$2:$l$3"
        If Sheets("saisie totale").OptionButtons("crit2") = xlOn Then p = "$A$2:$l$4"
        If Sheets("saisie totale").OptionButtons("crit3") = xlOn Then p = "$A$2:$l$5"
        Range("A6:l16384").AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=Range(p), Unique:=False
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        End Sub

        Sub nouvelle_saisie()
        Affiche_tout
        Sheets("saisie totale").Activate
        Sheets("saisie totale").Unprotect
        Rows("7:7").Select
        Selection.Insert Shift:=xlDown
        Rows("8:8").Select
        Selection.Copy
        Rows("7:7").Select
        Selection.PasteSpecial Paste:=xlFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        End Sub

        Sub Affiche_tout()

        Sheets("saisie totale").Activate
        Sheets("saisie totale").Unprotect
        On Error GoTo gesterror
        ActiveSheet.ShowAllData
        Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
        Scenarios:=True
        gesterror:
        End Sub

        Sub recherche_erreur(l)
        For i = 14 To 19
        For j = 2 To l
        v = Cells(j, i).Value
        If Cells(j, i).Value > 100 Then
        MsgBox ("Valeur négative: les calculs effectués ne seront pas cohérents")
        Cells(j, i).Select
        End If
        Next j
        Next i
        End Sub

        merci de m'aiguiller, je ne vois pas du tout par ou commencer

        merci
        1. voici ma ligne de commande en Visual basic, qui à l'air de déconner:

          Sub recopie()
          nettoyer
          Sheets("saisie pour calcul").Unprotect
          Sheets("saisie pour calcul").Activate
          ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          Sheets("saisie totale").Activate
          If Sheets("saisie totale").OptionButtons("crit1") = xlOn Then p = "$A$2:$l$3"
          If Sheets("saisie totale").OptionButtons("crit2") = xlOn Then p = "$A$2:$l$4"
          If Sheets("saisie totale").OptionButtons("crit3") = xlOn Then p = "$A$2:$l$5"
          Affiche_tout
          Sheets("saisie totale").Unprotect
          Range("m:v").Delete
          Range("A6:l16384").AdvancedFilter Action:=xlFilterCopy, _
          CriteriaRange:=Range(p), CopyToRange:=Columns("M:x"), _
          Unique:=False
          Range("m16384").Select
          Selection.End(xlUp).Select 'trouve la dernière ligne remplie
          l = Selection.Row
          Sheets("saisie pour calcul").Unprotect
          Sheets("saisie totale").Range("M2:x" & l).Copy
          Sheets("saisie pour calcul").Cells(2, 1).PasteSpecial Paste:=xlValues, Operation:= _
          xlNone, SkipBlanks:=False, Transpose:=False
          Sheets("saisie totale").Range("M:x").Delete
          Range("a3").Select
          Sheets("saisie pour calcul").Activate
          If l <> 1 Then
          Range("n2:bg" & l).FillDown:
          Range("bi2:bj" & l).FillDown:
          Range("be2:bf" & l).Select:
          Selection.Copy:
          Range("bg2:bh" & l).Select:
          Selection.PasteSpecial Paste:=xlValues, Operation:= _
          xlNone, SkipBlanks:=False, Transpose:=False:
          Range("n3:be" & l).Select:
          Selection.Copy:
          Selection.PasteSpecial Paste:=xlValues, Operation:= _
          xlNone, SkipBlanks:=False, Transpose:=False
          Range("bi3:bj" & l).Select:
          Selection.Copy:
          Selection.PasteSpecial Paste:=xlValues, Operation:= _
          xlNone, SkipBlanks:=False, Transpose:=False
          End If
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          max_echelle
          Sheets("saisie pour calcul").Activate
          Range("a2").Select
          Sheets("saisie pour calcul").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          Sheets("Calcul").Activate
          Range("a1").Select
          End Sub

          Sub nettoyer()
          Sheets("saisie pour calcul").Unprotect
          Sheets("saisie pour calcul").Activate
          Range("a3:bj16384").ClearContents
          ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          Sheets("saisie totale").Activate
          End Sub

          Sub trie_avancé()
          Sheets("saisie totale").Activate
          Affiche_tout
          trie
          Sheets("saisie totale").Unprotect
          Range("a6:l16000").Select
          MsgBox ("Très important !!! L'option 'Ligne de titres' doit être sur 'Oui' sinon celles-ci sont détruites,")
          Application.Dialogs(xlDialogSort).Show
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          End Sub

          Sub trie()
          Sheets("saisie totale").Activate
          Sheets("saisie totale").Unprotect
          Range("A6:l16384").Select
          Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, Key2:= _
          Range("B6"), Order2:=xlAscending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, Orientation:= _
          xlTopToBottom
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          End Sub

          Sub Aperçu_filtre()
          Sheets("saisie totale").Activate
          Sheets("saisie totale").Unprotect
          If Sheets("saisie totale").OptionButtons("crit1") = xlOn Then p = "$A$2:$l$3"
          If Sheets("saisie totale").OptionButtons("crit2") = xlOn Then p = "$A$2:$l$4"
          If Sheets("saisie totale").OptionButtons("crit3") = xlOn Then p = "$A$2:$l$5"
          Range("A6:l16384").AdvancedFilter Action:=xlFilterInPlace, _
          CriteriaRange:=Range(p), Unique:=False
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          End Sub

          Sub nouvelle_saisie()
          Affiche_tout
          Sheets("saisie totale").Activate
          Sheets("saisie totale").Unprotect
          Rows("7:7").Select
          Selection.Insert Shift:=xlDown
          Rows("8:8").Select
          Selection.Copy
          Rows("7:7").Select
          Selection.PasteSpecial Paste:=xlFormats, Operation:= _
          xlNone, SkipBlanks:=False, Transpose:=False
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          End Sub

          Sub Affiche_tout()

          Sheets("saisie totale").Activate
          Sheets("saisie totale").Unprotect
          On Error GoTo gesterror
          ActiveSheet.ShowAllData
          Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
          Scenarios:=True
          gesterror:
          End Sub

          Sub recherche_erreur(l)
          For i = 14 To 19
          For j = 2 To l
          v = Cells(j, i).Value
          If Cells(j, i).Value > 100 Then
          MsgBox ("Valeur négative: les calculs effectués ne seront pas cohérents")
          Cells(j, i).Select
          End If
          Next j
          Next i
          End Sub

          merci de m'aiguiller, je ne vois pas du tout par ou commencer

          merci
          1. le problème se situerai au niveau de la ligne 19, en partant du bas :

            Sub Affiche_tout()

            Sheets("saisie totale").Activate
            Sheets("saisie totale").Unprotect
            On Error GoTo gesterror
            ActiveSheet.ShowAllData
            Sheets("saisie totale").Protect DrawingObjects:=True, Contents:=True, _
            Scenarios:=True
            gesterror:
            End Sub
            1. Modérateur
              Bonsoir,

              Tes macros sont très amateur... Sans regarder de très près, les macro passent leur temps à faire des protect, et unprotec, et de sélectionner.
              VBA n'a aucunement besoin de sélectionner pour exécuter une action !

              Déjà, la ligne
              Sheets("saisie totale").Activate

              ne sert à rien

              Question : tes feuilles sont protégées, leur as-tu mis un mot de passe ?

              Personnellement, je n'ai pas beaucoup de temps en ce moment, mais le mieux est que tu nous dises ce que tu souhaites faire exactement avec tes macros ? AMHA, c'est à refaire...

              m@rina
              1. Contributeur
                Bonjour,
                Je veux bien y jeter un coup d'oeil, tu met ton classeur sur cjoint.com et tu met le lien donner dans un MP, de cette facon il ne serra pas disponnible sur le web à moins d'avoir le lien.
                A+
                EDIT: mais pour ça tu doit t'inscrire comme membre