Excel VBA : multiples "call"

Fermé
JBR - 9 déc. 2011 à 17:07
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 9 déc. 2011 à 18:21
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.

A voir également:

2 réponses

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
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
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
9 déc. 2011 à 18:21
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