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 :

Passer le nom d'une feuille Excel dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 18
    Points
    18
    Par défaut Passer le nom d'une feuille Excel dans une variable
    Bonjour, voici mon problème :

    Je souhaite créer une forme sur une des 5 feuilles de mon fichier excel via une macro, la feuille qu'il faut sélectionner est renseignée dans un fichier texte:
    je lis le fichier texte, je récupère la valeur (1,2,3,4 ou 5) puis en fonction de cette valeur je dois sélectionner la feuille adéquate (Feuil1,Feuil2,Feuil3,Feuil4 ou Feuil5).

    Voici le code utilisé (sélection de la feuille) :

    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
     If sheet = 1 Then
            sheet_name = "Feuil1"
        ElseIf sheet = 2 Then
            sheet_name = "Feuil2"
        ElseIf sheet = 3 Then
            sheet_name = "Feuil3"
        ElseIf sheet = 4 Then
            sheet_name = "Feuil4"
        ElseIf sheet = 5 Then
            sheet_name = "Feuil5"
        End If
     
        'Ajout de formes automatique (Rectangle) dans la feuille
        With sheet_name.Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
            .Name = "P0" & Project   'shape name
            .TextFrame.Characters.Text = Project   'inside Text
            .Fill.ForeColor.RGB = RGB(180, 130, 20) 'inside color
        End With
    Mon problème c'est que la variable qui contient le nom de la feuille est de type String, j'ai déja essayé d'utiliser un type Worksheets en écriant sheet_name = worksheets("Feuil1").select mais ça ne marche pas non plus.

    Ce code fonctionne uniquement quand je remplace sheet_name par le nom de la feuille directement (Feuil1 par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       With Feuil1.Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
            .Name = "P0" & Project   'shape name
            .TextFrame.Characters.Text = Project   'inside Text
            .Fill.ForeColor.RGB = RGB(180, 130, 20) 'inside color
        End With
    Auriez-vous une idée de comment faire pour régler ce problème ? Sans avoir à copier 5 fois la même chose pour chaque feuille dans un mega IF

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour !

    Nom = "Feuil" & VariableTexteLu …   A utiliser via Worksheets(Nom) …

    Et Feuil1 dans le dernier code n'est pas un nom de feuille mais un CodeName, ne pas confondre !

    ___________________________________________________________________________________________________________
    Je suis Paris, Manchester, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        With Sheets("Feuil" & sheet).Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
            .Name = "P0" & Project   'shape name
            .TextFrame.Characters.Text = Project   'inside Text
            .Fill.ForeColor.RGB = RGB(180, 130, 20) 'inside color
        End With

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim sheet_name       
    sheet_name =array("Feuil0", "Feuil1","Feuil2","Feuil3","Feuil4","Feuil5")
    'sheet_name =array("", "toto","titi","tutu","tata","tete")
     
        'Ajout de formes automatique (Rectangle) dans la feuille
        With sheets(sheet_name(sheet )).Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
            .Name = "P0" & Project   'shape name
            .TextFrame.Characters.Text = Project   'inside Text
            .Fill.ForeColor.RGB = RGB(180, 130, 20) 'inside color
        End With

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi un Feuil10 (qui pourrait exister dans le classeur bien que ça ne change rien dans le fond) plutôt qu'un Option Base1 ? Une logique qui m'échappe ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Joe,
    Par ce que un array commence a zéro et les onglet a un donc il n'est utile que pour matérialiser le tableau(0)!

    Oui il pourrait exister en tant que nom d'onglet mais pas en index d'onglet!

    Je voulais écrire 0 pour la compréhension mais j'ai mis 10!


    Array("",etc...
    Dernière modification par Invité ; 23/05/2017 à 20h39.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci pour vos réponses, j'ai essayé les deux mais j'ai le message d'erreur suivant : "L'indice n'appartient pas à la sélection" sur les lignes suivantes :

    Sol1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets(sheet_name).Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
    Sol2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Worksheets(sheet_name(sheet)).Shapes.AddShape(msoShapeRoundedRectangle, 10, coord1, 80, 85)
    Pourtant mes feuilles Excel s'appellent bien Feuil1, Feuil2 etc...

    Merci encore pour votre aide

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Explique un peu mieux ce que tu as fait. Qu'est-ce que sheet? sheet_name? Que valent-ils? Quelle méthode as-tu adoptée parmis celles que nous t'avons présentées?

  9. #9
    Invité
    Invité(e)
    Par défaut
    bonjour
    au moment de l'erreur,
    click sur débuget passe ta sourie sur sheet et dis nous la valeur lue!

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    oui bien sûr, j'ai bien compris que ton "faux" indice 0 est là pour synchroniser les numéros de son listing et les feuilles

    mais ce que je voulais savoir, c'est pourquoi procéder ainsi plutôt que de travailler en Base 1 et avoir de facto la synchro entre les deux numérotations ?
    Ce n'est peut-être qu'une habitude de travail (les deux solutions fonctionneront), mais dans le doute je pose la question, une petite subtilité ou stratégie que je n'aurai pas vu. Je suis assez friand du Base 1 (à tort ou à raison) car j'ai horreur des décalages d'indices à gérer, surtout si on mélange du Array alimenté et du Array récupéré via un Range.

  11. #11
    Invité
    Invité(e)
    Par défaut
    c'est sure que la base 1 évite toutes ambiguïtés!

    mais devient ingérable au delà d'un certain seuil!

    J'ai déjà fait une réduction de Carnot pour 40 éléments bonjour le binaire réfléchi!

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

Discussions similaires

  1. Importer une feuille excel dans une Form
    Par piepio dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/02/2007, 09h37
  2. inserer les donnees d une feuille excel dans une table sql
    Par josyde2006 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 20/12/2006, 08h40
  3. Insérer une feuille Excel dans une page HTML
    Par Pakkaï dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2006, 14h55
  4. Réponses: 9
    Dernier message: 30/05/2006, 17h55
  5. Importer une feuille excel dans une table Paradox ?
    Par Dalgo75 dans le forum Bases de données
    Réponses: 8
    Dernier message: 07/05/2006, 11h49

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