Procedure too large
Résolu/Fermé
r4944
Messages postés
122
Date d'inscription
vendredi 2 octobre 2015
Statut
Membre
Dernière intervention
3 mars 2017
-
Modifié par NHenry le 15/04/2016 à 20:57
NHenry Messages postés 15162 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 octobre 2024 - 15 avril 2016 à 22:44
NHenry Messages postés 15162 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 24 octobre 2024 - 15 avril 2016 à 22:44
A voir également:
- Procedure too large
- Hiberfil.sys too big - Guide
- Le point d'entrée de procédure discard virtual memory ✓ - Forum Windows
- Le point d'entrée de procédure est introuvable dans la bibliothèque de liens dynamiques ✓ - Forum Logiciels
- Combien y a-t-il de bateaux dans la zone de 565 pixels de large et 1400 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum PS4
- Le point d'entree de procedure est introuvable kernel32 dll ✓ - Forum Windows
1 réponse
NHenry
Messages postés
15162
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
24 octobre 2024
341
15 avril 2016 à 21:08
15 avril 2016 à 21:08
Il te faut découper ta fonction, par exemple :
Tu peux aussi utiliser un tableau voir une collection, par exemple la fonction d'avant peut se réduire à :
Tu passes de 54 tests à seulement 1 seul.
De plus, l'initialisation de la liste des correspondances peut être faite de manière globale dans le WorkBook_Open avec la collection en variable publique, comme ça tu initialise à un seul endroit et ensuite, tu ne fais que le test.
Note, je n'ai pas M$ Office sur mon PC, donc le code est tapé directement dans un éditeur de teste.
SELECT Case Target.Address(0, 0) Case "BH4": SubTraitementBH4 Target Case "BF4": SubTraitementBF4 Target ... End Select
Private SubTraitementBH4(Byval Target As Range) Select Case Target.Address(0, 0) Case "K1": sbr2 = "B49" Case "K2": sbR5 = "B50" Case "K3": sbR5 = "B51" Case "K4": sbR5 = "B52" Case "K5": sbR5 = "B53" Case "K6": sbR5 = "B54" Case "K7": sbR5 = "B55" Case "K8": sbR5 = "B56" Case "K9": sbR5 = "B57" Case "K10": sbR5 = "B58" Case "K11": sbR5 = "B59" Case "K12": sbR5 = "B60" Case "K13": sbR5 = "B61" Case "K14": sbR5 = "B62" Case "K15": sbR5 = "B63" Case "K16": sbR5 = "B64" Case "K17": sbR5 = "B65" Case "K18": sbR5 = "B66" Case "K19": sbR5 = "B67" Case "K20": sbR5 = "B68" Case "A1": sbR5 = "B71" Case "A2": sbR5 = "B72" Case "A3": sbR5 = "B73" Case "A4": sbR5 = "B74" Case "A5": sbR5 = "B75" Case "A6": sbR5 = "B76" Case "A7": sbR5 = "B77" Case "A8": sbR5 = "B78" Case "A9": sbR5 = "B79" Case "A10": sbR5 = "B80" Case "PS1": sbR5 = "B83" Case "PS2": sbR5 = "B84" Case "PS3": sbR5 = "B85" Case "PS4": sbR5 = "B86" Case "PS5": sbR5 = "B87" Case "PS6": sbR5 = "B88" Case "PS7": sbR5 = "B89" Case "PS8": sbR5 = "B90" Case "PS9": sbR5 = "B91" Case "PS10": sbR5 = "B92" Case "Cmp1": sbR5 = "B95" Case "Cmp2": sbR5 = "B96" Case "Cmp3": sbR5 = "B97" Case "Cmp4": sbR5 = "B98" Case "Cmp5": sbR5 = "B99" Case "Cmp6": sbR5 = "B100" Case "Cmp7": sbR5 = "B101" Case "Cmp8": sbR5 = "B102" Case "Cmp9": sbR5 = "B103" Case "Cmp10": sbR5 = "B104" Case "Cmp11": sbR5 = "B107" Case "Cmp12": sbR5 = "B108" Case "Cmp13": sbR5 = "B109" Case "Cmp14": sbR5 = "B110" Case "Cmp15": sbR5 = "B111" End Select If sbR5 <> "" Then Sheets("SBR").Range("BE3") = _ Sheets("Process Info").Range(sbR5).Value End If End Sub
Tu peux aussi utiliser un tableau voir une collection, par exemple la fonction d'avant peut se réduire à :
Private SubTraitementBH4(Byval Target As Range) dim lCollection as New Collection lCollection.Add "B49","K1" lCollection.Add "B50","K2" lCollection.Add "B51","K3" ... On Local Error Resume Next Sheets("SBR").Range("BE3") = Sheets("Process Info").Range(lCollection(Target.Address(0,0)).Value End Sub
Tu passes de 54 tests à seulement 1 seul.
De plus, l'initialisation de la liste des correspondances peut être faite de manière globale dans le WorkBook_Open avec la collection en variable publique, comme ça tu initialise à un seul endroit et ensuite, tu ne fais que le test.
Note, je n'ai pas M$ Office sur mon PC, donc le code est tapé directement dans un éditeur de teste.
Modifié par r4944 le 15/04/2016 à 21:33
je viens de l' essayer le premier exemple j'ai eu une erreur '' Sub or function not defined ''
15 avril 2016 à 21:40
15 avril 2016 à 21:43
15 avril 2016 à 21:44
aprés je l'ai appelé a partir de l'autre fonction
15 avril 2016 à 21:49
Le premier morceau de code sert à l'appel des subs.
Il te faut faire l'équivalent du 2ième pour chaque Select Case utilisant Target.Address(0,0).
Je n'ai pas pour habitude de fournir du tout cuit, je laisse en général place à la découverte et l'apprentissage.