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 :

Creer une variable contenant plusieurs onglets


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Creer une variable contenant plusieurs onglets
    J'essaie de créer une variable dans le vba me permettant de lui attribuer plusieurs onglets dans le but d'imprimer ces onglets. Mon code sans variable est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets(Array("ELODIE", "ALEX", "TOMMY")).Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    C'est ces noms d'onglets que j'aimerais rendre variable. J'ai donc choisi une cellule dans l'onglet impression dont le contenu est les noms d'onglets que je voulais imprimersoit "ELODIE", "ALEX", "TOMMY" et j'ai par la suite attribué cette valeur à une variable dans mon code VBA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim p As Worksheet
    Dim a As String
    Set p = ActiveWorkbook.Worksheets("Impression") '.Range("B5").Value
    a = p.Range("B6").Value
    Sheets(Array("a")).Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Bien qu'il reconnait la valeur de la variable a comme étant "ELODIE", "ALEX", "TOMMY" il me donne un message comme quoi l'indice n'appartient pas à la sélection à la ligne de code Sheets(Array("a")).Select

    Quelqu'un peut-il m'aider?

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    bonjour
    essaye en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Array("a")).Select
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Array(a)).Select
    ps : il manque un bonjour a ta requete

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Toujours en erreur
    Bonjour,

    J'ai essayé sans les guillemets mais cela me fait toujours le même message d'erreur. Je crois aussi que cela vient de la façon dont il interprète la variable. Soit "ELODIE", "ALEX", "TOMMY" vs " "ELODIE", "ALEX", "TOMMY"", si il tient compte des guillemet double ou non, ce que je ne sais pas.

    Merci pour votre aide précieuse.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je te propose une petite variante de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim p As Worksheet
      Dim a() As String
      Set p = ActiveWorkbook.Worksheets("Impression")
      a = Split(p.Range("B6").Value, ",")
      Sheets(a).Select
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Dans la cellule B6, écris les noms des feuilles sans guillemets ni espaces:
    ELODIE,ALEX,TOMMY

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Citation Envoyé par Tomeloale Voir le message
    Bonjour,

    J'ai essayé sans les guillemets mais cela me fait toujours le même message d'erreur. Je crois aussi que cela vient de la façon dont il interprète la variable. Soit "ELODIE", "ALEX", "TOMMY" vs " "ELODIE", "ALEX", "TOMMY"", si il tient compte des guillemet double ou non, ce que je ne sais pas.

    Merci pour votre aide précieuse.
    A tout hasard, si ta variable a est censée partir de 1, mets ceci tout en haut de ton module:

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous
    À ma connaissance, on ne peut pas le feire directement :
    peut-être en créant la macro par le code, mais, je reconnais mon incompétence là-dessus. ce qui pose problème, je présume, est que les "," font partie de l'instruction et non de la variable
    Tu as la solution d'imprimer page par page dans une boucle
    for each Cel in range([B1],[B65536].end(xlup))

    next cel

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Purée je n'y avais pas fait gaffe: j'ai déjà donné la solution à ton problème à quelqu'un d'autre sur ce forum. Il avait exactement le même problème, mais je ne me souviens plus ce que je lui ai répondu.

    J'ai mis un petit peu de temps mais je l'ai retrouvé:
    http://www.developpez.net/forums/d63...iste-cochable/

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous
    À ma connaissance, on ne peut pas le feire directement :
    peut-être en créant la macro par le code, mais, je reconnais mon incompétence là-dessus. ce qui pose problème, je présume, est que les "," font partie de l'instruction et non de la variable
    Tu as la solution d'imprimer page par page dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for each Cel in range([B1],[B65536].end(xlup))
       if not isempty(cel) then sheets(cel).PrintOut...
    Seulement si c'est pour faire un document avec des pages numérotées...
    - Soit on recalcule la numérotation dans le programme (bof), soit si on a un nombre de page limité, on crée des modéle d'impressions de 1, 2, ... X pages, avec un chargement des noms dans un tableau qui donnera le préformatage a imprimer avec un "select case" par exemple
    Un petit classeur pour préciser mes dire

    A+

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Sinon ça fonctionnait pour toutes les pages voulues d'un coup pour l'autre personne concernée... avec un seul printout...

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Je vous signale que j'ai testé le code proposé dans ce message et qu'il fonctionne suivant les désirs du posteur.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Un gros merci à vous tous pour votre aide et votre grande efficacité la suggestion de M. Tech fonctionne parfaitement soit :
    Citation Envoyé par AlainTech Voir le message
    Je te propose une petite variante de ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim p As Worksheet
      Dim a() As String
      Set p = ActiveWorkbook.Worksheets("Impression")
      a = Split(p.Range("B6").Value, ",")
      Sheets(a).Select
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Dans la cellule B6, écris les noms des feuilles sans guillemets ni espaces:
    ELODIE,ALEX,TOMMY

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

Discussions similaires

  1. creer une variable contenant info de 2 autres var
    Par kkingstone dans le forum SAS Base
    Réponses: 4
    Dernier message: 26/05/2009, 15h19
  2. [Tableaux] Lecture d'une variable contenant plusieurs arrays
    Par MightyDucks dans le forum Langage
    Réponses: 10
    Dernier message: 27/03/2006, 13h40
  3. Réponses: 5
    Dernier message: 20/09/2005, 23h48
  4. [postgresql]creer une table avec plusieurs clés primaire??
    Par perlgirl dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2004, 18h24
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 12h23

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