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 :

Incompréhension Workbook et Workbooks


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Par défaut Incompréhension Workbook et Workbooks
    Bonjour,

    Je m'excuse avant tout pour toutes mes questions mais je débute, j'espère que ce forum est approprié car je ne vois pas bcp de questions "débutantes"

    Comment savoir si on doit utiliser Workbook ou workbooks dans notre code ?
    J'ai beaucoup de mal à voir le rapport entre les deux, bien que l'un découle de l'autre...
    Par exemple quand j'écris Workbook. je n'ai pas la liste des propriétés qui s'affiche. Par contre si je déclare Truc en tant que Workbook, j'ai bien les propriétés quand je tape Truc.
    et je n'ai pas les mêmes propriétés pour Workbooks et Truc.

    J'ai regardé dans le cours vba.pdf (http://bidou.developpez.com/article/VBA/)mais ma question reste en suspend.

    Pouvez-vous m'aider ?

    Merci

    NATY

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    Workbook est un objet qui représente un classeur.
    Workbooks est une collection

    Pour les collections en VBA, la syntaxe est souvent le nom de l'objet + s
    Les collections te permettent par exemple de parcourir l'ensemble des objets
    donc ici l'ensemble des classeurs.

    Exemple fourni par l'aide VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each w In Workbooks 
        If w.Name <> ThisWorkbook.Name Then
            w.Close savechanges:=True
        End If
    Next w
    Edit : La boucle permet donc de lister tous les classeurs ouverts.

  3. #3
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    WorkBooks est une collection typée, c'est à dire un ensemble d'objets de même type. En l'occurence, c'est l'ensemble des WorkBook.
    Un WorkBook est un "classeur", c'est à dire un objet fichier ouvert dans Excel.

    Il existe une structure hiérarchique dans la bibliothèque VBA.
    Quand tu arrives dans ton application, tu vois DES classeurs (WorkBooks).
    Alors, tu cherches parmi tous ces classeurs ouverts, pour en trouver un(WorkBook) - par exemple : toto.xls
    Et, c'est CE classeur que tu veux activer

    Pour faire cela en VBA, tu écriras :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorkBooks("toto.xls").Activate
    Dans cette ligne, on part de l'application, et on cherche dans l'ensemble des classeurs ouverts (les workbooks) à récupérer (d'où les parenthèses de la syntaxe) l'objet de type workbook qui s'appelle toto.xls (d'où le nom mis dans les parenthèses, afin de l'activer.
    Si tu fais F2 (explorateur d'objets), que tu actives la bibliothèque Excel et que tu cherches les deux classes Workbook et WorkBooks, tu verras que Activate est une méthode de WorkBook et pas de WorkBooks
    En effet, puisque WorkBooks("toto.xls") te renvoie un objet WorkBook (l'objet Classeur s'appelant toto.xls), la méthode Activate s'applique à cet objet uniquement. Seulement, pour récupérer ton workbook, tu as dû partir le rechercher dans la collection des workbooks.

    En résumé...
    Tu fais appel à un WorkBook lorsque tu n'es intéressée que par UN classeur, et à WorkBooks lorsque tu as besoin de l'ensemble des classeurs ouverts dans l'application.

    Ca te va ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Par défaut
    Merci pour vos réponses. C'est super ! Je crois que c'est beaucoup plus clair.

    Donc :

    Si je ne travaille que dans un classeur, je ne vais utiliser que Workbook.
    Si je veux utiliser ses propriétés, ai-je besoin de déclarer un classeur par exemple Truc pour que l'Intellisense s'affiche ? ou même si cette liste ne s'affiche pas çà fonctionne quand même.
    Par ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub exemple()
    Dim Truc as Workbook
    Truc.Activate (activate va s'afficher dans la liste)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub exemple()
    Workbook.Activate (la liste ne va pas s'afficher)
    End Sub

    Est-ce que ces deux manières sont bonnes pour utiliser un classeur et utiliser leur propriétés ?

    NATY

  5. #5
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    La deuxième NE PEUT PAS fonctionner car, si on traduisait ta ligne en français, tu dirais à l'interpréteur VBA :
    Actives le classeur
    Mais lui, il va te dire ...
    Lequel ?
    La première est bien meilleure, mais, il va t'envoyer paître aussi, pour la même raison : tu ne lui as pas dit QUEL classeur tu voulais !

    Tu peux utiliser ces syntaxes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("nom").Activate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkBook.Activate 'pour activer le classeur qui contient la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkBook.Activate 'ce qui ne sert à rien, mais signifie : Activer le classeur actif
    et enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim oClasseur as WorkBook
    Set oClasseur = 'Définir ici le classeur concerné... par exemple : WorkBooks("nom") 
    oClasseur.Activate

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    Avant tout test ce que tu fais et tu verras ce qui marche ou pas !

    Dans ton premier exemple tu oublies de dire à quoi correspond TRUC

    Il faut quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub testWorkbook1()
     
    Dim Truc As Workbook
    Set Truc = ThisWorkbook ' C'est le classeur actif
     
    MsgBox Truc.Name
     
    End Sub
    Pour le dernier exemple tu dois utiliser Thisworkbook le classeur dans lequel se trouve ta macro (ALT /F11)

    Ici il faut utiliser la collection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox Workbooks(ThisWorkbook.Name)
    ' ou 
    MsgBox Workbooks("Le nom de mon fichier Excel.xls")
    Avant tout utilises F1 dès que tu as un doute en tapant par exemple

    Workbook tu auras la définition et un ou plusieurs exemples.

    Tu nous dis

  7. #7
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Ceci est inutile !
    Citation Envoyé par aalex_38 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Workbooks(ThisWorkbook.Name)
    un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ThisWorkbook.Name
    est suffisant
    C'est ce que j'expliquais juste au-dessus...

  8. #8
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Effectivement, c'est inutile, j'ai écrit ma réponse avant d'avoir pu lire la votre

    Edit: je voulais simplement illustrer l'utilisation de la collection

  9. #9
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    y'a pas de mal

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 60
    Par défaut
    Merci Alex et Maxence.
    Je crois que c'est clair maintenant (en tous cas pour les Workbooks)

    Ok pour F1, je connais mais parfois ce n'est pas très clair pour moi
    En tous cas, merci d'avoir pris le temps.

    A bientôt (surement prochainement )

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

Discussions similaires

  1. [VB6]Problème ouverture Workbooks
    Par patrice67 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/04/2006, 18h40
  2. [VBA-E] sous procédure avec workbook open
    Par raver2046 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/03/2006, 00h20
  3. [VBA-E] Lancer workbook open
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/12/2005, 12h40
  4. Ouverture CSV par Workbooks.open
    Par PoPmiSiR dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/10/2005, 10h19
  5. [VBA-E]Bouton et différents workbooks
    Par mirascheat dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/09/2005, 21h51

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