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 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 15 avril 2016 à 22:44
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 15 avril 2016 à 22:44
A voir également:
- Procedure too large
- Hiberfil.sys too big - Guide
- Le point d'entree de procedure est introuvable kernel32 dll ✓ - Forum Windows
- Procédure héritage bara ✓ - Forum Vos droits sur internet
- &Quot;J'ai hérité de 4 millions de dollars" : c'est une arnaque ? ✓ - Forum Vos droits sur internet
- Request header or cookie too large ✓ - Forum Réseaux sociaux
1 réponse
NHenry
Messages postés
15113
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 avril 2024
331
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.