Excel VBA : multiples "call"

JBR -  
ccm81 Messages postés 11033 Statut Membre -
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. Paf
     
    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. JBR
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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