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 :

utiliser Sheets() avec des nom de feuille numérique [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 57
    Par défaut utiliser Sheets() avec des nom de feuille numérique
    Bonjour

    Je n'arrive pas à utiliser Sheets() avec des nom de feuille numérique.
    Mon classeur contient des feuilles nommées par année exemple Feuil1(2022), Feuil2(2023)

    Dans mon code VBA j'utilise une variable qui prend la valeur d'une cellule et lorsque je veux utiliser cette variable avec Sheets() j'ai un message d'erreur qui me dis que l'indice n'appartient pas à la sélection.
    Bref il me faudrait un classeur avec 2023 feuilles pour que cela fonctionne.

    Merci pour votre aide sur 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
     
    Sub messageGP()
    nomfeuil = Cells(2, 4).Value & "!"
    nmrdum = Cells(2, 2).Value
    lgndeb = Cells(4, 2)
    lgnfin = Cells(5, 2)
     
    Range("A16:A100").ClearContents
    Range("A13").Select
     
    If lgndeb = lgnfin Then
        Cells(15, 1).Value = lgndeb
        GoTo fin
        Else
        a = 15
        For x = lgndeb To lgnfin
            If Sheets(nomfeuil).Cells(x, 20).Value > 0 Then Cells(a, 1).Value = x
            a = a + 1
        Next x
    End If
    fin:
    End Sub

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 568
    Par défaut
    Bonjour

    Pour Excel le nom est toujours du texte donc "2022"

  3. #3
    Membre confirmé
    Homme Profil pro
    Secrétaire
    Inscrit en
    Avril 2020
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 57
    Par défaut
    Bonjour,

    Avec dans la cellule B2 la valeur 2023
    Ecrire : nomfeuil = Cells(2, 2).Value
    Donne : nomfeuil =2023

    Valeur qui ne fonctionne pas avec Sheets(nomfeuil)

    et pour rajouter des guillemet à une variable :
    Ecrire : nomfeuil = "" & Cells(2, 2).Value & ""
    Donne : nomfeuil = "2023"

    Valeur qui fonctionne avec Sheets(nomfeuil)

    Sur d'autre site il parle d'écrire Chr(34) à la place de "" ou de mettre 4 guillemets """"
    Ne le faites pas cela ne fonctionne pas.

    Bonne journée à tous.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Citation Envoyé par Progeric Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sub messageGP()
    nomfeuil = Cells(2, 4).Value & "!"
    Il n'y a pas un probleme la ?
    Pourquoi est-ce que tu concatène d'autorité et sans raison apparente un point d'exclamation avec le nom de la feuille entré par l'utilisateur ?

    Si l'utilisateur entre "Feuil1(2022)", ton code va chercher "Feuil1(2022)!", ce qui est tout sauf la même chose.

    Au passage, tu ne respecte pas la parentalité des objets, prépares toi à de sales surprises.
    La notation hongroise ne sert à rien sauf diminuer la lisibilité de ton code, jette cette mauvaise habitude à la poubelle.
    Option explicit ? C'est pour les cochons ?
    C'est quoi c'est horrible goto dégueulasse ? (et inutile).

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    De plus, attention aux convertions automatiques, chose qu'Excel adore faire, et VBA (quand on est indiscipliné) encore plus.
    Vu que tes variables sont implicitement variant, tu n'as aucune maitrise les types de donnée.

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    il suffit de déclarer les variables correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Sub test1()
    Dim Nom As String
    Nom = ActiveSheet.Range("A1").Value
    MsgBox ThisWorkbook.Sheets(Nom).Name
    End Sub
     
    Sub test2()
    Dim Nom As Integer
    Nom = ActiveSheet.Range("A1").Value
    MsgBox ThisWorkbook.Sheets(Nom).Name
    End Sub
    J'ai mis 2022 en A1 dans l'onglet actif, et j'ai un onglet qui s'appelle 2022. Compare le résultat entre test1 et test2.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/02/2016, 16h22
  2. [XL-2007] Utilisation des noms de feuilles
    Par pelerin98 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/11/2013, 23h13
  3. extraction de feuille avec des noms variables
    Par nsqualli dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/11/2008, 16h26
  4. Utiliser MySqlAdmin avec des droits utilisateurs sur XP
    Par thorgal85 dans le forum Outils
    Réponses: 2
    Dernier message: 18/03/2005, 12h19
  5. Réponses: 6
    Dernier message: 24/02/2005, 09h44

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