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 :

Pb de variable [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut Pb de variable
    Bonjour,
    Je dois faire le même travail avec des fichiers différents, en fonction d'un contexte choisit par l'utilisateur. Aujourd'hui, j'ai reproduis la même macro pour chacun des contextes. Donc la maintenance peut devenir compliquée.
    Je voudrais utiliser des variables de variable...
    Voici un extrait de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub PrepaBo()
    'Ouvre les fichiers Req du type souhaité et les met en forme
    Public Lo As ListObject, WbBo1 As Workbook, WbBo2 As Workbook, WbBo3 As Workbook
    Public Req1 As String, Req2 As String, Req3 As String  'Type de requête utilisée 
    Application.ScreenUpdating = False
    if Contexte1 = true then Req1 = "FichierA.xlsx": Req2 = "FichierB.xlsx": Req3 = "FichierC.xlsx"
    if Contexte2 = true then Req1 = "FichierD.xlsx": Req2 = "FichierE.xlsx": Req3 = "FichierF.xlsx"
    if Contexte3 = true then Req1 = "FichierG.xlsx": Req2 = "FichierH.xlsx": Req3 = "FichierI.xlsx"
    ...
    '1er traitement
            Set WbBo1 = Workbooks.Open(ChemBo & Req1)    'Req1 cf.ConTxt()
            DoEvents
                Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
                With Lo
                    .Name = "TbBoSce1"
                    .TableStyle = "tablestylemedium5" 'sans mise en forme
                End With
            ... suite du code
    '2e traitement
            Set WbBo2 = Workbooks.Open(ChemBo & Req2)    'Req2 cf.ConTxt()
            DoEvents
                Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
                With Lo
                    .Name = "TbBoSce2"
                    .TableStyle = "tablestylemedium5" 'sans mise en forme
                End With
            ... suite du code
    '3er traitement
            Set WbBo3 = Workbooks.Open(ChemBo & Req3)    'Req3 cf.ConTxt()
            DoEvents
                Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
                With Lo
                    .Name = "TbBoSce3"
                    .TableStyle = "tablestylemedium5" 'sans mise en forme
                End With
            ... suite du code
    ... suite du code est strictement identique pour les 3 traitements ET les fichiers restent ouverts pour traiter tous les fichiers de travail du contexte.
    Mon Pb vient des variables WbBo1, Req1, TbBoSce1 qui prennent l'indice 2 et 3 dans les 2e et 3e traitement.

    J'ai essayé d’insérer une variable Sce as Byte et une boucle For comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    For Sce =1 to 3        
            Set WbBo & Sce = Workbooks.Open(ChemBo & Req & Sce )    'Req1 cf.ConTxt()
            DoEvents
                Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
                With Lo
                    .Name = "TbBoSce" & Sce 
                    .TableStyle = "tablestylemedium5" 'sans mise en forme
                End With
            ... suite du code
    Next Sce
    Mais cela ne fonctionne pas
    Il y a ensuite des traitements sur les fichiers WbBo ouverts toujours identiques, d’où l’intérêt de le faire qu'une fois.
    Est-ce que qq'1 peut me dire comment procéder ou ce n'est pas possible ?

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Prévois une procédure avec arguments (obligatoire ou optionnel), c'est la meilleure manière de travailler pour ce que tu évoques. Cela facilite la maintenance d'une procédure et cela allège le code
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonsoir Philippe,
    Merci pour ta réponse si rapide.

    Peux-tu un peu développer ce que tu entends par
    procédure avec arguments (obligatoire ou optionnel)
    , stp.
    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le plus bel exemple, ce sont les fonctions d'excel
    Par exemple pour faire la somme d'une plage de cellules, tu invoques une fonction qui est SOMME et tu lui passes comme argument la plage de cellules dont il faut faire la somme. En utilisant la fonction RECHERCHEV tu doit passer à la fonction quatre arguments dont le dernier est facultatif et ainsi de suite

    Tu trouveras un exemple simple dans cette contribution CopyRange - Copie de liste de données (source) dans une feuille cible où la procédure est une fonction nommée CopyRange avec cinq arguments dont trois sont optionnels. Il y a un fichier exemple téléchargeable

    Même s'il traite des fonctions utilisables dans Excel, la lecture de ce tutoriel titré Les fonctions personnelles dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonsoir Philippe,
    Impressionnant !
    J'ai juste regardé comme cela fonctionne avec des pas à pas.
    Ouf !

    Je suis bien incapable de faire qqch comme ça.

    Je regarderai mieux demain, c'est effectivement ce que je cherche à faire, mais je doute fortement de mes capacités.
    Merci quand même.

  6. #6
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour à tous,
    J'ai effectivement pu m'en sortir grâce à votre exemple...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public WbBo(), Elem As Byte
        For Elem = 0 To UBound(WbBo)
            'Affectation de la req
            If Elem = 0 Then Req = "So"
            If Elem = 1 Then Req = "Rd"
            If Elem = 2 Then Req = "St"
            With Workbooks(WbBo(Elem)).Sheets(1)
    ...
       Next
    ce qui me permet de travailler de manière identique et successive avec différents classeurs.
    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2002, 13h32
  2. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  4. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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