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 :

portée des variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut portée des variables
    Bonsoir,
    C'est du b, a, ba. Si on veut qu'une variable soit reprise dans toutes les sub d'un module, il faut la déclarer en tête de module, avant la première sub. C'est ce que je fais mais les sub secondaires que la sub main appelle me donnent "variable non définie". Quelque chose d'élémentaire m'échappe, mais quoi ? Il y a des exceptions à la règle ?
    Merci d'avance de vos lumières.
    Cordialement
    Pierre

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    Pas facile de répondre sans code, mais s'il s'agit d'une variable objet assure toi qu'une valeur lui a été affecté avant de l'utiliser.

    Cordialement,

    Tirex28/

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    As-tu bien mit Public devant la déclaration de ta variable au lieu de Dim.

    Starec

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonsoir,
    Tu parle de Sub Main, tu est bien en VBA ? pas plutôt en VB6 ?
    A+

  5. #5
    Membre éclairé Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 544
    Par défaut portée des variables
    Bonjour et merci à tous,
    Oui, je suis bien en VBA, je voulais dire que j'ai une sub principale qui appelle des routines répétitives (pléonasme ). J'ai fait l'essai avec Dim et avec Public: même bide. Ma variable est un indice (integer, mais j'ai aussi essayé Variant) de sheets(), pas un objet (Mais est-ce qu'elle devient objet parce qu'elle est associée à sheets(), ah ?). J'essaie de citer du code sans encombrer la bande passante; i est défini aléatoirement ici (avant appel à une sous-routine):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         Workbooks("des_mots.xls").Activate 'On va dans le classeur " des_mots "
                    ActiveWorkbook.Sheets("resultats").Select 'feuille résultats
                    Range("C5").Select
                    ActiveCell.FormulaR1C1 = "=INT(RAND()*10)"   ' créer un indice aléatoire de feuille
                    i = ActiveCell.Value
                    Range("C5").Value = Empty
     
     Call ZoneTravail
    (entre nous il y a sûrement un moyen plus élégant d'affecter la valeur aléatoire à mon indice i, mais j'ai pas trouvé, et vous ?)

    Ensuite le message "L'indice n'appartient pas à la sélection" apparaît ici (mais aussi dans d'autres sous-routines):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub ZoneTravail()
    Dim i As Variant                'j'ai aussi essayé sans re-déclarer i
      ActiveSheet.Select
      With Sheets(i).UsedRange
            b = .Row + .Rows.Count - 1
      End With
    End Sub
    Si quelqu'un voit par où ça pèche ?
    Merci de vos avis
    Pierre

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 95
    Par défaut
    Citation Envoyé par pierruel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
         Workbooks("des_mots.xls").Activate 'On va dans le classeur " des_mots "
                    ActiveWorkbook.Sheets("resultats").Select 'feuille résultats
                    Range("C5").Select
                    ActiveCell.FormulaR1C1 = "=INT(RAND()*10)"   ' créer un indice aléatoire de feuille
                    i = ActiveCell.Value
                    Range("C5").Value = Empty
     
     Call ZoneTravail
    Au moment ou tu fais call ZoneTravail, tu devrais plutot faire ZoneTravail(i)
    et
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub ZoneTravail(byval i as integer)

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour Pierruel,

    Dans la procédure ZoneTravail, tu ne dois pas avoir la ligne
    sinon, la variable locale est utilisée et la variable déclarée en début de module est "masquée" au sein de la procédure ZoneTravail


    Citation Envoyé par Starec
    Bonjour

    As-tu bien mit Public devant la déclaration de ta variable au lieu de Dim.

    Starec
    La variable peut être déclarée
    en tête de module, si on veut qu'elle soit privée au niveau du module... Si les procédures appelées sont toutes dans le module dans lequel la variable i a été déclarée, point n'est besoin de rendre cette variable publique
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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