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 :

Variable dans l'appel d'un onglet


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Variable dans l'appel d'un onglet
    Bonjour,
    J'ai plusieurs onglets nommées (Stream 1, Stream 2, Stream 3 etc...)
    Afin de simplifier l'écriture je fais le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim S1 as object 
    Dim S2 as Object
    Dim S3 as Object
    '...
     
    Set S1=Sheets("Stream 1")
    Set S2=Sheets("Stream 2")
    Set S3=Sheets("Stream 3")
    '...
    Ca fonctionne très bien jusqu'ici, j'utilise régulièrement cette méthode.

    Là ou ca bloque c'est que je souhaiterai lancer une copie de données sur chacune des ses sheets et là ca bloque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim X as worksheet
    Dim i as Integer
    Dim j as Integer
    Dim numrow as Integer
    Dim T as Object
     
    Set T=Sheets("Test")
     
    For j=1 to numrow  'numrow vaut 10 par exemple, 10 étant le nombre de stream
         For i = 1 to 100
             Set X ="S" & j
             X.Cells(i,j).Value=T.Cells(i,j).value
         Next i
    Next j
    La méthode d'appel à la sheet Sj ne fonctionne pas. J'ai essayé d'autre manière mais ca ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set X = Worksheets("S" & j) 'ne fonctionne pas
    Set X.name= "S" & j 'ne fonctionne pas
    En gros je voudrais que X="S"&J renvoie à S1, S2, S3,... en fonction de la valeur du j.

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 365
    Points : 631
    Points
    631
    Par défaut
    Bonjour

    Pour moi sur la ligne 11 si tes feuilles s’appellent "S1","S2" etc

    il faut mettre :Set X = Sheets("S" & j) sur la ligne 11 de ton code

    bonne journée

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Tout d'abord, je te conseille d'être précis dans tes déclarations : une feuille Excel n'est pas seulement un Object, c'est une Worksheet.

    Ensuite, une variable ne peut pas d'indenter par son nom dans VBA (comme cela existe dans d'autres langages comme Clipper ou certains C).
    Par contre, il est possible de créer des vecteurs ou tableaux de variables indicées.

    Une dernière remarque : quand tu présentes un code sur ce forum, mets de préférence le code qui sort de VBE (ce qui visiblement n'est pas le cas des codes présentés ici).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Sh(3) as Worksheet
    Dim Sh_X As Worksheet
    Dim j as Integer
     
    Set Sh(1) = Sheets("Stream 1")
    Set Sh(2) = Sheets("Stream 2")
    Set Sh(3) = Sheets("Stream 3")
     
    j = 2
     
    Set Sh_X = Sh(j)
    Sh_X.Name= "S" & j
    La dernière ligne change le nom de l'onglet mais ne change en rien la feuille assignée à la variable.

    Il est aussi possible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Sh_X = Sheets("Stream " & j)
    Le paramètre de Sheets est une simple chaine de caractère (quand ce n'est pas un index numérique) qu'il est possible de composer par concaténation.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    @VBE: C'est parfait, merci!
    Ca m'a permis d'introduire un nouvel élément que je ne connaissais pas.
    En effet j'ai pris l'habitude de mettre les worksheet en Object mais je changerai.

    Merci encore pour l'astuce

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

Discussions similaires

  1. Mettre une variable dans l'appel d'une variable de session
    Par PrinceMaster77 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2011, 10h12
  2. Inversion de variables dans l'appel d'un webservice
    Par skerdreux dans le forum Services Web
    Réponses: 0
    Dernier message: 05/11/2009, 12h16
  3. Réponses: 10
    Dernier message: 12/11/2008, 17h57
  4. Réponses: 4
    Dernier message: 28/07/2007, 23h45
  5. Appel de variables dans un declencheur de module
    Par darkmoon_tn dans le forum Oracle
    Réponses: 1
    Dernier message: 17/03/2006, 12h53

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