IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Itérer dans un tableau pour choisir une fonction [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut Itérer dans un tableau pour choisir une fonction
    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
    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)
    Dans ma procédure build j'opère un contrôle sur le nom du fichier qui va être traité.
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      arr_lpar = Array( _
                       "RNXE", _
                       "IPO1", _
                       "RNXP" _
                       )
    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
    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 !


  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Apparemment c'est refusé lorsque le nom est une référence de cellule valide. Je suppose qu'une fonction A1 te posera le même pb.
    Ajoute systématiquement "_" devant chaque nom de fonction.
    eric

  3. #3
    Membre confirmé Avatar de Bragu Demon
    Homme Profil pro
    Intégrateur d'Explopitation
    Inscrit en
    Juin 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Intégrateur d'Explopitation
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2013
    Messages : 125
    Par défaut
    Je savais bien que c'était tout bidon.

    Merci, c'est en effet la solution.

    Cependant, l'underscore ( _ ) ne semble pas accepté en tant que premier caractère pour le nom d'une procédure Sub ou Function.
    J'ai donc mis des "§" qui sont accepté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/08/2009, 19h42
  2. Réponses: 1
    Dernier message: 08/05/2008, 08h51
  3. Réponses: 1
    Dernier message: 15/05/2006, 18h43
  4. Ecrire dans un tableau html depuis une fonction js ?
    Par botanica dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 12h48
  5. Réponses: 7
    Dernier message: 10/09/2005, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo