Bonjour le forum,
Je me trouve face à un souci qui me prend bien la tête, et il doit y avoir une explication assez simpliste (j'en suis persuadé) mais inaccessible pour moi actuellement.
Sur une feuille excel, j'ai placé des boutons de type formulaires (parce que je ne suis pas arrivé à le faire avec des ActiveX)
Je récupère le texte du bouton (ce qu'il y a écrit dessus) avec
Dans ma procédure build j'opère un contrôle sur le nom du fichier qui va être traité.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 'Reconstitution du nom des fichiers en fonction du bouton cliqué lpar = ActiveSheet.Buttons(Application.Caller).Caption aaaa = Format(Date, "YYYY") fplan = "Planning " & aaaa & " " & lpar & ".xlsx" ftba = "Tableau de bord Applicatif - " & lpar & ".xlsx" Call build(fplan)
la variable lpar n'est plus utilisée, mais son contenu se retrouve dans une variable "partition"
L'idée est d'itérer dans un array afin de contrôler si "partition" est pris en charge ou non.
Je peuple donc un array :
Et je le parcourt pour exécuter une fonction différente selon le fichier à traiter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 arr_lpar = Array( _ "RNXE", _ "IPO1", _ "RNXP" _ )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 For i = 0 To UBound(arr_lpar) If Trim(LCase(partition)) = "IPO1" Then Application.run "p" & partition trouve = True Exit For End If If Trim(LCase(partition)) = Trim(LCase(arr_lpar(i))) Then Application.run arr_lpar(i) trouve = True Exit For End If trouve = False Next
Chaque fonction est dans un module différent (pour faciliter la maintenance de tout ça)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Option Explicit 'Fonction principale qui appelle les sous fonctions Function ipo1() MsgBox "Traitement pour la partition" & vbLf & _ "IPO1" End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Option Explicit 'Fonction principale qui appelle les sous fonctions Function rnxe() MsgBox "Traitement pour la partition" & vbLf & _ "RNXE" End Function
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Option Explicit 'Fonction principale qui appelle les sous fonctions Function rnxp() MsgBox "Traitement de la Météo pour la partition" & vbLf & _ "RNXP" End Function
Problème :
J'obtiens une erreur d'exécution 1004 'Impossible d'exécuter la macro 'IPO1' uniquement lorsque je clique sur le bouton IPO1.
Mon code fonctionne comme attendu lorsque je clique sur les autres boutons.
Je suis donc obligé de rajouter un test pour le fichier ipo1 (en rajoutant une lettre devant le nom ça fonctionne très bien)
Test :
Mes types de données et longueurs sont identique (cad je compare du string sur 4 de long avec du string sur 4 de long)
Lorsque que je remplace RNXE par RNX1 j'ai le même problème.
Lorsque que je remplace RNXE par RNXE1 je n'ai pas le problème.
J'en conclu que lorsque le nom d'une fonction fait 4 caractères et se termine par un chiffre, c'est le bazar.
J'ai essayé avec des procédure c'est pareil...
J'aimerai bien vos conseils et éclairages pour me sortir proprement de ce mauvais pas tout en concervant ces contraintes (si possible) :
avoir un tableau (Array, ArrayList, Dictionary peu m'importe) dans lequel itérer afin de choisir quoi exécuter
garder un découpage par module, c'est tellement plus simple pour maintenir par la suite.
D'avance merci !
![]()
Partager