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 :

Dim var as Sheet - Erreur de compilation: Type défini par l'utilisateur non défini


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
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Dim var as Sheet - Erreur de compilation: Type défini par l'utilisateur non défini
    Citation Envoyé par Pierre Fauconnier Voir le message
    Worksheet représente une feuille de calcul, alors que Sheet représente n'importe quelle feuille, quel que soit son type.
    [...]
    La collection Worksheets est un sous-ensemble de la collection Sheets.
    Bonjour,

    J'ai lu cette discussion.
    Jje pense vraiment être dans la ligne de la question de naty76, c'est-à-dire: "Peut-on avoir des surprises en utilisant indifféremment Sheets ou Worksheets?"

    Je pense avoir bien compris la notion de sous-ensemble, la différence entre collection et objet et l'avantage à utiliser Worksheet plutôt que Sheet, mais je ne comprends pas pourquoi on ne pourrait pas déclarer une variable en tant que Sheet.

    provoque une erreur de compilation: "Type défini par l'utilisateur non défini".

    Dans l'aide, Sheet est seulement une Propriété et pas un Objet.

    Pourquoi Sheet ne pourrait-il pas être un Objet?

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 682
    Par défaut
    Bonjour,

    Tu as simplement oublié un "s"


  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    C'est pourtant simple :
    citation de l'aide VBA :
    La collection Sheets peut contenir des objets Chart ou Worksheet.
    l'objet Sheet n'existe pas.

  4. #4
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Tu as simplement oublié un "s"
    Merci d'avoir essayé, mais ce n'est pas l'objet de ma question.
    Je souhaite avoir Sheet en tant qu'Objet et pas en tant que Collection.

    Citation Envoyé par unparia Voir le message
    C'est pourtant simple :
    citation de l'aide VBA :
    "La collection Sheets peut contenir des objets Chart ou Worksheet."
    l'objet Sheet n'existe pas.
    Citation Envoyé par Dédé6621 Voir le message
    Dans l'aide, Sheet est seulement une Propriété et pas un Objet.
    J'ai bien consulté l'aide et c'est vrai que ma question revient un peu à demander une crêpe au sucre quand ça n'existe pas.

    Mais si l'on veut avoir une variable qui désigne indifféremment des Chart ou des Worksheet, une solution consisterait à déclarer la variable en tant qu'Objet, puis d'utiliser For Each dans la Collection Sheets, comme dans ce code trouvé sur la page http://silkyroad.developpez.com/VBA/...ables/#LVIII-C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      'Retrouver le nom de toutes les feuilles graphiques dans le classeur actif.
      	Dim Sh As Object
      	For Each Sh In ActiveWorkbook.Sheets
      	If TypeOf Sh Is Chart Then MsgBox Sh.Name
      	Next
    Sinon, j'ai trouvé que l'on peut créer son propre type. Mais là, je ne suis pas certain que ça en vaille la peine.

    Merci quand même pour vos réponses

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Dédé6621 Voir le message
    Merci d'avoir essayé, mais ce n'est pas l'objet de ma question.
    Je souhaite avoir Sheet en tant qu'Objet et pas en tant que Collection.

    J'ai bien consulté l'aide et c'est vrai que ma question revient un peu à demander une crêpe au sucre quand ça n'existe pas.

    Dans VB6 et VBA oui. Basic et VB, jusqu'à VB6 et VBA n'ont jamais été conçus comme des langages objets. Ils le sont devenus par la force des choses. Eh oui, dans VBA, on peut avoir des propriétés qui sont, du mois l'équivalent, des objets. D'ailleurs, il existe, depuis des lustres, dans l'aide de VBA une rubrique Intitulée "Renvoi d'un objet à partir d'une collection"

    Mais ce n'est pas le cas de VB.net. VB.net a été conçu comme un langage objet. Et c'est pour cela que la compatibilité ascendante entre VB6-VBA et VB.net n'est pas totale. Mais, cela c'est un autre problème.

    Donc pour mettre "Nabuchodonosor" dans la cellule "C3" de la feuille "Noé" on peut procéder comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("Noé").range("C3").value = "Nabuchodonosor"
    Cela fait que :
    sheets("Noé") est un objet à la fois WorkSheet et Sheet et une propriété d'un objet Workbook
    range("C3") est à la fois un objet Range (une cellule, ou une plage de cellules sont des objets Range) et une propriété d'un objet Worksheet ou sheet
    value est une propriété d'un objet, ici un objet Range.

    Et je sens venir la question : "Pourquoi un objet WorkSheet est aussi un objet Sheet ?"

    Parce que pour Excel, tout ce qui peut être une feuille (feuille de calcul, feuille graphique, feuille de macros xl4 ou xl5 et peut-être d'autres que j'oublie) est un objet sheet, membre de la collection Sheets. Mais la feuille de calcul est en fait un objet WorkSheet. Dans un classeur qui a seulement des feuilles de calcul sheet(s) et WorkSheet(s) sont interchangeables.

    P.S. Désolé Pierre, je n'avais pas lu toutes les réponses. En répondant à la dernière interrogation, j'ai "débordé" sur la tienne.

Discussions similaires

  1. [XL-2007] Erreur de Compilation : type defini par l'utilisateur non defini
    Par devalender dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/01/2018, 11h11
  2. [XL-2003] Erreur de compilation " type defini par l'utilisateur non defini"
    Par JEXCELPAS dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/01/2015, 15h40
  3. Réponses: 1
    Dernier message: 01/11/2014, 09h44
  4. [XL-2010] erreur de compilation / Type défini par l'utilisateur non défini
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/08/2014, 15h31
  5. Réponses: 2
    Dernier message: 11/01/2009, 15h58

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