Excel VBA : multiples "call"

Bonjour,

J'ai un Sub dans lequel j'appelle plus d'une trentaine de "call". Chaque Call Sub est lié à une cellule en particulier, qui quand je la change, cache ou non des lignes dans des feuilles du même document.

Ce qui est ennuyeux est que lorsque je change une cellule, j'ai l'impression que la Sub passe en revue tous les call au lieu que celui lié à cette cellule.

Comment je peux faire pour que cela puisse être plus léger en terme de process ?

Merci beaucoup pour votre aide.

2 réponses

  1. bonjour

    comme dit paf, il te faut tester l'adresse de la cellule modifiée, quelque chose du genre

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ad As String
    ad = Target.Address
    Select Case ad
      Case "$A$1": Call proc1(ad)
      Case "$A$2": Call proc2(ad)
      Case "$A$3": Call proc3(ad)
      Case "$A$4": Call proc4(ad)
    End Select
    End Sub
    
    Sub proc1(a)
      MsgBox ("proc1 " & a)
    End Sub
    
    Sub proc2(a)
      MsgBox ("proc2 " & a)
    End Sub
    
    Sub proc3(a)
      MsgBox ("proc3 " & a)
    End Sub
    
    Sub proc4(a)
      MsgBox ("proc4 " & a)
    End Sub


    bonne suite
    0
    1. bonjour

      sans voir la sub, pas facile de répondre.

      Si chaque call est lié à une cellule, il faudrait tester la cellule (les coordonnées ...) pour savoir quelle sub appeler.

      Bonne suite ou à plus de précision.
      0
      1. Voici la macro "main"

        Sub Worksheet_Change(ByVal Target As Range)
        With Sheets("CBF")
        Application.ScreenUpdating = False

        'Définition des variables utilisées dans les sub
        Dim AuditPieuvre As Variant
        AuditPieuvre = ("E32")
        Dim TestYN
        TestYN = ("C68")
        Dim InsertYN
        InsertYN = ("D63")
        Dim Langue
        Langue = ("H25")
        Dim NBLangue
        NBLangue = ("E25")
        Dim FirstConfNumber
        FirstConfNumber = ("C82")
        Dim LangueFirstConfNumber
        LangueFirstConfNumber = ("E82")
        Dim SecondConfNUmber
        SecondConfNUmber = ("C84")
        Dim LangueSecondConfNumber
        LangueSecondConfNumber = ("E84")
        Dim ThirdConfNumber
        ThirdConfNumber = ("C86")
        Dim LangueThirdConfNumber
        LangueThirdConfNumber = ("E86")
        Dim FirstReplayNumber
        FirstReplayNumber = ("C105")
        Dim LangueFirstReplayNumber
        LangueFirstReplayNumber = ("E105")
        Dim SecondReplayNumber
        SecondReplayNumber = ("C107")
        Dim LangueSecondReplayNumber
        LangueSecondReplayNumber = ("E107")
        Dim ThirdReplayNumber
        ThirdReplayNumber = ("C109")
        Dim LangueThirdReplayNumber
        LangueThirdReplayNumber = ("E109")
        Dim ChoixQA
        ChoixQA = ("C97")
        Dim FilterDial
        FilterDial = ("C93")
        Dim ChoixTranscription
        ChoixTranscription = ("C118")
        Dim ChoixWelcomeMessage
        ChoixWelcomeMessage = ("C45")
        Dim UChoixRecord
        UChoixRecord = ("C101")
        Dim BChoixRecord
        BChoixRecord = ("C102")
        Dim ChoixIdentification
        ChoixIdentification = ("C91")
        Dim NumberLineTest
        NumberLineTest = ("C70")
        Dim NumberRehearsalTest
        NumberRehearsalTest = ("C75")
        Dim ChoixWebConf
        ChoixWebConf = ("C112")
        Dim ChoixComLine
        ChoixComLine = ("C95")
        Dim NumberSpeaker
        NumberSpeaker = ("C34")
        Dim ChoixDDI
        ChoixDDI = ("C88")
        Dim TranscriptionLangue
        TranscriptionLangue = ("J119")
        Dim RecordingLangue
        RecordingLangue = ("J102")
        Dim ChoixQAFiltering
        ChoixQAFiltering = ("C99")

        'Programme principal qui appelle ceux décrient plus bas
        Call Auditorium(AuditPieuvre)
        Call TestGlobal(TestYN)
        Call Insert(InsertYN)
        Call Langues(Langue)
        Call NbLangues(NBLangue)
        Call FirstNumberConf(FirstConfNumber)
        Call LangueFirstNumberConf(LangueFirstConfNumber)
        Call SecondNumberConf(SecondConfNUmber)
        Call LangueSecondNUmberConf(LangueSecondConfNumber)
        Call ThirdNumberConf(ThirdConfNumber)
        Call LangueThirdNumberConf(LangueThirdConfNumber)
        Call FirstNumberReplay(FirstReplayNumber)
        Call LangueFirstNumberReplay(LangueFirstReplayNumber)
        Call SecondNumberReplay(SecondReplayNumber)
        Call LangueSecondNumberReplay(LangueSecondReplayNumber)
        Call ThirdNumberReplay(ThirdReplayNumber)
        Call LangueThirdNumberReplay(LangueThirdReplayNumber)
        Call SessionQA(ChoixQA)
        Call DialInFilter(FilterDial)
        Call Transcription(ChoixTranscription)
        Call WelcomeMessage(ChoixWelcomeMessage)
        Call UnilingueRecording(UChoixRecord)
        Call BilingueRecording(BChoixRecord)
        Call Identification(ChoixIdentification)
        Call LineTestNumber(NumberLineTest)
        Call RehearsalTestNumber(NumberRehearsalTest)
        Call Webconf(ChoixWebConf)
        Call ComLine(ChoixComLine)
        Call SpeakerNumber(NumberSpeaker)
        Call DDIMode(ChoixDDI)
        Call LangueTranscription(TranscriptionLangue)
        Call LangueRecording(RecordingLangue)
        Call QAFiltering(ChoixQAFiltering)

        End With
        End Sub

        Ensuite tu as toute la liste des Sub appelées, mais ça risque de faire très long si je devais tout mettre.

        Aujourd'hui si jamais je touche à la cellule liée à la sub "Identification" par exemple (C91), il va faire tourner cette Sub + toutes les autres. Hors je souhaiterai juste qu'il fasse tourner cette sub et qu'il attende que j'agisse sur les autres cells qui concernent les autres sub pour faire tourner les process.
        0